首页 > 解决方案 > SQL COUNT 给出相同的值

问题描述

我有一张看起来像这样的桌子......

出席_ID 人_ID 会议_ID 日期
--------------- --------- ---------- ----------
             23 25 123 2013-03-21
             24 25 456 2013-03-21
             25 25 789 2013-03-21
             26 13 147 2013-03-21
             27 25 123 2013-03-22
             28 82 147 2013-03-22
             29 82 456 2013-03-22
             30 13 147 2013-03-23
             31 25 456 2013-03-23
             32 13 456 2013-03-24
             33 25 456 2013-03-28

目标是打印出员工在一天中错过一次或多次会议的所有时间。我尝试了以下查询,但它给了我所有日期的相同结果 2...

SELECT
    replace(replace(dayname(date),"Saturday", "Weekend"),"Sunday", "Weekend") AS day,
    count(distinct personID) AS absences
from
    AttendanceRecord
GROUP BY
    day;

应该在哪里...

Friday   2
Thursday 3
Weekend  3

我哪里错了?任何帮助都会受到欢迎,因为我的 SQL 技能有点生疏。谢谢!

这是 MySQL,上表是缺勤日期。因此,如果员工错过了 123 会议,他们就会出现在这张桌子上。查询是查看当天错过会议的员工人数。

标签: mysqlsql

解决方案


count(distinct personID) AS absences

应该

count(distinct employeeID) AS absences

因为如果你看到你的示例数据,你有:

Employee ID person ID Meeting ID date
----------- --------- ---------- ----------
         23        25        123 2013-03-21
         24        25        456 2013-03-21
         25        25        789 2013-03-21

这 3 个不同的员工具有相同的人员 ID


要么,要么你已经得到了正确的值;有 10 个不同的 EmployeeID,但少于那个 PersonID


如果您仍想计算重复的 personID,请更改

count(distinct personID) AS absences

count(personID) AS absences

推荐阅读