SQL Join and Count не может правильно GROUP BY?

Итак, скажем, я хочу выбрать идентификатор всех моих сообщений в блоге, а затем количество комментариев, связанных с этим сообщением в блоге, как мне использовать GROUP BY или ORDER BY, чтобы возвращаемый список был в порядке количества комментариев на сообщение ?

У меня есть этот запрос, который возвращает данные, но не в том порядке, в котором я хочу? Изменение группы не имеет значения:

SELECT p.ID, count(c.comment_ID) 
FROM wp_posts p, wp_comments c 
WHERE p.ID = c.comment_post_ID 
GROUP BY c.comment_post_ID;

person Adam Taylor    schedule 31.05.2009    source источник


Ответы (3)


Я не знаком с синтаксисом до SQL92, поэтому я выражу его так, как мне знакомо:

SELECT c.comment_post_ID, COUNT(c.comment_ID)
FROM wp_comments c
GROUP BY c.comment_post_ID
ORDER BY COUNT(c.comment_ID) -- ASC or DESC

Какой движок базы данных вы используете? В SQL Server, по крайней мере, нет необходимости в соединении, если только вы не извлекаете больше данных из таблицы сообщений. С присоединением:

SELECT p.ID, COUNT(c.comment_ID)
FROM wp_posts p
JOIN wp_comments c ON c.comment_post_ID = p.ID
GROUP BY p.ID
ORDER BY COUNT(c.comment_ID)
person Michael Petrotta    schedule 31.05.2009
comment
Это был действительно самый простой пример, с которым я мог поиграть, чтобы разобраться с соединением + подсчетом (это mysql 5.x) - person Adam Taylor; 01.06.2009
comment
Понял. Дополнил свой ответ присоединением. - person Michael Petrotta; 01.06.2009

вероятно, в таблице комментариев нет связанных данных, поэтому попробуйте сгруппировать их по идентификатору сообщения и, пожалуйста, изучите операторы JOIN, это очень полезно и дает лучшие результаты.

SELECT p.ID, count(c.comment_ID) 
FROM wp_posts p
LEFT JOIN wp_comments c ON (p.ID = c.comment_post_ID)
GROUP BY p.ID

Я также столкнулся с такой ситуацией в своих путешествиях по SQL-запросам :)

person macki    schedule 20.11.2012

person    schedule
comment
выберите p.ID, count(c.comment_ID) КАК учетная запись из wp_posts p, wp_comments c, где p.ID = c.comment_post_ID ГРУППА ПО c.comment_ID ORDER BY учетная запись DESC; ^^ просто возвращает все счетчики как 1 (они определенно не все 1).. - person Adam Taylor; 01.06.2009