mysql - 双组依据

标签 mysql sql

我的表格有两列:姓名和年级。它看起来像这样:

NAME  | GRADE
Adam  | 1
Adam  | 2
Adam  | 2
Adam  | 3
Frank | 2
Frank | 1

现在我想创建如下所示的 View :

NAME  | GRADE 1 | GRADE 2 | GRADE 3
Adam  |    1    |    2    |     1
Frank |    1    |    1    |     0

我是这样写的:

SELECT     Name, 
    (SELECT COUNT(Grade) 
    FROM dbo.Rodzaj 
    WHERE Grade = '1') as Grade_1,  
    (SELECT COUNT(Grade) 
    FROM dbo.Rodzaj 
    WHERE Grade = '2) as Grade_2,  
    (SELECT COUNT(Grade) 
    FROM dbo.Rodzaj 
    WHERE Grade = '3') as Grade_3
FROM         dbo.Rodzaj
GROUP BY Name

但是没用... 我将不胜感激

最佳答案

您正在寻找的东西称为“数据透视表”,它是通过一系列 CASE 语句完成的,这些语句对每个条件应用 1 或 0,然后是 SUM() 增加 1 和 0 以检索计数。

SELECT
  NAME,
  SUM(CASE WHEN GRADE = 1 THEN 1 ELSE 0 END) AS GRADE1,
  SUM(CASE WHEN GRADE = 2 THEN 1 ELSE 0 END) AS GRADE2,
  SUM(CASE WHEN GRADE = 3 THEN 1 ELSE 0 END) AS GRADE3
FROM Rodzaj
GROUP BY NAME

请注意,如果您需要它具有动态数量的列,则必须使用脚本语言和循环来构建查询。 (或存储过程中的循环)

关于mysql - 双组依据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11189313/

相关文章:

sql - 如何计算MySQL中日期时间之间的间隔?

javascript - 如何从合并结果集中提取数组?

mysql - 如何在 PhpMyAdmin 中列出/查看存储过程

mysql - 我的 MySQL 脚本语法错误

mysql:计算子表中的记录,按日期分组

php - SQL查询计数问题

php - 插入由 fk - php 链接的多行

python - 使用Python将CSV导入MySQL表

php - 在 PHP 中 SELECT 语句返回 true,用它的主键更新另一个表

java - SQL group by 替换不同的值