mysql - 如何组合这些按同一字段分组的查询?

标签 mysql sql

我有以下三个疑问

SELECT COUNT(*) as cached_type_a, DATE(datetime) as datetime
    FROM requests
    WHERE cached = 'a'
    GROUP BY DAY(datetime);

SELECT COUNT(*) as cached_type_b, DATE(datetime) as datetime
    FROM requests
    WHERE cached = 'b'
    GROUP BY DAY(datetime);

SELECT COUNT(*) as cached_type_c, DATE(datetime) as datetime
    FROM requests
    WHERE cached = 'c'
    GROUP BY DAY(datetime);

是否可以将它们组合成一个包含 4 列的查询

cached_type_acached_type_bcached_type_c日期时间

最佳答案

如果cache只有三个可能的值,则可以使用这个,

SELECT DATE(datetime) as datetime,
        SUM(CASE WHEN cached = 'a' THEN 1 ELSE 0 END) cached_a,
        SUM(CASE WHEN cached = 'b' THEN 1 ELSE 0 END) cached_b,
        SUM(CASE WHEN cached = 'c' THEN 1 ELSE 0 END) cached_c
FROM requests
GROUP BY DAY(datetime)

否则,如果您有多个缓存,则可以使用Prepared Statement

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'SUM(CASE WHEN cached =  ''',
      cached,
      ''' then 1 ELSE 0 end) AS ',
      CONCAT('cached_',cached)
    )
  ) INTO @sql
FROM requests;

SET @sql = CONCAT('SELECT DATE(datetime) as datetime, ', @sql, ' 
                   FROM requests 
                   GROUP BY DAY(datetime)');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

关于mysql - 如何组合这些按同一字段分组的查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13080106/

相关文章:

c# - 1064 - 你的 SQL 语法有错误;查看手册

sql - 复杂的 MySQL Order by 不工作

javascript - SQL 与 Sequelize : Compare json columns using where

java - JPA 删除查询不起作用

python - Pyspark:将具有嵌套结构的数组转换为字符串

php - 拉拉维尔 5.2 : Order Models by Pivot table field

mysql - 对 3 个表的请求进行计数

php - 大表中的 SQL 随机行(带 where 子句)

java - 如何通过发送列表从数据库获取数据?

带子查询的 MySql 更新语句