2017-02-03 8 views
0

各ユーザーに属している注文総数と総収入のレポートを作成したいと思います。サブクエリからのMysqlの選択が機能していない

SELECT w.id, CONCAT_WS(' ', w.fname, w.sname) AS full_name, 
     te.total_earnings, te.assigned_jobs 
FROM users AS w 
LEFT JOIN (
    SELECT wr.user_id, 
      COUNT(o.order_id) AS assigned_jobs, 
      SUM(o.fee) AS total_earnings 
    FROM (
     SELECT DISTINCT user_id, order_id, withdrawn 
     FROM work_records 
    ) AS wr 
    LEFT JOIN orders o ON o.order_id = wr.order_id 
    WHERE wr.withdrawn IS NULL 
     AND o.verified != 'rejected' 
) AS te ON te.user_id = w.id 
WHERE w.status = 1 


orders      work_records 
___________________  _________________________________ 
| order ID | fee |  | id | order_id | fee | user_id | 
-------------------  --------------------------------- 
| 334 | 425 |  | 1 | 334 | 50 | 6 | 
         | 2 | 334 | 50 | 6 | 

このクエリは単一のユーザーIDで機能します。しかし、私はすべてのユーザーのレポートを取得する場合は動作しません。

ありがとうございました。

+0

SQL FiddleまたはRextesterでデータ/テーブル構造を共有してもよろしいですか?ありがとう... –

+0

いくつかのサンプルデータとして、どのような出力をしたいのかを教えてください。 –

+0

確かに1秒ください – Fury

答えて

0

これは他の人の答えです。どのようにクエリが遅くなります。しかし、あなたがより速いクエリを持っていれば、共有することを歓迎します。

SELECT w.id, CONCAT_WS(' ', w.fname, w.sname) AS full_name, 
     te.total_earnings, te.assigned_jobs 
FROM users AS w 
LEFT JOIN (
    SELECT w.id, 
     SUM(work.earnings) AS total_earnings, 
     COUNT(work.order_id) AS assigned_jobs 
    FROM users AS w 
    LEFT JOIN (
     SELECT wr.order_id, wr.writer_id, o.fee AS earnings 
     FROM work_records wr 
     LEFT JOIN orders o ON o.order_id = wr.order_id 
     WHERE wr.withdrawn IS NULL 
      AND o.verified = 'verified' 
     GROUP BY wr.order_id 
    ) work ON work.writer_id = w.id 
    GROUP BY work.writer_id 
) te ON te.id = w.id 
関連する問題