Подсчитать повторяющиеся значения в отдельных строках и упорядочить их - PullRequest
1 голос
/ 19 апреля 2011

У меня есть tbl_press_release и tbl_press_release_comment, связанные столбцом press_release_id. В tbl_comment есть строка для каждого комментария.

Как мне посчитать, сколько комментариев на press_release_id?

SELECT
    press_release_subject,
    (SELECT COUNT(press_release_id)
     FROM tbl_press_release_comment) as CommentCount
FROM
    tbl_press_release pr
ORDER BY
    CommentCount DESC

Возвращает каждый пресс-релиз, но CommentCount одинаков для всех.

Ответы [ 2 ]

2 голосов
/ 19 апреля 2011

Вы должны использовать предложение GROUP BY, чтобы правильно объединить комментарии с оператором JOIN, чтобы связать две таблицы.

SELECT pr.press_release_subject, COUNT(*) AS CommentCount
FROM tbl_press_release pr
    LEFT JOIN tbl_press_release_comment prc ON prc.press_release_id = pr.id
GROUP BY press_release_subject
ORDER BY CommentCount DESC

Объединение может не работать как есть, потому что я не знаю имен ваших столбцов.

Ваш текущий запрос, в основном, запрашивает каждую тему пресс-релиза и количество каждого отдельного комментария. Без GROUP BY ваша СУБД не знает, как разделить счет.

GROUP BY сообщает вашей СУБД, что агрегатные функции должны возвращать одну запись для каждого отдельного значения в указанных столбцах. Например, в приведенном выше запросе подсчитывается количество комментариев, для которых тема press_release_subject. Если вы используете агрегатные функции (например, COUNT, SUM, AVG и т. Д.), Любой регулярный столбец, который вы хотите вернуть рядом, должен быть указан в предложении GROUP BY.

1 голос
/ 19 апреля 2011
SELECT
    pr.press_release_subject,
    COUNT(*) CommentCount 
FROM tbl_press_release pr
LEFT JOIN tbl_press_release_comment prc
ON pr.press_release_id = prc.press_release_id
GROUP BY pr.press_release_subject
ORDER BY  COUNT(*) DESC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...