SELECT COUNT(id)AS GROUP BY MySQL Query

时间:2017-08-25 13:37:20

标签: mysql

我有一张已搬到另一家商店的商品表。除了计算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

有一种快速有效的方法吗?

1 个答案:

答案 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,因为您正在对其进行分组。