2017-10-30 2 views
3
id | user_id | prd_id | amnt | dis 
1 | 1  | 10 | 200 | 23 
2 | 2  | 10 | 300 | 11 
3 | 3  | 20 | 100 | 26 
4 | 2  | 20 | 50 | 12 
5 | 4  | 30 | 100 | 22 
6 | 2  | 40 | 600 | 18 
7 | 2  | 30 | 100 | 16 

Ich möchte 2 Ergebnis aus obiger Tabelle:Get Höchste Anzahl, Anzahl der Produkte/Benutzer

Erste by prod_id wie unten

prd_id | user_id | cont | highestamt | disc 
10  | 2  | 2 | 300  | 11 
20  | 3  | 2 | 100  | 26 
30  | 4  | 2 | 100  | 22 
40  | 2  | 1 | 600  | 18 

Zweite by user_id wie folgt:

user_id | cont | bid on prd_id | winner on bid prod_id | 
1  | 1 | 10    | -     | - 
2  | 4 | 10,20,30,40  | 10,40    | 
3  | 1 | 20    | 20     | 
4  | 1 | 30    | 30     | 

UPDATE: Beispiel: oben: user_id = 2 hat auf Produkt 10,20,30,40 (Gebot auf prd_id) geboten, daher ist sein Gebot cont = 4 ... und aus dem er Gewinner in 10,40 ist (Gewinner auf Gebot prod_id) ..WHY NUR 10,40 und nicht 30 ... bcz user_id = 4 hat auf prd = 30 mit amt = 100 und user_id = 2 mit amt = 100 geboten. Aber das erste Gebot wurde von user = 4 auf prd = 30 gemacht und ist somit Gewinner für prd = 30 (für das gleiche Amt)

Nachstehend Abfrage für by prd_id versucht, aber es gibt mir ein falsches Ergebnis.

SELECT `prd_id`, `user_id` , count('prd_id') as cont , max(`amnt`) as highestamt,disc 
FROM `proddtails` 
group by `prd_id` order by `prd_id` 

oben Abfrageergebnis wie folgt: (user_id,disc nicht kommen richtigen)

prd_id | user_id | cont | highestamt | disc 
10  | 2  | 2 | 300  | 11 
20  | 2  | 2 | 100  | 11 
30  | 2  | 1 | 100  | 11 
40  | 2  | 1 | 600  | 11 

Für zweite by user_id ich nicht bekommen, was query sein wird.

Dank

UPDATE:

DANK FÜR Harshil: http://www.sqlfiddle.com/#!9/5325a6/5/1

aber nach einiger mehr Eintrag fand ich diesen Fehler: http://www.sqlfiddle.com/#!9/e04063/1 für die zweite: für user_id aber funktioniert gut für prd_id (erste Abfrage)

user_id cont bid_on_prd_id winner_on_bid_prod_id 
1   1   10     (null) 
2   4  10,20,40,30   10,40,30 
3   1  20      20 
4   1  30      30 

, aber ich möchte, wie unten:

ohne null user_id

user_id cont bid_on_prd_id winner_on_bid_prod_id 
2   4  10,20,30,40    10,40 
3   1  20      20 
4   1  30      30 

mit null user_id (aber in meinem wamp Server i in winner_on_bid_prd_id für user_id = nicht null sehen 1, ich bekomme Wert 10 statt Null)

user_id cont bid_on_prd_id winner_on_bid_prod_id 
1   1   10     (null) 
2   4  10,20,30,40    10,40 
3   1  20      20 
4   1  30      30 
+0

hinzufügen 'user_id' und' disc' zu 'GROUP BY' –

+0

, wenn ich tun Gruppe von prd_id, user_id, Scheibe .. Dann gib mir eine Ausgabe ohne Gruppe von prd_id.InShort Cont ist 1 für alle und es listet mich alle Wert – user3209031

+0

Verwenden Sie GROUP_CONCAT, um eine durch Kommas getrennte Liste aus einer Gruppe zu erhalten. – Barmar

Antwort

4

Fo r prd_id:

select t1.prd_id,t1.user_id, 
(select count(*) from tablename where prd_id = t1.prd_id)as cont, 
t1.amnt as highststatment, 
t1.dis as disc 
from tablename t1 
where (t1.prd_id,t1.amnt) in 
(select prd_id, max(amnt) from tablename group by prd_id) 
group by t1.prd_id; 

Für usr_id:

select t1.user_id, 
     count(*) as cont, 
     Group_concat(t1.prd_id separator ',') as bid_on_prd_id, 
     (select Group_concat(distinct t2.prd_id separator ',') 
     from tablename t2 
     where t2.user_id = t1.user_id 
     and (t2.id) in 
        (select min(id) from tablename 
         where (prd_id,amnt) in 
           (select prd_id,max(amnt) from tablename group by prd_id) 
         group by prd_id 
        ) 
     ) as winner_on_bid_prod_id 
from tablename t1 
group by t1.user_id 
having winner_on_bid_prod_id IS NOT NULL; 

Click here for UPDATED DEMO

+0

Yeah sein funktioniert Für prd_id (wird mit mehr multiple daten testen ... aber jetzt zeigt es als bedarfsergebnis) .... und sir zweitens für user_id .. Kannst du mir dabei helfen – user3209031

+0

sicher. arbeite nur daran. –

+0

Bitte versuchen Sie die Abfrage für user_id. –

Verwandte Themen