mysql - 多个列中具有不同值的多个计数

标签 mysql sql

假设我有一个这样的表:

+------+--------+------+
|Color |Shape   |Type  |
+------+--------+------+
|red   |square  |puzzle|
|red   |circle  |puzzle|
|green |star    |puzzle|
|green |circle  |puzzle|
|blue  |square  |puzzle|
|blue  |star    |puzzle|
|blue  |triangle|puzzle|
+------+--------+------+

我想得到如下所示的结果:

+--------+---------+-----------+
|redCount|blueCount|squareCount|
+--------+---------+-----------+
|2       |3        |2          |
+--------+---------+-----------+

我如何更改以下查询才能真正起作用,或者根本不能以这种方式完成?

SELECT COUNT(Color="blue") AS blueCount,
 COUNT(Color="red") AS redCount,
 COUNT(Shape="square") AS squareCount
 FROM toys
 WHERE Type = "puzzle";

最佳答案

您也可以尝试使用 IF

SELECT COUNT(IF(`Color` = 'blue', `Color`, null)) AS `blueCount`
     , COUNT(IF(`Color` = 'red', `Color`, null)) AS `redCount`
     , COUNT(IF(`Shape` = 'square', `Shape`, null)) AS `squareCount`
FROM `toys`
WHERE `Type` = 'puzzle';

案例:

SELECT COUNT(CASE WHEN `Color` = 'blue' THEN `Color` END) AS `blueCount`
     , COUNT(CASE WHEN `Color` = 'red' THEN `Color` END) AS `redCount`
     , COUNT(CASE WHEN `Shape` = 'square' THEN `Shape` END) AS `squareCount`
FROM `toys`
WHERE `Type` = 'puzzle';

关于mysql - 多个列中具有不同值的多个计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23918676/

相关文章:

mysql - SQL 外连接

sql - Electron 和Sqlite : SQLITE_NOTADB: file is not a database

php - 如何编写具有多个数据顺序的 MySql 查询?

sql - 'like' 和困惑的 MySQL 查询问题

mysql - Nodejs 从表中删除但选择不起作用

mysql - Hibernate 将 POST 请求中的 JSON 值错误地映射为 null

MySQL 对每组的最后 X 行求和

mysql - 使用 InfiniDB 创建表的问题

mysql - 查询中嵌套 'where in' 语句

mysql - 1052 : Column 'id' in field list is ambiguous