【问题标题】:Mysql Query Studied DaysMysql 查询学习天数
【发布时间】:2012-02-07 06:14:42
【问题描述】:

我有以下值的 Emp 表

Emp_Id  Emp_Name    Subject        Dates
001      Smith      Java         07-02-2012
001      Smith      oracle       08-02-2012
001      smith      C++          10-02-2012
002      john       java         01-01-2012
002      john       SE           10-01-2012
002      john       c            10-01-2012  
001      smith      physics      04-01-2012
001      smith      c#           07-02-2012
001      smith     javascript    07-02-2012 

现在我们可以在这里看到,smith 在 2 月份只学习了 3 天,在 1 月份只学习了 1 天 而约翰在一月份只学习了两天。

我们如何计算任何员工的这个计数? 例如:输出应采用以下方式。

Emp_Id   Emp_Name  Month_Year   No_Of_Days_Studied_In_Month
001      smith      Feb12                 3
001      smith      Jan12                 1
002      john       Jan12                 2

【问题讨论】:

    标签: mysql sql date count


    【解决方案1】:

    您可以GROUP BY YEAR(Dates), MONTH(Dates) 并做一个COUNT

    试一试:

    SELECT emp_id,
           emp_name,
           Date_format(DATE, '%b%y') AS dates,
           COUNT(*) AS No_Of_Days_Studied_In_Month
    FROM   emp
    GROUP  BY Date_format(DATE, '%b%y'), emp_name
    ORDER  BY emp.emp_id
    

    【讨论】:

    • SELECT Emp.Emp_Name,COUNT(Emp.date),DATE_FORMAT(Emp.date,'%b%y')AS Dates FROM Emp GROUP BY DATE_FORMAT(Emp.date,'%b') ,Emp.Emp_Name 如果我们有同一天的记录数,这个查询会给我错误的输出。请查看我更新的 Emp 表值。
    • @PravinGate 您不需要在group by 字段中使用Emp.Emp_Name
    • 是的,我也试过了。请通过这个[链接]sqlfiddle.com/#!2/e4ac0/5 ...如果我做错了,请告诉我
    • 没有。正如我在帖子中提到的那样,我需要输出。由于smith只学习了3天。(虽然他一天学习了许多科目)所以将被视为仅一天。
    • 最后我得到了答案,我们只需要在计数时包含 distinct,所以我们的最终查询将是 SELECT Emp.Emp_Name,COUNT(Distinct Emp.date),DATE_FORMAT(Emp.date, '%b%y')AS Dates FROM Emp GROUP BY DATE_FORMAT(Emp.date,'%b'),Emp.Emp_Name