我有一些类似的选择,我想连接和聚合值。我已经尝试了join,inner join,union,union all,没有预期的结果。可以看到选择非常相似。区别是:SUM(comumn_02)*.05 AS SUM_01
与SUM(comumn_02)*.45 AS SUM_02
不同
以及在第二选择中不同于AND COLUMN_05 = BETA
的AND COLUMN_05 = ALFA
。
整件事就在这里:
SELECT
COLUMN_01,
SUM(COLUMN_02)*.05 AS SUM_01
FROM table
WHERE
COLUMN_03 = 1
AND COLUMN_04 = 2
AND COLUMN_05 = ALFA
GROUP BY COLUMN_01
UNION ALL
SELECT
COLUMN_01,
SUM(COLUMN_02)*.45 AS SUM_02
FROM table
WHERE
COLUMN_03 = 1
AND COLUMN_04 = 2
AND COLUMN_05 = BETA
GROUP BY COLUMN_01;
在此示例中,我们得到以下结果:
|-----------|--------|
| COLUMN_01 | SUM_01 |
|-----------|--------|
| value_01 | 465 |
| value_02 | 186 |
| value_03 | 245 |
| value_01 | 102 |
| value_02 | 108 |
| value_03 | 325 |
|--------------------|
但我想要的是:
|-----------|--------|
| COLUMN_01 | SUM_01 |
|-----------|--------|
| value_01 | 567 | //sum of 465 + 102
| value_02 | 294 | //sum of 186 + 108
| value_03 | 570 | //sum of 245 + 570
|--------------------|
最重要的是,这是可伸缩的吗?也就是说,使用三个或更多的选择“联合”,或者性能会下降很多?
2条答案
按热度按时间83qze16e1#
查询中的问题是,您在对单个表进行聚合时,使用了
UNION ALL
来获取值。为了解决问题,您需要颠倒这两个操作的顺序:UNION
函数SUM
聚合函数进行聚合daolsyd02#
使用条件聚合: