2017-05-13 5 views
1

Ich brauche Sie bei der SQL-Abfrage helfen. Ich muss alle payments auswählen, die ALLE Geräte NUR von der Abfrage haben. Dazu I Abfrage Sie wie folgt:Abfrage funktioniert falsch 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'; 

Ergebnis:

enter image description here

Aber Ergebnis falsch ist, weil, wenn folgende Abfrage ausführen ich, dass payments für dieses OfferID sehen nur 2 einzigartige Geräte haben, ist es MOBIL und TABLETT.

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

enter image description here

Können Sie mir helfen und wie müssen Abfrage für das richtige Ergebnis ändern? Danke.

+0

Sie haben GROUPed von 'payment.offer_id' so natürlich erhalten Sie nur eine Zeile zurückgegeben. Entfernen Sie die "GROUP BY" und sehen Sie, ob das ist, was Sie wollen – RiggsFolly

+2

@RiggsFolly, 'HAVING' funktionieren nicht ohne' GROUP BY' –

Antwort

2

Ich glaube, Sie wollen 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; 

Hinweise:

  • Tabellenaliasse die Abfrage einfacher zu schreiben und zu lesen.
  • Setzen Sie numerische Konstanten nicht in einfache Anführungszeichen. Verwenden Sie nur einfache Anführungszeichen für String- und Datumskonstanten.
  • Sie möchten die eindeutige Anzahl der Geräte zählen, also müssen Sie die richtige Spalte zählen.
+0

Danke, es funktioniert perfekt! –