SQL Select-Abfrage-Hilfe erforderlich

Meine Frage ist ähnlich wie SQL select Gruppenabfrage . Aber es gibt Änderungen im Schema und ich möchte ein anderes Ergebnis, wie unten erwähnt. die Lösungen der gegebenen Verbindung geben mir die richtigen Lösungen nicht. Sie können SQL Fiddle verwenden , um dies zu lösen.

Unten ist mein Tisch

Tabelle 1

+--------+----------+---------+ | amount | make | product | +--------+----------+---------+ | 100 | Nokia | Mobiles | | 300 | Samesung | Mobiles | | 700 | Micromax | Mobiles | | 1000 | Karbonn | Mobiles | | 300 | Lava | Mobiles | | 100 | Floyer | Gift | | 500 | Arichies | Gift | | 300 | Feeling | Gift | +--------+----------+---------+ 

Nun möchte ich die zwei niedrigsten Beträge für jedes Produkt anzeigen und wenn die Menge gleich ist, dann wird jeder nach aufsteigender Alphabet-Reihenfolge von make-Spalte …

Also möchte ich eine einzelne SQL-Abfrage erstellen, die mir das Ergebnis wie folgt liefert.

 +--------+----------+---------+ | amount | make | product | +--------+----------+---------+ | 100 | Nokia | Mobiles | | 300 | Lava | Mobiles | | 100 | Floyer | Gift | | 300 | Feeling | Gift | +--------+----------+---------+ 

Bitte helfen Sie mir, eine solche Abfrage zu erstellen.

Dies sollte dir helfen ..

Der erste hatte einen Bug, der jetzt aktualisiert wird.

 SELECT t.* FROM ( SELECT @lim := 2, @cg := '' ) vars, (select * from Table1 order by product,amount, make) t WHERE CASE WHEN @cg <> product THEN @r := @lim ELSE 1 END > 0 AND (@r := @r - 1) >= 0 AND (@cg := product) IS NOT NULL ORDER BY product,amount, make 

Viel Spaß damit und mit dem Fiddler: http://sqlfiddle.com/#!2/bdd1a/115/0

 SELECT amount, make,product FROM (SELECT ROW_NUMBER() OVER (PARTITION BY product ORDER BY amount) AS RowID,* FROM Table1) RESULT WHERE RowID <= 2 

das funktioniert gut in PostgreSQL, mysql unterstützt die windowsfunktion nicht, indem ich eine ähnliche windowsfunktion in mysql referenziere

Probieren Sie dieses aus:

 select * from table1 ORDER BY amount DESC LIMIT 2;