2017-10-01 2 views
1

Ich habe eine Tabelle mit dem Namen 'Houses', die die Felder 'house_id', 'house_type', 'bhk_detail', 'bed_count', 'Einrichtungstyp', 'Beds_vacant' enthält ". Jetzt muss ich eine Abfrage schreiben, um die Hausdetails des Hauses mit der höchsten Belegung zu erhalten, die bed_count - bed_vacant. Ich habe versucht, so etwas wie dieses:Geben Sie alle Zeilen mit MAX-Wert zurück, basierend auf der Berechnung in zwei Spalten

SELECT hs.house_id, hs.house_type , hs.bhk_details, hs.bed_count , hs.furnishing_type, hs.Beds_vacant, 
     max(hs.bed_count - hs.Beds_vacant 
FROM Houses as hs 
GROUP BY hs.house_id, hs.house_type, hs.bhk_details, hs.bed_count, hs.furnishing_type, hs.Beds_vacant 
HAVING MAX(hs.bed_count - hs.Beds_vacant)IN (SELECT max(hs.bed_count - hs.Beds_vacant) FROM Houses as hs) 

Die Abfrage für mich gearbeitet, aber ich frage mich, ob wir es eben mehr schreiben kann

Antwort

3

Ich denke, der einfachste Weg ist, top 1 with ties:

select top (1) with ties h.* 
from Houses h 
order by (h.bed_count - h.beds_vacant) desc; 
Verwandte Themen