我有一些类似的 Select ,我想加入并聚合值.

在第二次 Select 中,AND COLUMN_05 = ALFAAND 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
|--------------------|

最重要的是,这是可扩展的吗?i、 e.将其与三个或三个以上的选定"联合体"一起使用,否则性能会下降很多?

推荐答案

使用条件聚合:

SELECT COLUMN_01,
       SUM(COLUMN_02 * CASE COLUMN_05 WHEN 'ALFA' THEN 0.05 WHEN 'BETA' THEN 0.45 END) AS SUM_01
FROM tablename
WHERE COLUMN_03 = 1 AND COLUMN_04 = 2 AND (COLUMN_05 IN ('ALFA', 'BETA'))
GROUP BY COLUMN_01;

Mysql相关问答推荐

MySQL生成的整型计算可以为空吗?

Mysql - Select 匹配某些条件的两条记录之间经过的最大天数

将 Cloud Function (nodejs) 连接到 CloudSQL mySQL 数据库

在 MYSQL 8 中的 JSON 字段上的 SELECT 中返回所有键及其数组项

如何解码存储在带有type*:前缀的base64中的数据?

for each 查询设置 MySQL @@session.time_zone 而不是 CONVERT_TZ 的缺点?

如何在Pandas 中使用 to_sql

在 MySQL 中使用非空条件 LAG() 函数

Mysql,显示谁已经和没有 Select 退出巴士服务

如何让连续 3 周或以上的用户有订单?

相关查询 - 在派生表中,我可以有多个嵌套级别吗?

SQL 根据多行值获取记录

包含 group_contact 的视图的问题

在 MySQL 中使用三个表进行计算

如何在 Windows 上访问 xampp 的命令行

如何在 Laravel 5.1 中获取数据库中的表列表

如何用一系列日期填充表格?

如何将时刻 JS 时间插入 MySQL

MySQL - 我如何输入 NULL?

如何通过一个语句描述数据库中的所有表?