2013-09-30 531 views
4

我想选择谁拥有用户的最大数微观柱:SQL SELECT MAX(COUNT)

SELECT "name", count(*) FROM "users" 
    INNER JOIN "microposts" ON "microposts"."user_id" = "users"."id" 
    GROUP BY users.id 

,这将返回

"Delphia Gleichner";15 
"Louvenia Bednar IV";10 
"Example User";53 
"Guadalupe Volkman";20 
"Isabella Harvey";30 
"Madeline Franecki II";40 

但我只想选择"Example User";53,(用户谁有MAX微博计数)

我试图添加HAVING MAX(count*),但这没有奏效。

+0

做一个子查询返回的最大微柱数和加入到其中,这/有,如果你是 – JsonStatham

+0

做一组它*很重要。没有两个DBMS在执行SQL“标准”时是相似的。 –

+0

'HAVING'只是应用于GROUP BY聚合列的where子句:所以你需要一个操作符。 –

回答

7

我想尝试用ORDER BY最大DESC LIMIT 1,其中最大的是COUNT(*)领域。喜欢的东西:

SELECT "name", count(*) maximum FROM "users" 
    INNER JOIN "microposts" ON "microposts"."user_id" = "users"."id" 
GROUP BY users.id 
ORDER BY maximum DESC 
LIMIT 1 

我不”具有的MySQL现在,所以我在纸上做这(和它可能无法正常工作),但它只是一个方向。

+0

这个对我来说很好。 –

+0

但可能还有一种方法使用MAX函数 –

+0

这适用于最大值没有关系的情况。如果有,那么你正在摆脱其他最大值。 – AlwaysNull

0

也许是这样的:

SELECT "name", count(*) 
FROM "users" 
INNER JOIN "microposts" ON "microposts"."user_id" = "users"."id" 
GROUP BY users.id 
HAVING COUNT(microposts) = (SELECT COUNT(microposts) 
         FROM users 
         GROUP BY microposts 
         ORDER BY COUNT(microposts) DESC 
         LIMIT 1) 

没有测试它,但它可能工作

0
SELECT TOP 1 "name", count(*) AS ItemCount FROM "users" 
INNER JOIN "microposts" ON "microposts"."user_id" = "users"."id" 
GROUP BY users.id 
ORDER BY ItemCount DESC 
2
SELECT x.name, MAX(x.count) 
FROM (
SELECT "name", count(*) 
    FROM "users" INNER JOIN "microposts" ON "microposts"."user_id" = "users"."id" 
    GROUP BY users.id 
) x 
0

这很简单,你可以尝试:

SELECT "name", MAX(count_num) FROM 
(SELECT "name", count(*) as count_num 
FROM "users" INNER JOIN "microposts" ON "microposts"."user_id" = "users"."id" 
GROUP BY users.id) x