2016-09-09 1 views
1

私はこのクエリを書いて、ユーザー数+各ユーザーが作成した可能性の数+変換されたすべての可能性を取得します。私は1に私のクエリを組み合わせることができます。しかしイムが0の行を取得することを、this answer explained meとして非相関サブクエリでそれをやろうとしていますなぜ私のクエリはエラーを表示しませんが、ゼロ行も返しますか?

SELECT u.*, p.allPotentials, pc.cPotentials 
    FROM os_user u 
JOIN (SELECT FID_author, count(*) allPotentials FROM os_potential) p 
    ON p.FID_author = u.ID 
JOIN (SELECT converted, FID_author, count(*) cPotentials FROM os_potential) pc 
    ON p.FID_author = u.ID AND pc.converted = 1 

:これは、それがどのように見えるかです。

私のテーブルには、次のようになります。

ユーザー:

+----+------+-------+ 
| ID | Name | Email | 
+----+------+-------+ 

ポテンシャル:

+----+------+-------+------------+-----------+ 
| ID | Name | Email | FID_author | converted | 
+----+------+-------+------------+-----------+ 

FID_authorが外部キー、ユーザーIDです。

私のクエリは0行を返しており、エラーは表示されません。私は間違って何をしていますか?

EDIT

これまでのところ、私のクエリ:

SELECT u.*, p.allPotentials, pc.cPotentials 
    FROM os_user u 
LEFT JOIN (SELECT FID_author, count(*) allPotentials 
    FROM os_potential GROUP BY FID_author) p 
    ON p.FID_author = u.ID 
LEFT JOIN (SELECT converted, FID_author, count(*) cPotentials 
    FROM os_potential GROUP BY FID_author) pc 
    ON p.FID_author = u.ID 
    AND pc.converted = 1 
GROUP BY u.ID 

私が期待されるほとんどとして結果を取得していますが、問題がcPotentialsがfalseのすべての行、1が含まれている、です。多くの場合、1つしかありません。どこに問題がありますか?

+1

行方不明のグループに参加。 – jarlh

+0

速いコメントをいただきありがとうございます。私は各サブクエリの最後に 'GROUP BY FID_author'を追加しましたが、まだ0行を返します。 – ksno

答えて

4

サブクエリにすることで、グループが見つからないとeventullyサブクエリでのBY左使用

SELECT u.*, p.allPotentials, pc.cPotentials 
FROM os_user u 
LEFT JOIN (SELECT FID_author, count(*) allPotentials FROM os_potential 
        GROUP BY FID_author) p 
ON p.FID_author = u.ID 
LEFT JOIN (SELECT converted, FID_author, count(*) cPotentials FROM os_potential 
        GROUP BY converted,FID_author) pc 
ON pc.FID_author = u.ID AND pc.converted = 1 
+0

それは私の質問をするための正しい方向を与えました。しかし、私は 'GROUP BY u.ID'メインクエリもしなければなりませんでした。今は 'GROUP BY'とすべての可能な' JOIN'とそれがどのように動作するかについてもっと読む必要があります。迅速な答えをありがとう。 – ksno

+0

@ksno ..主な問合せでは集計関数が表示されないので、グループ化する必要はありません。結局、別個の値を取得するためには別個にする必要があります。 – scaisEdge

関連する問題