2016-06-28 16 views
0

Ich habe eine Tabelle mit user_id und purchase_id. Ich möchte die Tabelle filtern, so dass nur Benutzer mit mehr als 2 Käufen (d. H. Es gibt mehr als 2 Zeilen für diesen Benutzer in der Tabelle). Ich habe gezählt und gruppiert, aber es funktioniert nicht so, wie ich es möchte.SQL-Anzahl ohne Gruppe von

create view myview as 
select user_Id, purchase_id, count(*) as count from mytable group by user_Id; 

select user_id, purchase_id from myview where count >2; 

Aber es gibt mir nur Benutzer (nur eine user_id), die mehr als 2 Kauf hat, und es gibt mir nicht alle ihre Einkäufe. Zum Beispiel, wenn die Tabelle sieht wie folgt aus:

user_id purchase_id 
1   1212 
1   1312 
2   1232 
1   1321 
3   1545 
3   4234 

Meine Anfrage gibt mir diese:

1  1212 
3  1545 

Aber ich möchte dies:

1   1212 
1   1312 
1   1321 
3   1545 
3   4234 
+0

'user_Id, purchase_id, count (*)' wenn Sie 'GROUP BY' verwenden, ist es nicht empfehlenswert, eine andere Spalte als die Spalte, die Sie indexieren und die Funktionen –

+0

ich wirklich tun verstehe nicht, warum Leute meine Fragen ablehnen. Das ist meine Intelligenzstufe. Ich kann nicht schlauer sein als dies, also sind das die Fragen, die ich habe. Entschuldigung, wenn du viel schlauer bist als ich. Wenn es für dich keine hohe Frage ist, ignoriere es einfach, warum machst du es runter ?! – HimanAB

+0

Nein, ich habe es nicht down –

Antwort

2

Änderung Ihrer letzten SQL-ähnliche

select mt.user_id, mt.purchase_id 
from myview mv 
inner join mytable mt 
on mt.user_id=mv.user_id where mv.count >5; 
+0

@HimanUCSS Bitte versuchen Sie oben Abfrage und lassen Sie mich wissen –

+0

Dank @Mahesh. Es funktioniert perfekt. – HimanAB

0

Versuchen Sie GROUP BY wit h HABEN Kommentar.

SELECT user_Id, purchase_id 
FROM mytable 
GROUP BY user_Id 
HAVING count(*) >5 
0

Soweit ich Ihnen sagen kann, möchten Sie die Benutzer-ID und die Kauf-ID aller Benutzer, die mehr als 5 Käufe haben.

Um dies zu tun, könnten Sie eine Verknüpfung für zwei Abfragen durchführen. Zum Beispiel:

SELECT tblLeft.user_id, 
     tblLeft.purchase_id 
FROM myview tblLeft 
     JOIN (SELECT user_id, 
        Count(*) AS purchases 
      FROM myview 
      GROUP BY user_id 
      HAVING purchases > 1) tblRight 
     ON tblLeft.user_id = tblRight.user_id 

Die tblRight ist im Wesentlichen eine Tabelle, die die user_id den alle Nutzer mit mehr als 5 Käufen enthält. Wir tun dann eine Auswahl (tblLeft) und treten sie auf der Tabl rechts, so dass nur Kunden mit mehr als 5 Einkäufe bleiben.

0
SELECT 
    * 
FROM 
    mytable mt, 
    (SELECT user_id, count(*) AS purchase_count FROM mytable GROUP BY user_id) ct 
WHERE 
    mt.user_id = ct.user_id AND ct.purchase_count > 5; 
1
SELECT * 
FROM MYTABLE 
WHERE USER_ID IN (SELECT USER_ID 
FROM MYTABLE 
GROUP BY USER_ID 
HAVING COUNT(*)>=2) 

ich in meinem Netezza getestet, es funktioniert. hoffentlich funktioniert es auch in mysql