我是 SQL (Oracle) 的新手,我了解基本知识。但是有一件事我想知道并且没有找到任何正确的答案。让我们假设我有这个给定的table_1:
shipno itemno amount weight_in_kg
- - - - - - - - - - - - - -
001 1 1 50
001 6 6 60
002 2 1 30
002 6 3 30
003 1 2 100
004 5 10 25
是否可以创建查询以显示包裹总重量超过 100 公斤的所有船号,如下所示:
SELECT *
FROM table_1
WHERE (
SELECT sum(weight)
FROM table_1
WHERE shipno in (001, 002, 003, 004)
) >= 100
得到这个输出:
shipno itemno amount weight_in_kg
- - - - - - - - - - - - - -
001 1 1 50
001 6 6 60
003 1 2 100
有没有排除事务或脚本的解决方案?我知道我绝对可以通过交易解决这个问题,但我只是好奇是否可以不用。
预先感谢您的回答
如果你只是什么shipno
它是一个简单的聚合。HAVING 子句像 WHERE 子句一样充当过滤器,但使用聚合值作为其标准。
select shipno
, sum(weight_in_kg) as total_weight_in_kg
from table1
group by shipno
having sum(weight_in_kg) > 100
如果您想要表中的所有详细信息,您可以使用此查询的变体作为子查询:
select *
from table1
where shipno in (select shipno
from table1
group by shipno
having sum(weight_in_kg) > 100
)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句