Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何在包含左联接的其他选择查询中包含选择查询 学生表格 期间表格,此表格用于确定学生可以聚集的最大与会者人数 出勤表,学生出勤的虚拟详细信息_Mysql_Select - Fatal编程技术网

Mysql 如何在包含左联接的其他选择查询中包含选择查询 学生表格 期间表格,此表格用于确定学生可以聚集的最大与会者人数 出勤表,学生出勤的虚拟详细信息

Mysql 如何在包含左联接的其他选择查询中包含选择查询 学生表格 期间表格,此表格用于确定学生可以聚集的最大与会者人数 出勤表,学生出勤的虚拟详细信息,mysql,select,Mysql,Select,我找到了一个查询,可以根据性别计算学生的平均分数, 妇女: 男子: SELECT (COUNT(a.tapping_time)/2)/p.max_session_male*100 AS 'men_score ' FROM period p LEFT JOIN attendance a ON p.period_id = a.period_id LEFT JOIN student s ON a.student_id = a.student_id WHERE s.gender = 'male' GR

我找到了一个查询,可以根据性别计算学生的平均分数, 妇女:

男子:

SELECT (COUNT(a.tapping_time)/2)/p.max_session_male*100 AS 'men_score ' 
FROM period p
LEFT JOIN attendance a ON p.period_id = a.period_id
LEFT JOIN student s ON a.student_id = a.student_id
WHERE s.gender = 'male'
GROUP BY p.period_id
但是如何在一张桌子上得分呢

所需结果

  -----------------------------------------------------------------------------
| period_id | from       | to         | total_att | women_score | men_score |
|-----------|------------|------------|-----------|-------------|-----------|
|     1     | 2018-03-02 | 2018-03-04 |    31     |     78      |     30    |
|     2     | 2018-03-05 | 2018-03-08 |    41     |     95      |     7.5   |
-----------------------------------------------------------------------------

使用条件聚合:

SELECT
    period_id,
    MIN(date) AS `from`,
    MAX(date) AS `to`,
    COUNT(*) AS total_att,
    100 * COUNT(CASE WHEN s.gender = 'male'
               THEN a.tapping_time END) / p.max_session_male AS male_score,
    100 * COUNT(CASE WHEN s.gender = 'female'
               THEN a.tapping_time END) / p.max_session_female AS female_score
FROM period p
LEFT JOIN attendance a
    ON p.period_id = a.period_id
LEFT JOIN student s
    ON a.student_id = a.student_id
GROUP BY p.period_id;

请注意,在按
period\u id
分组时,选择
max\u session\u male
max\u session\u female
列可能是可疑的。但是如果
period\u id
period
表的主键,那么就可以了。

很抱歉@Tim结果与我需要的不匹配,不能计算分数number@codefighter我更新了我的答案,使之完全符合您的预期输出。我的答案的关键仍然是使用条件聚合。学生可以聚集的最大出席人数-嗯?
SELECT (COUNT(a.tapping_time)/2)/p.max_session_female*100 AS 'women_score' 
FROM period p
LEFT JOIN attendance a ON p.period_id = a.period_id
LEFT JOIN student s ON a.student_id = a.student_id
WHERE s.gender = 'female'
GROUP BY p.period_id
SELECT (COUNT(a.tapping_time)/2)/p.max_session_male*100 AS 'men_score ' 
FROM period p
LEFT JOIN attendance a ON p.period_id = a.period_id
LEFT JOIN student s ON a.student_id = a.student_id
WHERE s.gender = 'male'
GROUP BY p.period_id
  -----------------------------------------------------------------------------
| period_id | from       | to         | total_att | women_score | men_score |
|-----------|------------|------------|-----------|-------------|-----------|
|     1     | 2018-03-02 | 2018-03-04 |    31     |     78      |     30    |
|     2     | 2018-03-05 | 2018-03-08 |    41     |     95      |     7.5   |
-----------------------------------------------------------------------------
SELECT
    period_id,
    MIN(date) AS `from`,
    MAX(date) AS `to`,
    COUNT(*) AS total_att,
    100 * COUNT(CASE WHEN s.gender = 'male'
               THEN a.tapping_time END) / p.max_session_male AS male_score,
    100 * COUNT(CASE WHEN s.gender = 'female'
               THEN a.tapping_time END) / p.max_session_female AS female_score
FROM period p
LEFT JOIN attendance a
    ON p.period_id = a.period_id
LEFT JOIN student s
    ON a.student_id = a.student_id
GROUP BY p.period_id;