在一个查询中计算带有group by的多个列

use*_*666 28 sql database group-by count

我从多个列计算值,如下所示:

SELECT COUNT(column1),column1 FROM table GROUP BY column1
SELECT COUNT(column2),column2 FROM table GROUP BY column2
SELECT COUNT(column3),column3 FROM table GROUP BY column3
Run Code Online (Sandbox Code Playgroud)

这将返回例如column1数组(attr1 => 2000,attr2 => 3000 ...)(每列具有特定值和少量值).问题是我的应用程序中的"表"可以是带有一些连接和where子句的查询,可能需要0.1秒.通过做所有计数,每次再次计算"表",这是不必要的.有没有办法用一个查询获取我想要的结果,或"缓存"生成表的查询?否则我相信非规范化将是这里唯一的解决方案.我想要与上述查询相同的结果.我正在使用mysql-myisam.

cog*_*oft 41

如果不了解数据的上下文/结构,很难知道如何帮助您,但我相信这可能对您有所帮助:

SELECT 
     SUM(CASE WHEN column1 IS NOT NULL THEN 1 ELSE 0 END) AS column1_count
    ,SUM(CASE WHEN column2 IS NOT NULL THEN 1 ELSE 0 END) AS column2_count
    ,SUM(CASE WHEN column3 IS NOT NULL THEN 1 ELSE 0 END) AS column3_count
FROM table
Run Code Online (Sandbox Code Playgroud)


Joh*_*Woo 8

一种解决方案是将其包装在子查询中

SELECT *
FROM
(
    SELECT COUNT(column1),column1 FROM table GROUP BY column1
    UNION ALL
    SELECT COUNT(column2),column2 FROM table GROUP BY column2
    UNION ALL
    SELECT COUNT(column3),column3 FROM table GROUP BY column3
) s
Run Code Online (Sandbox Code Playgroud)