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

如何合并SQL两个分组计数查询结果并计算占比

报错原因

cub-select returns 2 columns- expected one报错的核心原因是做除法运算时引用的子查询同时返回了name和计数字段两个列,SQL执行单值运算时仅支持单个返回值。另外你最初写的两个基础查询本身存在语法问题:

  • 比较符书写错误:=>为非法写法,大于等于的正确写法是>=,闭区间判断需写为Start_datetime <= time_data and time_data <= End_datetime
  • 表名书写错误:table 1/table 2中多了冗余空格,正确表名为table1、table2
正确实现方式

通过name字段关联两个分组统计的结果集,再计算占比即可,使用全外连接可以覆盖name仅在单个表中存在的场景,避免数据遗漏:

SELECT
    COALESCE(t1.name, t2.name) AS name,
    -- 分母为0时返回NULL规避除零报错,可根据业务需求调整为返回0
    t1.interval_cnt / t2.gte_cnt AS occurrence_ratio
FROM (
    -- Query1:统计落在指定时间区间内的记录数
    SELECT name, COUNT(*) AS interval_cnt
    FROM table1
    WHERE time_data >= Start_datetime
      AND time_data <= End_datetime
    GROUP BY name
) t1
FULL OUTER JOIN (
    -- Query2:统计大于等于起始时间的总记录数
    SELECT name, COUNT(*) AS gte_cnt
    FROM table2
    WHERE time_data >= Start_datetime
    GROUP BY name
) t2
ON t1.name = t2.name;
适配说明
  • 若你使用的数据库不支持全外连接(如部分低版本MySQL),可以先提取两个表所有去重的name值作为驱动表,再左关联两个统计子查询,逻辑完全一致
  • 若需要返回百分比格式的结果,可将占比计算逻辑替换为CONCAT(ROUND(t1.interval_cnt / t2.gte_cnt * 100, 2), '%')
  • 若业务上能确认两个查询返回的name集合完全重合,可将全外连接替换为内连接,查询性能更高

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 01:15:35