MySQL 分组如果表中不存在则强制返回空值

标签 mysql

希望一切顺利,我确实有一个关于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/

相关文章:

mysql - 纠正mysql语法错误

asp.net - 为什么 bool 数据类型在 MySQL 中不起作用?

mysql - 如何提高风数据SQL查询性能

php - mySQL - 在单个选择中使用外部参照表从相关表中获取数据

mysql - SQL INNER JOIN 多表错误

javascript - Ajax、PHP 和 MySQL 以及在页面中附加数据

mysql - select 中的 select 语句

mysql - 如何获得具有所有或任何提供标签的帖子?

mysql - 如何将值插入到 Node Express 项目中的 Mysql.js 表中

java - 如何从 Android 应用程序通过 JDBC 连接到远程 MySQL 服务器