Oracle SQL:在 where 条件的左侧选择不使用事务

D3f4u1t

我是 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章