使用min/max的嵌套SQL查询返回的记录太多(此为新记录)
SQL新手(搜索了我的问题,但找不到任何内容:() 我希望这是件简单的事。。。 基本上,我试图查询一个简单的房地产表,其中包括价格、地址等以及房地产类型(独立、半独立、公寓)。 我被要求返回每种房产类型的最高和最低价格的房产。很简单吧?我想是的,但还是搞砸了 所以我现在的问题是:使用min/max的嵌套SQL查询返回的记录太多(此为新记录),sql,max,min,Sql,Max,Min,SQL新手(搜索了我的问题,但找不到任何内容:() 我希望这是件简单的事。。。 基本上,我试图查询一个简单的房地产表,其中包括价格、地址等以及房地产类型(独立、半独立、公寓)。 我被要求返回每种房产类型的最高和最低价格的房产。很简单吧?我想是的,但还是搞砸了 所以我现在的问题是: SELECT Area, Address, Property_Code, Property_Type, Price,
SELECT Area,
Address,
Property_Code,
Property_Type,
Price,
Market_Date,
Sold
FROM tbl_Sale_Property
WHERE (
Price IN (
SELECT MIN(Price)
FROM tbl_Sale_Property
GROUP BY Property_Type
)
OR Price IN (
SELECT MAX(Price)
FROM tbl_Sale_Property
GROUP BY Property_Type
)
)
ORDER BY Property_Type;
根据我(非常有限)的经验,它应该返回每种房产类型的每个最小/最大价格记录。我的想法是,如果它只是检查价格是最小还是最大,然后进行排序,这就行了。
不幸的是,出于某种原因,它返回了某些属性类型的两条以上的记录-
半分离返回:
- 120000.00英镑
- 210000.00英镑
- 210000.00英镑
- 210000.00英镑
- 380000.00英镑
我使用的是Access 2007-2010。如果您只需要一份房产类型列表,然后是每种房产的最低售价和最高售价,请尝试以下操作:
SELECT Property_Type, MIN(Price) AS LowestPrice, MAX(Price) AS HighestPrice
FROM tbl_Sale_Property AS sp
GROUP BY Property_Type
1) 您需要在where子句中输入order by,因为该订单不是gaurenteed2) 这将为您拥有的每种类型的财产记录选择最低价格。 ie;5物业记录5分钟价格 所以你的where子句有可能看起来像这样 其中价格在(1,2,3,4,5)中 当你真正想要的是(1,5)中的价格时 要解决这个问题
SELECT MIN(Price) FROM tbl_Sale_Property
这将得到表中的绝对最低价格
同样的逻辑也适用于SELECT MAX
固定的
SELECT Area, Address, Property_Code, Property_Type, Price, Market_Date, Sold
FROM tbl_Sale_Property
WHERE (Price = (SELECT MIN(Price) FROM tbl_Sale_Property )
OR Price = (SELECT MAX(Price) FROM tbl_Sale_Property ))
如果您只想找到价格最低和价格最高的房产,那么您遇到的问题是,您正在与所有房产类型的最低/最高价格进行比较。因此,属性类型1可以匹配属性类型2的最低价格,并且它将出现在您的输出中 您需要相关子查询:
SELECT Area, Address, Property_Code, Property_Type, Price, Market_Date, Sold
FROM tbl_Sale_Property sp
WHERE sp.Price = (SELECT MIN(Price) FROM tbl_Sale_Property sp2 where sp.Property_Type = sp2.Property_Type) or
sp.Price = (SELECT MAX(Price) FROM tbl_Sale_Property sp2 where sp.Property_Type = sp2.Property_Type)
ORDER BY Property_Type;
您还有一个简单的问题,即多个记录可能具有最小值。您的问题是需要将结果限制在几个最低/最高价格中的一个吗?您使用的是什么数据库?您可以编辑您的问题以发布
tbl_Sale_Property
中的一小部分行样本,以及该行集的预期输出样本吗?如果可能的话,将其设置为具有单一价格的属性类型会非常有用吗?看看这一点,我认为您需要加入property\u type
和MAX/MIN(price)
上分组的子查询,是否有可能许多记录具有相同的MIN或MAX?仅仅因为它是最小值,并不意味着它是唯一的属性。不幸的是,我需要每个属性类型的单独属性(两条记录)。我曾考虑使用多个最小值,但由于某些原因,它返回的值介于我期望的最小值/最大值之间。比如210000条铺设在380000和120000之间。这个答案解决了这个问题!感谢所有发表评论的人。现在我想起来,这很有道理……我在这件事上坚持的时间比我想承认的要长;)感谢您的输入,但是我需要每个属性类型的最小值和最大值。因此,我将得到4个最小值和4个最大值(我可以按属性类型排序)
SELECT Area, Address, Property_Code, Property_Type, Price, Market_Date, Sold
FROM tbl_Sale_Property sp
WHERE sp.Price = (SELECT MIN(Price) FROM tbl_Sale_Property sp2 where sp.Property_Type = sp2.Property_Type) or
sp.Price = (SELECT MAX(Price) FROM tbl_Sale_Property sp2 where sp.Property_Type = sp2.Property_Type)
ORDER BY Property_Type;