【问题标题】:SQL query for adding column value to compare with other column用于添加列值以与其他列进行比较的 SQL 查询
【发布时间】:2011-12-27 15:27:44
【问题描述】:

我有两张桌子

table_inventory
    List item
    inventory_rack_key(primarykey)
    node_key
    rack_id
    inventory_item_key
    in_coming_qty,locked_qty
    quantity

table_item
    inventory_item_key(primary key)
    item_id,product_zone

此处提供了表格示例DB TABLES
我需要查询以找出那些 (net_qty) 的项目,即in_coming_qty & quantity & locked_qty 的 b/w 总和为负数。由 node_key,rack_id, item_id,net_qty 排列

注意: 每个不同的集合 {node_key,rack_id, item_id,net_qty} 将只有 1 行输出。 例如 :{node_key,rack_id, item_id} = {ABD101,RK-01,562879} 在 table_inventory 中有 4 行 但在输出 net_qty= -78(single row) 中。

我的查询给了我结果,但我们可以用其他方式吗?

SELECT l.node_key, 
       l.rack_id, 
       i.item_id, 
       ( SUM(l.quantity + l.in_coming_qty) - SUM(l.locked_qty) ) AS net_qty 
FROM   table_inventory l, 
       table_item i 
WHERE  l.inventory_item_key = i.inventory_item_key 
GROUP  BY l.node_key, 
          l.rack_id, 
          i.item_id 
HAVING SUM(l.quantity + l.in_coming_qty) - SUM(l.locked_qty) < 0 

【问题讨论】:

  • 为什么你的答案无法接受?
  • @mwigdahl 我的回答是正确的,但还有其他方法可以做到这一点
  • 如果您当前的解决方案没有直接的问题(如结果不一致、太慢等),您可以考虑将其发布到专门针对此类问题的codereview.stackexchange.com
  • @AndriyM 当然我也会把它贴在那里

标签: sql join compare


【解决方案1】:

不是真的。有这个小变种:

select v.* from (
SELECT l.node_key, 
       l.rack_id, 
       i.item_id, 
       SUM(l.quantity + l.in_coming_qty - l.locked_qty) AS net_qty 
FROM   table_inventory l, 
       table_item i 
WHERE  l.inventory_item_key = i.inventory_item_key 
GROUP  BY l.node_key, 
          l.rack_id, 
          i.item_id
) v
where net_qty < 0 

- 这意味着SUM 计算只需编码一次,但您仍然需要进行 SUM。

【讨论】:

  • 还请考虑使用 ANSI JOIN 语法——它可以帮助您避免WHERE 子句中的错误可能导致笛卡尔JOIN
  • 一般来说,这个是不一样的。例如,如果存在locked_qty 为NULL 而quantityin_coming_qty 不是(或相反)的行,则两个查询的结果将不同。尽管如此,从列名来看,这些 NULL 似乎不太可能,而且您关于 SUM 计算的论点也成立。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-12
相关资源
最近更新 更多