在由数学和科学论文组成的测试中,以下是选择规则:
未尝试的论文被记录为时间= 0,不应计入选择。
--------------------------
Student | Subject | Time
--------------------------
1 | S | 24
2 | S | 60
1 | M | 65
2 | M | 0
3 | S | 0
3 | M | 0
--------------------------
此处所选的值应为2 - S - 60
,因为他没有花费资格尝试的最短时间(科学),因为他没有尝试数学。
如何在单个 MySQL查询中执行此操作?
我不能使用以下内容,因为它们在一个或另一个案例中失败:
SELECT
student_id, subject_id, time_taken
FROM test_stats
WHERE
time_taken > 0
ORDER BY
time_taken ASC,
subject_id ASC
LIMIT 0, 1;
OR
SELECT
student_id, subject_id, time_taken
FROM test_stats
WHERE
time_taken > 0
ORDER BY
subject_id ASC,
time_taken ASC,
LIMIT 0, 1;
由于我们无法在群组中设置GROUP BY
,因此ORDER BY
无效。
如果我需要进一步详细说明,请告诉我。
答案 0 :(得分:1)
尝试此查询
SELECT student_id,
SUBSTRING_INDEX(GROUP_CONCAT(subject_id ORDER BY subject_id),',',1) as subject,
SUBSTRING_INDEX(GROUP_CONCAT(time_taken ORDER BY subject_id),',',1) as time_take
FROM test_stats
WHERE time_taken != 0
GROUP BY student_id
ORDER BY time_take ASC
LIMIT 1
你已经提到主题偏好应该是数学(M),基于那个
1)GROUP_CONCAT(subject_id ORDER BY subject_id)
将是以下任何一个人。
(注意:我在WHERE子句中添加了条件,如time_taken!= 0,所以你不会在这里得到time_taken 0的主题)
a)M,S(当学生参加这两个科目时)
b)M(当学生单独参加数学课程时)
c)S(当学生单独上科学时)
2)和SUBSTRING_INDEX(GROUP_CONCAT(subject_id ORDER BY subject_id),',',1)会给你
a)M(当学生参加这两个科目时)
b)M(当学生单独参加数学课程时)
c)S(当学生单独上科学时)
同样的条件也适合time_taken。