繁体   English   中英

在SQL中选择不同条件下的总和值

[英]select sum values on different conditions in sql

这是我接近自己想要的东西时遇到的桌子。

Equip unit qty
---------------
a     01    2
a     01    3     
a     09   14
b     01    5
b     09   28

我正在尝试查找值3 + 14 + 5 + 28。

我想对不同设备和不同单位中的所有值求和,但如果单位相同,则应选择最大值(在这种情况下,我要选择3而不是2)。

我一直在努力寻找方法,但仍然不知道。 您将如何解决该问题?

使用子查询:

select sum(qty)
from (select equip, unit, max(qty) as qty
      from t
      group by equip, unit
     ) eu;

是Rextester中的一个示例。

您也可以在from没有子查询的情况下执行此操作,假设最大值不重复:

select sum(qty)
from t
where qty = (select max(t2.qty) from t t2 where t2.equip = t.equip and t2.unit = t.unit);

试试这个查询-

;WITH CTE
AS (
    SELECT Equipment
        ,Unit
        ,Quantity
        ,Row_Number() OVER (
            PARTITION BY Equipment
            ,Unit ORDER BY Quantity DESC
            ) AS RowNum
    FROM SampleTable
    )
SELECT Sum(Quantity) AS Total
FROM CTE
WHERE RowNum = 1;

-从下面的脚本创建表

create table eqip(equip varchar(3), unit int, qty int);

-插入记录以进行测试查询

insert into eqip
values('a'  ,  01 ,   2),
('a',     01 ,   3    ) ,
('a'  ,   09 ,  14),
('b'  ,   01 ,   5),
('b' ,    09 ,  28)

-在查询下面运行以获得结果。 其中Row_Number按单位和数量获取PARTITION。

select sum(qty) as total_quantity from(
    select Row_Number() OVER (PARTITION BY equip,unit ORDER BY qty DESC) AS row_num, equip, unit, qty from eqip
) as A where row_num=1;

暂无
暂无

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

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