希望一切顺利,我确实有一个关于mysql的小问题,因为我在查询方面没有太多经验,所以请帮我解决下面的查询,我有一个标记表,其中包含下表所示的列,我想要一个按考试类型分组的输出,如果表中没有分组依据的记录,则返回空值。
subject examtype fullmark secured
SCIENCE CLS 50 20
SCIENCE CLS 50 50
MATHEMATICS MNT 50 10
MATHEMATICS MNT 50 35
MATHEMATICS MNT 100 85
SCIENCE MCK 100 89
MATHEMATICS CMP 100 72
ENGLISH PST 50 33
我当前的查询如下
SELECT round((SUM(`secured`)/SUM(`fullmark`))*100) as percent,subject,examtype FROM tbl_marks WHERE subject = 'MATHEMATICS' GROUP BY examtype
上面的查询返回下面的结果
percent subject examtype
72 MATHEMATICS CMP
65 MATHEMATICS MNT
我希望我的输出如下
percent subject examtype
72 MATHEMATICS CMP
65 MATHEMATICS MNT
0 MATHEMATICS CLS
0 MATHEMATICS MCK
0 MATHEMATICS PST
如何查询,请帮我,先谢谢了。
最佳答案
此查询创建主题和考试类型的每种组合,然后使用右外连接来提取核心查询中未出现的组合。
SELECT
coalesce(round((SUM(secured)/SUM(fullmark))*100), 0) as percent,
all_subjects_examtypes.subject,
all_subjects_examtypes.examtype
from
tbl_marks
right outer join (
select distinct
s.subject,
e.examtype
from
tbl_marks as s
cross join tbl_marks as e
) as all_subjects_examtypes on
tbl_marks.subject = all_subjects_examtypes.subject and
tbl_marks.examtype = all_subjects_examtypes.examtype
where
all_subjects_examtypes.subject = 'MATHEMATICS'
group by
all_subjects_examtypes.examtype
关于MySQL 分组如果表中不存在则强制返回空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52008024/