如何使用“Case When”和“Group By”创建 Mysql 查询

伊尔哈斯

给定我的数据库中的 3 个表(prodi,mahasiswastatus),我试图输出分组和计数的结果。

这张图片中的数据库

数据库创建 SQL

询问

SELECT
prodi.namaprodi,
(case when count(`status`.idsm)='1' then 1 else 0 end) as '1',
(case when count(`status`.idsm)='2' then 1 else 0 end) as '2',
(case when count(`status`.idsm)='3' then 1 else 0 end) as '3',
(case when count(`status`.idsm)='4' then 1 else 0 end) as '4',
(case when count(`status`.idsm)='5' then 1 else 0 end) as '5',
(case when count(`status`.idsm)='6' then 1 else 0 end) as '6',
(case when count(`status`.idsm)='7' then 1 else 0 end) as '7',
(case when count(`status`.idsm)='8' then 1 else 0 end) as '8'
FROM
`status`
INNER JOIN mahasiswa ON mahasiswa.idm = `status`.idm
INNER JOIN prodi ON prodi.idp = mahasiswa.idp
GROUP BY
prodi.idp, `status`.idm

实际结果

Hukum   0   1   0   0   0   0   0   0
Hukum   0   0   0   0   0   1   0   0
Hukum   0   1   0   0   0   0   0   0
Ekonomi 0   0   0   1   0   0   0   0
Ekonomi 0   0   0   1   0   0   0   0

想要的结果

Hukum   0   2   0   0   0   1   0   0
Ekonomi 0   0   0   2   0   0   0   0

任何想法如何让这个查询工作?

巴拉克里希南

查询需要写成

SELECT
    prodi.namaprodi, 
    SUM(Sem1) as Sem1,
    SUM(Sem2) as Sem2,
    SUM(Sem3) as Sem3,
    SUM(Sem4) as Sem4,
    SUM(Sem5) as Sem5,
    SUM(Sem6) as Sem6,
    SUM(Sem7) as Sem7,
    SUM(Sem8) as Sem8
FROM mahasiswa
INNER JOIN 
(SELECT status.idm, 
    (case when count(`status`.idsm)='1' then 1 else 0 end) as 'Sem1', 
    (case when count(`status`.idsm)='2' then 1 else 0 end) as 'Sem2', 
    (case when count(`status`.idsm)='3' then 1 else 0 end) as 'Sem3', 
    (case when count(`status`.idsm)='4' then 1 else 0 end) as 'Sem4', 
    (case when count(`status`.idsm)='5' then 1 else 0 end) as 'Sem5', 
    (case when count(`status`.idsm)='6' then 1 else 0 end) as 'Sem6', 
    (case when count(`status`.idsm)='7' then 1 else 0 end) as 'Sem7', 
    (case when count(`status`.idsm)='8' then 1 else 0 end) as 'Sem8' 
    FROM `status` 
    INNER JOIN mahasiswa ON mahasiswa.idm = `status`.idm 
    GROUP BY `status`.idm 
)SemCount
    ON mahasiswa.idm = SemCount.idm
INNER JOIN prodi ON prodi.idp = mahasiswa.idp
GROUP BY prodi.idp

我检查了查询,它给出了所需的结果。

当您需要按多个列进行分组时,在子查询中创建一个组,在主查询中创建另一个组

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用“CASE WHEN”和“GROUP BY”组合创建查询

来自分类Dev

如何使用MySQL子查询和GROUP BY

来自分类Dev

如何使用case-when-then编写mysql查询?

来自分类Dev

如何动态创建mySQL查询?

来自分类Dev

MySQL如何使用子查询创建视图?

来自分类Dev

如何使用JPA使用AVG和GROUP创建条件查询

来自分类Dev

在PHP,MySQL中使用for循环和插入查询创建用户

来自分类Dev

使用GROUP BY的MySQL查询和使用ORDER BY的子查询

来自分类Dev

MySQL查询创建摘要行以使用HAVING和LIMIT子句进行查询

来自分类Dev

如何创建temp col?mysql查询

来自分类Dev

如何创建IF语句在MySQL查询WHERE语句

来自分类Dev

我如何创建此mysql选择查询?

来自分类Dev

如何创建正确的 MySQL 查询 INSERT

来自分类Dev

使用node-mysql创建同步查询

来自分类Dev

使用mysql创建交叉表查询

来自分类Dev

使用相对日期创建 MYSQL 查询

来自分类Dev

使用 COUNT 、 GROUP BY 、 INTERVAL 和 LIMIT 创建 Django pgSQL 查询

来自分类Dev

从访问查询创建 MySQL 查询

来自分类Dev

如何在查询中使用别名以在mysql中创建条件

来自分类Dev

MySQL如何创建视图以使用查询参数

来自分类Dev

如何使用5个不同的表mysql创建内部查询

来自分类Dev

如何使用IN创建查询?

来自分类Dev

MySQL嵌套查询和GROUP BY

来自分类Dev

MySQL查询GROUP BY和ORDER by

来自分类Dev

在mysql查询中正确使用group by和order by

来自分类Dev

结合使用MYSQL GROUP_CONCAT和子查询

来自分类Dev

使用UNION / UNION ALL和Group By的MySQL查询错误

来自分类Dev

使用GROUP BY和ORDER BY时间戳DESC的MySQL查询

来自分类Dev

使用GROUP BY和ORDER BY进行mysql查询的奇怪结果

Related 相关文章

热门标签

归档