You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL 5.0下无需UNION/GROUP BY转换COUNT透视结果集

解决方案

针对MySQL 5.0版本,你可以通过将原聚合查询的结果与包含状态标签的派生表进行交叉连接,再用CASE语句匹配对应计数的方式,实现将列转换为行的需求,同时保证只扫描一次数据表(避免UNION带来的多次扫描开销)。

具体查询语句如下:

SELECT
    label AS '',
    CASE label
        WHEN 'not_assigned' THEN not_assigned
        WHEN 'assigned' THEN assigned
    END AS Count
FROM (
    SELECT
        COUNT(IF(b IS NULL, id, NULL)) AS not_assigned,
        COUNT(IF(b IS NOT NULL, id, NULL)) AS assigned
    FROM `table`
    WHERE 
        OverType = 'abc'
        AND Type = 'def'
        AND Sub_Type = 'ghi'
        AND `Date` BETWEEN '2022-12-01' AND '2022-12-25'
        AND Client LIKE '%john%'
) AS aggregated_counts
CROSS JOIN (
    SELECT 'not_assigned' AS label UNION ALL SELECT 'assigned' AS label
) AS status_labels;

逻辑说明:

  1. 内层的aggregated_counts子查询执行原有的过滤和聚合操作,只扫描一次数据表得到两个计数结果,效率与原查询一致。
  2. status_labels派生表通过UNION ALL生成两个状态标签行,这部分仅处理固定的两行数据,无性能损耗。
  3. 交叉连接(CROSS JOIN)将聚合结果与标签行组合,再通过CASE语句将每个标签映射到对应的计数,最终输出你需要的行式结构。

该方案既满足了格式转换需求,又保留了原查询的高效性,适合处理数百万行的大数据量场景。

内容的提问来源于stack exchange,提问作者Lilly_Co

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 17:55:19