2016-05-03 24 views
0

テキストでのクエリ:「アクティブなすべてのユーザーと完了した注文を入力し、指定した期間に割り当てられた完了した注文」を照会します。SQL-異なる条件の2つのテーブル数を持つ2つのテーブルを結合する方法

LEFT JOIN orders l 
ON l.idDispatcher = u.id 

私はこれを結合する必要があります。ここでは

は、私はこれが私のユーザーが順番に割り当てられているすべての注文を与えるだけで1カウント

SELECT u.firstname, u.lastname, COUNT(l.id) AS totalCompleted 
     FROM users u 
     LEFT JOIN orders l 
     ON l.idDispatcher = u.id 
     WHERE u.disabled = '0' 
     AND l.smallStatus='1' 
     AND l.dateAdded >= :from 
     AND l.dateAdded <= :to 
     GROUP BY u.firstname; 

を作成するために管理クエリですが次のものをベースにしている別のクエリでクエリします。

LEFT JOIN orders l 
ON l.addedById= u.id 

I tr Yこれ:私はそれは、2つの異なる数値とする必要がある場合

LEFT JOIN orders l 
ON l.idDispatcher = u.id AND l.addedById= u.id 

COUNT(l.id)は、ユーザによって追加された割り当て注文と注文の結果を組み合わせます。私はまた、COUNTの中に条件を入れようとしましたが、成功しませんでした。

+0

だから... ...まさに問題/質問は何ですか?何が効いていないのですか? – Rogue

+0

ヒント:条件付きでこのようにカウントできます: 'sum(a = 123)'。これは、条件が真である頻度を数えます。 –

+0

@Rogue問題は、2つの別々のクエリで動作するようになっているため、1に結合しようとしています –

答えて

0

私は正確には分かりませんが、2つの別々のクエリで作業していて、2つのカウントが必要な場合は、

しかし、あなたは二つの別々の条件に基づいて、すべての試合の1つのカウントが必要な場合は、「OR」でのご参加の代わりに使う「AND」:

SELECT u.firstname, u.lastname, COUNT(l.id) AS totalCompleted 
    FROM users u 
    LEFT JOIN orders l 
    ON l.idDispatcher = u.id 
     or l.addedById= u.id 
    WHERE u.disabled = '0' 
    AND l.smallStatus='1' 
    AND l.dateAdded >= :from 
    AND l.dateAdded <= :to 
    GROUP BY u.firstname, u.lastname; 
+0

[これをチェック](https://codeshare.io/OhCoT)。これは私がそれを働かせる方法です。私はちょうど1つのクエリのすべてを結合しようとしています –

関連する問題