2013-09-30 2 views
4

Я пытаюсь выбрать пользователя, который имеет отсчитывать microposts MAX: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 microposts count)

Я попытался добавить HAVING MAX(count*), но это не сработало.

+0

ли подвыбор, которая возвращает максимальное micropost подсчитывать и добавить в Где/имея, если вы делаете группу по – JsonStatham

+0

Это *это важно. Никакие две СУБД не похожи на реализацию стандарта SQL. –

+0

'HAVING' - это просто предложение where, применяемое к агрегатному столбцу' GROUP BY': для этого вам нужен оператор. –

ответ

7

Я бы попробовать с ORDER BY DESC LIMIT не более 1, где максимум отсчет (*) поле. Что-то вроде:

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 

I «не имеют 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