1

以下のような注文表があります

order_id  ordered    checkin    collected   
======================================
1           2           1           4       
2           4           2           4       
3           4           2           4       
4           1           4           1      

これは、各注文を注文し、チェックインし、回収したスタッフを表します。

スタッフの各メンバーが行った注文、チェックイン、およびコレクションの数をカウントするSQLクエリを実行したいと思います。これは、各行のスタッフ メンバー名を出力するスタッフ テーブルにも結合します。

したがって、スタッフ 1 (ジョン) の場合、注文 1 回、チェックイン 1 回、集荷 1 回になります。スタッフ メンバー 2 (Simon) は、他のスタッフ メンバーの場合、注文 1 件、チェックイン 2 件、コレクション 0 件などになります。

これを達成するための最良のmysqlクエリは何ですか?

4

3 に答える 3

0

ピータームの答えは正しいです。以下のコードは、'staff' テーブルがなくても基本的に同じです。peterm が示したように、COALESCE を使用します。重要な点は、内部結合ではなく外部結合を行うことです。そのため、0 のカウントがレポートに表示されます。

select T1.member,T1.ordered_count,T2.checkin_count, collected_count
from (
    select ordered as "member", count(*) as "ordered_count"
    from orders group by ordered
) as T1
left join  (
    select checkin as "member", count(*) as "checkin_count"
    from orders
    group by checkin
) as T2 on T1.member=T2.member
left join  (
    select collected as "member", count(*) as "collected_count"
    from orders
    group by collected
) as T3 on T2.member=T3.member;
于 2013-09-26T22:53:43.533 に答える
0

COUNT(*)テーブル内のすべての注文をカウントするために使用できます。またCOUNT(checkin) COUNT(collected) 、他のフィールドをカウントするために使用します。

1 人のユーザーのカウントを取得しようとしている場合は、ユーザーWHEREがそれを行うことができます。

SELECT
  COUNT(order_id) AS   order_count,
  COUNT(checking) AS chcekin_count,
  COUNT(collected) AS collected_count
FROM
  your table
  WHERE staff_member = idOfStaff

また、テーブルから多くのカウントを実行して、1 つのテーブルとして収集することもできます

SELECT
  (SELECT COUNT(order_id) FROM table WHERE staff = ?)   AS staff_1_order_count,
  (SELECT COUNT(order_id) FROM table WHERE staff = ?)   AS staff_2_order_count
于 2013-09-26T21:56:22.800 に答える