SQL MIN函数奇怪的行为

时间:2017-01-04 17:18:28

标签: sql sql-server

我正试图从桌面上获得最低价格。 当我只使用价格列时,一切似乎都很好。但是当我试图指出其他相关列时,奇怪的事情发生了...所有数据(RealEstateType,Architecture,Area,Price)    从所有列中显示...它就像min函数不起作用......为什么会发生这种情况?

 SELECT  RealEstateType,Architecture,Area,MIN(Price) AS MinPrice
 FROM Rents AS R
 INNER JOIN EstatesBasicInfo AS EB
 ON EB.RealEstateID=R.RealEstateID
 GROUP BY RealEstateType,Architecture,Area

1 个答案:

答案 0 :(得分:2)

如果您希望行具有最低租金,则聚合不是正确的解决方案。

窗口函数是最简单的:

SELECT reb.*
FROM (SELECT RealEstateType, Architecture, Area, Price,
             ROW_NUMBER() OVER (PARTITION BY RealEstateType, Architecture, Area ORDER BY PRICE ASC) as seqnum
      FROM Rents R INNER JOIN
           EstatesBasicInfo EB
           ON EB.RealEstateID = R.RealEstateID
     ) reb
WHERE seqnum = 1;

如果您需要关联,请使用rank()dense_rank()代替row_number()

编辑:

如果您希望整个表格中的最小值(文本中 ,但查询建议其他内容),那么您不需要任何其他内容:

SELECT TOP 1 RealEstateType, Architecture, Area, Price
FROM Rents R INNER JOIN
     EstatesBasicInfo EB
     ON EB.RealEstateID = R.RealEstateID
ORDER BY price ASC