我有以下三个疑问
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_a
、cached_type_b
、cached_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/