mysql - 使用SELECT结果做表

标签 mysql sql

我有一个这样的表:

enter image description here

我想执行以下 SELECT 语句:

SELECT count(*) from table WHERE A=1 and date between 2013-02 and 2013-03
SELECT count(*) from table WHERE A=1 and date between 2013-03 and 2013-04
SELECT count(*) from table WHERE A=1 and date between 2013-04 and 2013-05
....
SELECT count(*) from table WHERE B=1 and date between 2013-02 and 2013-03
SELECT count(*) from table WHERE B=1 and date between 2013-03 and 2013-04
SELECT count(*) from table WHERE B=1 and date between 2013-04 and 2013-05
...etc

最快的查询是什么?我可以将结果排列在表格中吗:

date    |A=1  |B=1  |C=1  |...
2013-Feb|count|count|count|
2013-Mar|count|...

最佳答案

SELECT DATE_FORMAT(date, '%Y-%m'),
       SUM(CASE WHEN A=1 THEN 1 END) AS Acount,
       SUM(CASE WHEN B=1 THEN 1 END) AS Bcount,
       SUM(CASE WHEN C=1 THEN 1 END) AS Ccount,
       SUM(CASE WHEN D=1 THEN 1 END) AS Dcount,
       SUM(CASE WHEN E=1 THEN 1 END) AS Ecount
FROM table
GROUP BY DATE_FORMAT(date, '%Y-%m')

如果 AE 列中的唯一值是 0 或 1(或者可能是 NULL),那么我们可以简化为:

SELECT DATE_FORMAT(date, '%Y-%m'),
       SUM(A) AS Acount,
       SUM(B) AS Bcount,
       SUM(C) AS Ccount,
       SUM(D) AS Dcount,
       SUM(E) AS Ecount
FROM table
GROUP BY DATE_FORMAT(date, '%Y-%m')

关于mysql - 使用SELECT结果做表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39742330/

相关文章:

SQL Azure 无法识别我的聚集索引

MySQL INSERT INTO 查询在 C 中太慢

MySQL 位类型映射到哪种 Go 类型?

对象之间的 PHP MySQL 连接共享

PHP - 无法使用 PDO 插入表

c# - Linq 类似或其他结构

SQLITE - 正确地将行转换为列

mysql - 如何在 MySQL 上构建检索 GROUP BY 统计信息的 SQL 查询

mysql - RMySQL:as.character.default() 错误:

mysql - InnoDB 中的自动增量值?