2017-10-01 6 views
1

J'ai une table nommée 'Maisons' qui contient les champs 'house_id', 'house_type', 'bhk_detail', 'bed_count', 'furnishing_type', 'Beds_vacant '. Maintenant, j'ai besoin d'écrire une requête pour obtenir les détails de la maison de la maison ayant la plus forte occupation bed_count - bed_vacant. J'ai essayé quelque chose comme ceci:Retourne toutes les lignes avec la valeur MAX basée sur le calcul effectué sur deux colonnes

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) 

La requête a fonctionné pour moi, mais je me demandais si nous pouvons écrire plus précisément

Répondre

3

Je pense que la façon la plus simple est top 1 with ties:

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