【问题标题】:Trouble counting rows无法计算行数
【发布时间】:2012-02-13 11:57:28
【问题描述】:

我正在使用日历表作为连接表,并尝试创建一个图表来显示员工从 CMS 收到的评论数量。查询当前如下所示

SELECT MONTHNAME(Calendar.datefield) AS Month, COUNT(Review.reviewee_id) AS Count
FROM calendar Calendar 
LEFT JOIN reviews Review ON MONTH(Calendar.datefield) = MONTH(Review.created) AND Review.reviewee_id = 24 AND YEAR(Calendar.datefield) = '2011'
GROUP BY Month
ORDER BY MONTH(Calendar.datefield)

返回

'January', '0'
'February', '0'
'March', '0'
'April', '0'
'May', '0'
'June', '0'
'July', '0'
'August', '0'
'September', '0'
'October', '434'
'November', '120'
'December', '0'

但是计数是错误的。我试图了解计数的工作方式。正确到每个月为 0,但在 10 月份,该员工只有 4 条评论。

【问题讨论】:

    标签: sql aggregate-functions outer-join


    【解决方案1】:

    我相信你应该更换 MONTH(Calendar.datefield) = MONTH(Review.created)Calendar.datefield = Review.created

    如果不进行替换,您将计算在特定月份(例如 10 月)发生的所有条评论,不仅包括 2011 年特定月份的评论,还包括 2010 年 10 月的评论。

    【讨论】:

    • 就是这样。我还检查了乔恩的建议。这个月的每一天都在循环。所以 10 月实际上有 14 条评论(我错了),然后将这个月的 31 天乘以 434。感谢你们俩的快速帮助。
    【解决方案2】:

    要了解发生了什么,您可以尝试一些更简单的查询。首先尝试取出 GROUP BY 并获取它正在计数的所有内容的列表。

    SELECT MONTHNAME(Calendar.datefield) AS Month, Review.reviewee_id, *
    FROM calendar Calendar 
    LEFT JOIN reviews Review ON MONTH(Calendar.datefield) = MONTH(Review.created) 
    AND Review.reviewee_id = 24 AND YEAR(Calendar.datefield) = '2011'
    AND MONTHNAME(Calendar.datefield) = 'October'
    

    最有可能的是多行正在链接,但 434 在 4 中并不均匀,这很奇怪。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-29
      • 1970-01-01
      • 1970-01-01
      • 2019-09-03
      • 2016-12-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多