如何使用SQL汇总类似选择的总和值?
我有一些类似的选择,我想加入和汇总值。 我已经尝试使用加入,内部加入,工会,工会,没有预期的结果。 看到选择非常相似。差异是: sum(comumn_02)*。05as sum_01
与sum(comumn_02)*
不同>和column_05 = beta 在第二个选择中。
整个过程都在这里:
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
|--------------------|
最重要的是,这是可扩展的吗? IE将其与三个或更多选择的“工会”一起使用,否则性能会降低很多?
I have some similar selects that I'd like to join and aggregate values.
I've already tried with join, inner join, union, union all, without the expected result.
See that the selects are very similar. The differences are:SUM(comumn_02)*.05 AS SUM_01
different from SUM(comumn_02)*.45 AS SUM_02
and AND COLUMN_05 = ALFA
different from AND COLUMN_05 = BETA
in the second select.
The whole thing is here:
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;
In this example we have the following result:
|-----------|--------|
| COLUMN_01 | SUM_01 |
|-----------|--------|
| value_01 | 465 |
| value_02 | 186 |
| value_03 | 245 |
| value_01 | 102 |
| value_02 | 108 |
| value_03 | 325 |
|--------------------|
But what I'd like to have would be:
|-----------|--------|
| 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
|--------------------|
And most important, would this be scalable? i.e. to use it with three or more select "unions" or the performance would decrease a lot?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
查询中的问题是您在单个表上汇总,然后您使用
Union all
来获取您的值。为了解决问题,您需要倒入这两个操作的顺序:union
函数sum
contregation函数The problem in your query is that you're aggregating on the single tables, then you are using
UNION ALL
to get your values. In order to solve your problem, you need to invert the order of these two operations:UNION
functionSUM
aggregation function使用条件聚合:
Use conditional aggregation: