gpt4 book ai didi

mysql - 如何在 MySQL 中将多查询解决方案编写为单个查询

转载 作者:太空宇宙 更新时间:2023-11-03 11:26:41 24 4
gpt4 key购买 nike

我的任务是根据 ID 找到所有那些在数据库中具有(至少一个,但是)最低及格分数(分数为 6 级)最少的科目。我设法用三个查询编写了解决方案,但是我的任务是在 MySQL 中将其编写为单个查询。先感谢您。

-- 1. single query "solution"
SELECT subject_id FROM (SELECT subject_id, COUNT(*) AS six_count
FROM exams WHERE grade = 6
GROUP BY subject_id) AS sixes
WHERE subject_id = (SELECT MIN(six_count) FROM sixes);

-- 2. multiple queries solution
CREATE TABLE sixes AS (SELECT subject_id, COUNT(*) AS six_count
FROM exams WHERE grade = 6
GROUP BY subject_id);

SELECT subject_id FROM sixes
WHERE subject_id = (SELECT MIN(six_count) FROM sixes);

DROP TABLE sixes;

编辑:考试表示例:

| subject_id | student_id | exam_year | exam_mark | grade | exam_date  |
| 1 | 20100022| 2011 | 'apr' | 10 | 2011-04-11 |
| 2 | 20100055| 2011 | 'oct' | 6 | 2011-10-04 |
| 3 | 20110030| 2011 | 'jan1' | 7 | 2011-01-26 |
| 5 | 20110055| 2011 | 'jan2' | 6 | 2011-02-13 |
| 5 | 20110001| 2011 | 'jun1' | 8 | 2011-06-23 |

最佳答案

这应该可以解决问题。子查询选择第一个最少的六。主查询选择具有该编号的所有主题。诀窍在于 ORDER BY count(*) LIMIT 1,它使子查询返回计数最低的记录。

SELECT
subject_id,
count(*) as six_count
FROM exams
WHERE grade = 6
GROUP BY subject_id
HAVING count(*) =
( SELECT count(*)
FROM exams
WHERE grade = 6
GROUP BY subject_id
ORDER BY count(*)
LIMIT 1
)

关于mysql - 如何在 MySQL 中将多查询解决方案编写为单个查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53891321/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com