如何基于示例表编写SQL查询以生成指定输出?
解决方案
首先咱们先拆解清楚需求里的两个核心计算逻辑:
sum(transcount)是 table1中所有count字段的总和(也就是5+10+5=15),每个teamid对应的这个值都是固定不变的sum(amount)是 table2中每个teamid对应的amount字段之和
基于这个逻辑,我给你两种写法,都能得到预期的输出:
方式一:用子查询直接获取总计数
这种写法比较简洁,适合逻辑简单的场景:
SELECT (SELECT SUM(count) FROM table1) AS sum_transcount, SUM(t2.amount) AS sum_amount, t2.teamid FROM table2 t2 GROUP BY t2.teamid;
方式二:用CTE拆分逻辑(可读性更强)
如果后续需要扩展逻辑,用CTE(公共表表达式)会让代码结构更清晰:
WITH total_table1_count AS ( -- 先单独计算table1的总count值 SELECT SUM(count) AS sum_transcount FROM table1 ) SELECT ttc.sum_transcount, SUM(t2.amount) AS sum_amount, t2.teamid FROM table2 t2 -- 总计数只有一行,交叉连接会把这个值自动关联到每个teamid分组 CROSS JOIN total_table1_count ttc GROUP BY t2.teamid, ttc.sum_transcount;
结果验证
执行任意一种写法,都会得到和你预期完全匹配的输出:
| sum_transcount | sum_amount | teamid |
|---|---|---|
| 15 | 13 | 1 |
| 15 | 14 | 2 |
内容的提问来源于stack exchange,提问作者rajesh rajesh
相关产品推荐
相关产品推荐

