如何从内连接中对列进行求和?
我已经做到这一点,但结果不正确,例如。
SELECT DISTINCT it.CODE, pl.UNITS
FROM ITEMDETAILS it inner join plant pl ON it.CODE = pl.CODE
WHERE it.LOCNUMBER = '3434';
这给我这个正确的结果
CODE UNITS
GE-ARH 2
GE-ARV 2
GE-EC 0.5
GE-JB 0.5
GE-JT 0.5
GE-VL2 2
GE-VL4 2
然后我想将所有UNITS加总为TOTAL,但是当我执行下面的查询时,它给出了错误的计算结果?任何人都可以向我展示我的方式错误吗?
SELECT DISTINCT SUM(pl.UNITS) as TotalUnits
FROM PLANT pl inner join ITEMDETAILS it on pl.CODE = it.CODE
WHERE it.LOCNUMBER = '3434';
TotalUnits
972
答案显然应该是9.5,我认为它是针对整个列进行计算而不考虑where子句,但不确定为什么?
感谢您一如既往的帮助。
答案 0 :(得分:1)
您可以执行以下操作:
select sum(units)
from
(
SELECT DISTINCT it.CODE, pl.UNITS
FROM ITEMDETAILS it inner join plant pl ON it.CODE = pl.CODE
WHERE it.LOCNUMBER = '3434'
) un
或者取决于sql版本
;with un as (
SELECT DISTINCT it.CODE, pl.UNITS
FROM ITEMDETAILS it inner join plant pl ON it.CODE = pl.CODE
WHERE it.LOCNUMBER = '3434'
)
select sum(units)
from un
答案 1 :(得分:1)
我会这样做
SELECT SUM(UNITS) AS TOTAL_UNITS
FROM
(
SELECT DISTINCT it.CODE, pl.UNITS
FROM ITEMDETAILS it inner join plant pl ON it.CODE = pl.CODE
WHERE it.LOCNUMBER = '3434'
) X
答案 2 :(得分:0)
加入"详细信息表"另一个是促进where where条件"在哪里.LOCNUMBER =' 3434'"。把它带走,加入是没有目的的。
可能是这种连接是不必要的重复的唯一原因(又名"重复")因此可以遵循不同的方法。 e.g。
SELECT
pl.CODE
, pl.UNITS
FROM plant pl
WHERE pl.CODE IN (
SELECT
it.CODE
FROM ITEMDETAILS it
WHERE it.LOCNUMBER = '3434'
)
;
和
SELECT
SUM(pl.UNITS)
FROM plant pl
WHERE pl.CODE IN (
SELECT
it.CODE
FROM ITEMDETAILS it
WHERE it.LOCNUMBER = '3434'
)
;
可以在子查询中使用带有相关性的EXISTS()代替IN()。
请注意,如果dbms支持sum()over(),则可以将总数作为列生成。