【问题标题】:Count Totals by Day of Week and Week Total for each Subject每个主题按星期几和周总计计算总计
【发布时间】:2015-04-30 22:10:43
【问题描述】:

在我的表格中,我记录了各种信息,但此问题的关键字段是 subject_id 和 course_time对于每个主题(每周总计),因此来自此示例数据:

id    subject_id   lesson_time
1        4         2015-04-28
2        4         2015-04-28
3        3         2015-04-28
4        1         2015-04-28
5        4         2015-04-27

我想计算周一到周五和每周的每个主题的总数,因此上述数据示例的输出将是:

subject_id    monday_total   tuesday_total   wednesday_total  ... week_total
  1               0                1               0                  1
  3               0                1               0                  1
  4               1                2               0                  3

我可以很容易地按主题计算总数,因为它只是分组后的计数(*),我正在努力的是每一天的计数,我当前(非工作)查询是

SELECT
    subject_id,
    COUNT( DAYOFWEEK(lesson_time)=2) AS monday_total,
    COUNT( DAYOFWEEK(lesson_time)=3) AS tuesday_total,
    COUNT( DAYOFWEEK(lesson_time)=4) AS wednesday_total,
    COUNT( DAYOFWEEK(lesson_time)=5) AS thursday_total,
    COUNT( DAYOFWEEK(lesson_time)=6) AS friday_total,
    COUNT(*) AS week_total
FROM
    tbl_lessons
GROUP BY
    subject_id

任何帮助将不胜感激。

【问题讨论】:

  • COUNT( DAYOFWEEK(lesson_time)=2)更改为SUM( DAYOFWEEK(lesson_time)=2)
  • 谢谢!解决了!
  • 您想在GROUP BY 总数中包含周六和周日吗?
  • @Aelfwine 很好。请在下面接受我的回答
  • @Peter - 你的回答是正确的,但它不会让我接受,说我必须等几分钟,但我会尽快做。

标签: mysql


【解决方案1】:

试试这个

SELECT
    subject_id,
    SUM(DAYOFWEEK(lesson_time)=2) AS monday_total,
    SUM(DAYOFWEEK(lesson_time)=3) AS tuesday_total,
    SUM(DAYOFWEEK(lesson_time)=4) AS wednesday_total,
    SUM(DAYOFWEEK(lesson_time)=5) AS thursday_total,
    SUM(DAYOFWEEK(lesson_time)=6) AS friday_total,
    COUNT(*) AS week_total
FROM
    tbl_lessons
GROUP BY
    subject_id

在 mysql 中,COUNT(n) 计算每一行(n 不是 NULL 的每一行都加 1)。 SUM(n) 对所有 n 值求和(每行 + n)。

当布尔表达式返回 1 或 0 SUM(DAYOFWEEK(lesson_time)=2) 将返回 DAYOFWEEK(lesson_time)=2 所在的行数(这就像对布尔值求和 1+0+0+1+1+1+0+0+1+...)

【讨论】:

  • @fancyPants 在我看来这真的是微不足道的问题,idk 是真正必要的解释我只能添加到 mysql 手册的链接。但是您可能是对的,请随时添加另一个答案并提供完整的解释。
【解决方案2】:
SELECT date(lesson_time) AS lesson_time, count( * ) AS count FROM tbl_lessons GROUP BY date(lesson_time)

【讨论】:

    猜你喜欢
    • 2018-08-15
    • 1970-01-01
    • 1970-01-01
    • 2016-09-04
    • 1970-01-01
    • 2014-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多