ムービー評価でグループ化されたサンプルテーブルの異なる基準に基づいてカウントを単純に分割しようとしています。私はデフォルトでMySQLに付属のサンプルSAKILAスキーマを使用しています。LEFT JOINが必要ですか? WHERE条件はINNER JOINと同様に動作します
あなたは、私がこれらの最初の2つのクエリから見て期待してい別々のカウントを見ることができます:
FIRST QUERY:
SELECT f1.rating, count(f1.title)
FROM sakila.film f1
WHERE f1.title like '%BA%'
GROUP BY rating
ORDER BY rating ASC
FIRSTクエリ結果:
rating count(f1.title)
G 4
PG 5
PG-13 8
R 6
NC-17 6
SECOND QUERY:
SELECT f1.rating, count(f1.title)
FROM sakila.film f1
WHERE f1.title like '%AM%'
GROUP BY rating
ORDER BY rating ASC
のSECONDクエリ結果:
rating count(f1.title)
G 8
PG 6
PG-13 9
R 18
NC-17 7
Gの評価などPGの評価は5/6の部門を持っているため、4/8の部門を持っている、とするために私は何をした後だことです。
LEFT JOINは、この2つのWHERE条件が「BA」と「AM」の両方を含む1つのムービーになるため、私にはこの計算を実行することを期待していましたが、LEFT JOINはINNER JOINとして動作しているようです」、結果はそれが何であるかである理由である:
問題QUERY:
SELECT f1.rating, count(f1.title)/count(f2.title)
FROM sakila.film f1
LEFT JOIN sakila.film f2
ON f1.film_id = f2.film_id
WHERE f1.title like '%BA%'
AND f2.title like '%AM%'
GROUP BY rating
ORDER BY rating ASC
問題のあるクエリ結果:
rating count(f1.title)/count(f2.title)
PG-13 1.0000
どのように私はMODIすることができます最初の2つのクエリからのカウントを意図したとおりに除算し、レーティングでグループ化する問題のあるクエリを実行しますか?この場合、UNION ALLを使用してクエリを書き直す必要がありますか、LEFT JOINを使用することはできますか?
ありがとうございます。やってあなたの現在のアプローチ私が間違った方向になると思い自己参加
SELECT rating,
SUM(CASE WHEN title LIKE '%BA%' THEN 1 ELSE 0 END)/
SUM(CASE WHEN title LIKE '%AM%' THEN 1 ELSE 0 END) AS the_ratio
FROM sakila.film
GROUP BY rating
ORDER BY rating ASC
注:
にカウントされません選択
の最初の列は素晴らしい作品そんなに高速応答のためと説明 –
に感謝を意味し、こんにちは、シドニー、コメントとしてここに貼り付けるのではなく、新しい質問を開いてください。 –
ありがとう:ありがとう: http://stackoverflow.com/questions/42130476/calculating-acceptance-ratio-with-left-join-and-self-join-and-aggregate-function –