2011-01-08 13 views
0

habe ich eine Tabelle in meiner SQL-Datenbank, die wie folgt aussieht:SQL-Abfrage mit ORDER BY

id type  radius 
------------------------- 
1  type1  0.25 
2  type2  0.59 
3  type1  0.26 
4  type1  0.78 
5  type3  0.12 
6  type2  0.45 
7  type3  0.22 
8  type3  0.98 

Ich habe Probleme, herauszufinden, wie eine SELECT Abfrage zu definieren, die den geringsten Radius für jeden Typ zurückgibt.

Mit anderen Worten, die Ergebnisse Ich suche seien:

Ergebnisse:

id type  radius 
------------------------- 
1  type1  0.25 
6  type2  0.45 
7  type3  0.22 

Ich nehme an, ich ORDER BY verwenden Sie den Radius vom niedrigsten zum höchsten zu bestellen und die niedrigste greifen. Allerdings nehme ich auch an, dass ich DISTINCT auf den Typ verwenden muss, aber ich kann nicht herausfinden, wie man das abzieht.

Alle Experten SQL'ers da draußen haben eine Idee von dieser Art von SELECT Abfrage ist möglich? Jede Hilfe wird sehr geschätzt!

Vielen Dank, Brett

Antwort

6

Sie gruppieren möchten nach Typ, und dann von dieser Art des minimalen Radius bekommen und sortieren sie nach Art

SELECT type, MIN(radius) FROM table 
GROUP BY type 
ORDER BY type 

Wenn Sie die ID wollen, mit zu gehen das min, du kannst es nicht tun, wie ich zuerst tippte: diese ID ist eine halb-zufällige ID für den Typ. Leider werden Sie begleichen (von der Oberseite meines Kopfes)

SELECT t1.id,t1.type,t1.radius FROM table t1 
WHERE radius = ( 
    SELECT MIN(radius) FROM table 
    WHERE radius = t1.radius 
    ) 

(final edit: Sie habe das letzte zu testen bekam, grundlegende Warnung ist, dass in der ersten Abfrage kann man nicht zuverlässig holt die Id, weil sie nicht speziell auf die Art gehören werden, die den niedrigsten Radius) Versuchen

+0

Großartig! Das macht Sinn. Können Sie in diesem Fall die Verwendung von SORT BY erklären? Denkst du, dass das miteinbezogen werden müsste? – Brett

+0

sortieren nach wird die Typen in Reihenfolge, wenn Sie die Typen alle in Ihrer Datenbank gemischt hatten, würden Sie sie in der Reihenfolge – jcuenod

+0

Nah, nicht wirklich nützlich überhaupt, es ist nur um sicherzustellen, dass Sie die "type1 "Zuerst usw. Sie könnten nach ID sortieren, um zuerst den mit der niedrigsten ID zu erhalten. Nur ein Heads-up: Verwenden Sie die ID? weil die ID in diesem Fall nutzlos ist. (Ich werde meine Antwort dafür bearbeiten) – Nanne

2

haben

SELECT min(radius) FROM table GROUP BY type 

min mit dem Minimalwert im Unterschied wird wieder unterschiedliche Werte, aber Gruppe zurückkehren, indem Sie erlauben die que durchführen auf verschiedenen Feldern.

Check-out http://www.w3schools.com/sql/sql_groupby.asp (und auch http://www.w3schools.com/sql/sql_quickref.asp)

+0

Es scheint, als ob Sie sollten über Aggregation wissen.) – potashin

+0

Ich dachte, es gab vielleicht eine magische Bedeutung in Schienen ... – jcuenod

+0

Nun, es ist mehr über rohe SQL in dieser Frage .. – potashin

0

Sie haben min und GROUP kombinieren BY

0

ich glaube, das sollte funktionieren:

SELECT t1.id,t1.type,t1.radius FROM table GROUP BY type ORDER BY radius 

Da Bestellung durch Vorgaben das Minimum aufsteigend Wert sollte der angezeigte sein.