计算单独行中的重复值并对其进行排序

时间:2011-04-19 13:52:48

标签: sql sql-server-2005

我有一个由press_release_id列相关的tbl_press_release和tbl_press_release_comment。每个评论都有一行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 个答案:

答案 0 :(得分:2)

您需要使用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,您的DBMS就不知道如何分开计数。

GROUP BY告诉您的DBMS,聚合函数必须在指定的列中为每个不同的值返回一条记录。例如,上述查询告诉您计算主题为press_release_subject的评论数。如果您使用汇总函数(例如COUNTSUMAVG等),则必须在{{1}中指定要并排返回的任何常规列条款。

答案 1 :(得分:1)

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