繁体   English   中英

Oracle SQL 总和

[英]Oracle SQL sum of sums

询问

SELECT
SUM(CASE A WHEN A = B THEN 1 ELSE 0 END) AS CASE A,
SUM(CASE B WHEN B = C THEN 1 ELSE 0 END) AS CASE B,
SUM(CASE C WHEN C = D THEN 1 ELSE 0 END) AS CASE C
FROM TABLE SAMPLE_1 S_1 LEFT JOIN SAMPLE_2 S_2 ON (S_1.ID = S_2.ID)
WHERE NUMBER = '12345'

如何在最后制作一列,返回所有条件总和的总和。 任何和所有的帮助表示赞赏。

首先,您的代码不是有效的 SQL。 也许你的意思是:

SELECT
    SUM(CASE WHEN A = B THEN 1 ELSE 0 END) AS CASE_A,
    SUM(CASE WHEN B = C THEN 1 ELSE 0 END) AS CASE_B,
    SUM(CASE WHEN C = D THEN 1 ELSE 0 END) AS CASE_C
FROM TABLE SAMPLE_1 S_1 
LEFT JOIN SAMPLE_2 S_2 ON S_1.ID = S_2.ID
WHERE NUMBER = '12345'

这基本上假设ABC是来自查询中涉及的两个表之一的列。 我强烈建议使用表别名来限定它们以使其明确。 也不是NUMBER是 Oracle 中的保留字 - 希望这不是您的实际列名,否则需要用双引号括起来。

现在,如果您想要将三个条件相加的另一列,则可能是:

SELECT
    SUM(CASE WHEN A = B THEN 1 ELSE 0 END) AS CASE_A,
    SUM(CASE WHEN B = C THEN 1 ELSE 0 END) AS CASE_B,
    SUM(CASE WHEN C = D THEN 1 ELSE 0 END) AS CASE_C,
    SUM(CASE WHEN A = B OR B = C OR C = D THEN 1 ELSE 0 END) AS CASE_ABC
FROM TABLE SAMPLE_1 S_1 
LEFT JOIN SAMPLE_2 S_2 ON S_1.ID = S_2.ID
WHERE NUMBER = '12345'

这是三个条件的交集,不一定与每个条件中匹配项的总和相同。 如果是这样,要么重复表达式,要么使用子查询:

SELECT t.*, CASE_A + CASE_B + CASE_C AS CASE_ABC
FROM (
    SELECT
        SUM(CASE WHEN A = B THEN 1 ELSE 0 END) AS CASE_A,
        SUM(CASE WHEN B = C THEN 1 ELSE 0 END) AS CASE_B,
        SUM(CASE WHEN C = D THEN 1 ELSE 0 END) AS CASE_C
    FROM TABLE SAMPLE_1 S_1 
    LEFT JOIN SAMPLE_2 S_2 ON S_1.ID = S_2.ID
    WHERE NUMBER = '12345'
) t

您可以简单地在查询中添加+如下( CASE语句也已更正):

SELECT
SUM(CASE WHEN A = B THEN 1 ELSE 0 END) 
+ SUM(CASE WHEN B = C THEN 1 ELSE 0 END) 
+ SUM(CASE WHEN C = D THEN 1 ELSE 0 END) AS sum_of_all_condition
FROM TABLE SAMPLE_1 S_1 LEFT JOIN SAMPLE_2 S_2 ON (S_1.ID = S_2.ID)
WHERE NUMBER = '12345'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM