在sql

时间:2017-07-10 01:36:51

标签: sql select

这是我在接近我想要的东西时得到的表格。

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

我试图找到值3 + 14 + 5 + 28。

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

我一直在努力寻找方法,但仍然不知道。你会如何解决这个问题?

3 个答案:

答案 0 :(得分:0)

使用子查询:

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

Here是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);

答案 1 :(得分:0)

尝试此查询 -

;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;

答案 2 :(得分:0)

- 从以下脚本创建表格

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;