DISTINCT を使用すると機能するクエリがあります。ただし、DISTINCT の使用を避けるのに役立つ方法でクエリを書き直すことができると感じています。これにより、データベースがクエリを処理しやすくなります (より速く)。
クエリを書き直す意味がない場合は、説明してください。ある場合は、単純化されたクエリを見て、そもそも重複しないように再構築する方法のヒントを教えてください。
SELECT Us.user_id, COUNT( DISTINCT Or.order_id ) AS orders
FROM users AS Us
LEFT JOIN events AS Ev ON Ev.user_id = Us.user_id
LEFT JOIN orders AS Or ON Or.event_id = Ev.event_id
OR Or.user_id = Us.user_id
GROUP BY Us.user_id
クエリの簡単な説明: ユーザーのイベントと注文のテーブルがあります。注文には user_id 列がある場合もありますが、ほとんどの場合は null であり、イベント テーブルを介して接続する必要があります。
編集:
これらは私が書いた単純化されたクエリの結果です。
user_id orders
3952 263
3953 7
3954 2
3955 6
3956 1
3957 0
...
user_id orders
3952 79
3953 7
3954 2
3955 6
3956 1
3957 0
...
問題が修正されました:
SELECT COALESCE( Or.user_id, Ev.user_id ) AS user, COUNT( Or.order_id ) AS orders
FROM orders AS Or
LEFT JOIN events AS Ev ON Ev.event_id = Or.event_id
GROUP BY COALESCE( Or.user_id, Ev.user_id )