使用min/max的嵌套SQL查询返回的记录太多(此为新记录)

使用min/max的嵌套SQL查询返回的记录太多(此为新记录),sql,max,min,Sql,Max,Min,SQL新手(搜索了我的问题,但找不到任何内容:() 我希望这是件简单的事。。。 基本上,我试图查询一个简单的房地产表,其中包括价格、地址等以及房地产类型(独立、半独立、公寓)。 我被要求返回每种房产类型的最高和最低价格的房产。很简单吧?我想是的,但还是搞砸了 所以我现在的问题是: SELECT Area, Address, Property_Code, Property_Type, Price,

SQL新手(搜索了我的问题,但找不到任何内容:() 我希望这是件简单的事。。。 基本上,我试图查询一个简单的房地产表,其中包括价格、地址等以及房地产类型(独立、半独立、公寓)。 我被要求返回每种房产类型的最高和最低价格的房产。很简单吧?我想是的,但还是搞砸了

所以我现在的问题是:

  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,因为该订单不是gaurenteed
2) 这将为您拥有的每种类型的财产记录选择最低价格。 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;