[英]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'
这基本上假设A
、 B
和C
是来自查询中涉及的两个表之一的列。 我强烈建议使用表别名来限定它们以使其明确。 也不是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.