关于#sql#的问题,请各位专家解答!

根据学生运动的数据,sql统计上个月每天参与运动的人有多少。

    SELECT
    sum( count )
    FROM
    (
    SELECT
    count( DISTINCT studentId ) AS count,
    date_format( from_unixtime( createDate / 1000 ), '%Y-%m-%d' ) AS date
    FROM
    sp_student sss
    where 
     sss.createDate >= #{startTime}
      and sss.createDate <= #{endTime}
    GROUP BY
    date ) t

SELECT date, COUNT(participants) AS num_participants
FROM activity_data
WHERE date >= DATEADD(month, -1, GETDATE()) AND date < GETDATE()
GROUP BY date
ORDER BY date ASC;

SELECT 
    date, 
    COUNT(*) AS num 
FROM exercise_records 
WHERE date BETWEEN '2019-11-01' AND '2019-11-30'
GROUP BY date 
ORDER BY date;
 SELECT DATE(sports_date) AS date, COUNT(DISTINCT id) AS renshu
FROM student_sports
WHERE YEAR(sports_date) = YEAR(CURRENT_DATE - INTERVAL 1 MONTH)
  AND MONTH(sports_date) = MONTH(CURRENT_DATE - INTERVAL 1 MONTH)
GROUP BY DATE(sports_date)
ORDER BY DATE(sports_date);

  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7798015
  • 这篇博客也不错, 你可以看下师兄面试遇到这条 SQL 数据分析题,差点含泪而归!
  • 您还可以看一下 张旭老师的【造物者】手把手带你做快递管理系统课程中的 【造物者】第九节·快递SQL语句编写小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    我可以通过以下SQL语句来统计上个月每天参与运动的学生人数:

    SELECT DATE_FORMAT(date, '%Y-%m-%d') AS day, COUNT(DISTINCT student_id) AS num_of_students
    FROM sport_data
    WHERE date >= DATE_ADD(LAST_DAY(DATE_SUB(NOW(), INTERVAL 2 MONTH)), INTERVAL 1 DAY) 
          AND date <= LAST_DAY(DATE_SUB(NOW(), INTERVAL 1 MONTH))
    GROUP BY day;
    

    其中,sport_data 为数据表名,包含的字段为 datestudent_id,分别表示学生参与运动的日期和学生ID。

    具体解释如下:

    • DATE_FORMAT(date, '%Y-%m-%d') AS day:将日期格式化为年月日的形式,并将其作为结果集中的字段名取名为 day
    • COUNT(DISTINCT student_id) AS num_of_students:统计每天参与运动的学生人数并将其作为结果集中的字段名取名为 num_of_students
    • WHERE 语句中,date >= DATE_ADD(LAST_DAY(DATE_SUB(NOW(), INTERVAL 2 MONTH)), INTERVAL 1 DAY) 表示从上上个月的最后一天开始计算,date <= LAST_DAY(DATE_SUB(NOW(), INTERVAL 1 MONTH)) 表示到上个月的最后一天结束计算。
    • GROUP BY day:按照日期分组统计结果。

    这样就可以得到一个按照日期统计学生参与运动人数的结果,例如:

    +------------+-----------------+
    | day        | num_of_students |
    +------------+-----------------+
    | 2022-01-01 | 20              |
    | 2022-01-02 | 18              |
    | 2022-01-03 | 17              |
    | ...        | ...             |
    | 2022-01-31 | 22              |
    +------------+-----------------+
    

    其中的 day 列为按照年月日格式化后的日期,num_of_students列为当天参与运动的学生人数。注意,这里的结果集中每天都有结果,即使某一天没有学生参与运动,该天的统计结果为 0。

    需要注意的是,上述 SQL 语句中使用了 MySQL 特有的 DATE_FORMAT()DATE_ADD()LAST_DAY() 等函数,因此在不同的数据库中可能需要稍作修改。

    参考资料: