2017-08-25 11 views
-1

私は別のストアに移動された項目のテーブルを持っています。 is_soldの計算に加えて、すべてmoved_itemsを検索して、それらが販売されているかどうかを判断します。MySQLクエリでSELECT COUNT(ID)AS GROUP

また、アイテムが複数回移動している可能性があるため、アイテムごとに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

あなたはすべての権利部分を持っていますが、間違った場所にあるすべて:

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 

あなたはsold_items.idがあるかどうかを確認するために、クエリのSELECT部分​​にその条件アップを行うためにCASEが必要になりますnot null(あなたが指定しなかったのでここでカウントしたいと思っていると仮定しましょう...合計(case ...)が条件を考慮して処理します)。また、単純なcount(sold_items.id)がここで十分であることが分かるかもしれません。なぜなら、NULLはカウントに含まれないからだと思います。

GROUP BYはSQLステートメントの最後に移動します。また、あなたがグループ化しているので、結果セット内のあなたのserial_numberが必要であると仮定しています。

関連する問題