我有一张已搬到另一家商店的商品表。除了计算moved_items
之外,我还要检索所有is_sold
,以确定它们是否已售出。
我还需要为每个项目计算total_moves
,因为它可能已多次移动。
我正在努力实现这样的目标:
SELECT
sold_items.id IS NOT NULL AS is_sold ,
COUNT(moved_items.id) AS total_moved GROUP BY serial_number -- This is the part I need help with
FROM all_items
INNER JOIN moved_items ON all_items.serial_number= moved_items.serial_number
LEFT JOIN sold_items ON all_items.serial_number= sold_items.serial_number
有一种快速有效的方法吗?
答案 0 :(得分:1)
你有所有正确的作品,但都在错误的地方:
SELECT
serial_number ,
SUM(CASE WHEN sold_items.id IS NOT NULL THEN 1 ELSE 0 END) AS is_sold ,
COUNT(moved_items.id) AS total_moved
FROM all_items
INNER JOIN moved_items ON all_items.serial_number= moved_items.serial_number
LEFT JOIN sold_items ON all_items.serial_number= sold_items.serial_number
GROUP BY serial_number
您需要一个CASE来在查询的SELECT部分中执行该条件,以查看sold_items.id是否为空(假设您在此处想要计数,因为您没有指定..总和(案例......)将处理条件)。你可能还会发现一个简单的count(sold_items.id)
就足够了,因为我相信,NULL不会被包括在计数中。
GROUP BY在SQL语句的末尾。我还假设您希望在结果集中使用serial_number,因为您正在对其进行分组。