2017-05-13 13 views
1

私はあなたにSQLクエリを助けてください。私はすべてのデバイスがクエリからのみ持っているすべてpaymentsを選択する必要があります。クエリが間違っているMySQL

SELECT payments.offer_id 
FROM payments 
WHERE payments.device IN ('TABLET','DESKTOP','MOBILE','IPOD') 
GROUP BY payments.offer_id 
HAVING COUNT(payments.id) = '4'; 

結果:次のクエリを実行した場合、私はこのofferIdためpaymentsはわずか2ユニークなデバイスを持っていることを見るので

enter image description here

しかし、結果が間違っている、それは私が、クエリ、次ん。このため モバイルとタブレット。

SELECT id, offer_id, device FROM payments WHERE offer_id = 77; 

enter image description here

あなたは私を助け、どのように右の結果のためのクエリを変更する必要がありますすることはできますか?おかげさまで

+0

あなたは 'payment.offer_id'によってGROUPされていますので、もちろん1行しか返されません。 'GROUP BY'を削除して、それがあなたが望むものであるかどうかを確認してください。 – RiggsFolly

+2

@RiggsFolly、' HAVING'は 'GROUP BY'なしでは動作しません –

答えて

2

私はあなたがcount(distinct)をしたいと思う:

SELECT p.offer_id 
FROM payments p 
WHERE p.device IN ('TABLET', 'DESKTOP', 'MOBILE', 'IPOD') 
GROUP BY p.offer_id 
HAVING COUNT(DISTINCT p.device) = 4; 

注:

  • 表の別名を書くことや読むことをクエリが容易になります。
  • 数値定数を一重引用符で囲んではいけません。文字列と日付の定数には単一引用符を使用してください。
  • デバイスの個数を数えたいので、右の列を数えなければなりません。
+0

ありがとう、それは完璧に動作しています! –

関連する問題