Re: Most Occurring Value

From: Osvaldo Rosario Kussama <osvaldo(dot)kussama(at)gmail(dot)com>
To: Volkan YAZICI <yazicivo(at)ttmail(dot)com>
Cc: Mike Ginsburg <mginsburg(at)collaborativefusion(dot)com>, pgsql-general(at)postgresql(dot)org
Subject: Re: Most Occurring Value
Date: 2008-04-08 16:11:48
Message-ID: 47FB9944.4070307@gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Volkan YAZICI escreveu:
> Mike Ginsburg <mginsburg(at)collaborativefusion(dot)com> writes:
>> There is probably a really simple solution for this problem, but for
>> the life of me I can't see to think of it. I have three tables
>>
>> --contains u/p for all users in the site
>> TABLE users (user_id INT primary key, username VARCHAR(50), password TEXT)
>> --list of all possible events (login, logout, timeout)
>> TABLE events (event_id INT primary key, event VARCHAR(255))
>> --logs the activity of all users logging in/out, etc
>> TABLE log (log_id INT primary key, user_id INT REFERENCES users,
>> event_id INT REFERENCES event);
>>
>> How would I query to find out which user has the most activity?
>> SELECT user_id, COUNT(event_id)
>> FROM log
>> GROUP BY (user_id)
>> HAVNG COUNT(event_id) = ???
>
> SELECT user_id, max(count(event_id))

max(count() is invalid.
aggregate function calls may not be nested

> FROM log
> GROUP BY user_id;
>
> or
>
> SELECT user_id, count(event_id)
> FROM log
> GROUP BY user_id
> ORDER BY count(event_id) DESC
> LIMIT 1;

If more than 1 user has the most activity only one is listed.

Try:

SELECT user_id, COUNT(event_id)
FROM log
GROUP BY (user_id)
HAVING COUNT(event_id) = (SELECT max(l.ct) FROM
(SELECT count(event_id) AS ct FROM log GROUP BY user_id) AS l)
ORDER BY user_id;

Osvaldo

In response to

Browse pgsql-general by date

  From Date Subject
Next Message mljv 2008-04-08 16:12:12 Re: Problem after VACUUM ANALYZE
Previous Message Richard Huxton 2008-04-08 15:59:41 Re: High Availability / Replication with Sequoia