代码之家  ›  专栏  ›  技术社区  ›  NeonBits

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

  •  3
  • NeonBits  · 技术社区  · 12 年前

    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;
    

    根据我(非常有限)的经验,应该返回每种房产类型的最低/最高价格记录。我的想法是,如果它只是检查价格是最小值还是最大值,然后对其进行排序,这会奏效。 不幸的是,由于某些原因,它为某些属性类型返回了两条以上的记录- 半分离退货:

    • 120,000.00
    • 210,000.00
    • 210,000.00
    • 210,000.00
    • 380,000.00

    当它只返回最高和最低的数字时。任何帮助都将非常感谢! 我再次道歉,如果这个问题之前已经得到了回答,或者非常简单! 我正在使用Access 2007-2010。

    3 回复  |  直到 12 年前
        1
  •  3
  •   Gordon Linoff    12 年前

    您遇到的问题是,您正在与所有物业类型的最低/最高价格进行比较。因此,属性类型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;
    

    还有一个简单的问题,多个记录可能具有最小值。您的问题是需要将结果限制在几个最低/最高价格中的一个吗?

        2
  •  0
  •   Linger    12 年前

    如果您只需要一份物业类型列表,然后列出每种类型的最低销售价格和最高销售价格,请尝试以下操作:

    SELECT Property_Type, MIN(Price) AS LowestPrice, MAX(Price) AS HighestPrice
    FROM tbl_Sale_Property AS sp
    GROUP BY Property_Type
    
        3
  •  0
  •   gh9    12 年前
    SELECT MIN(Price) FROM tbl_Sale_Property GROUP BY Property_Type
    

    1) 你需要在你的where子句中添加一个订单,因为该订单不是非法的
    2) 这将为您拥有的每种类型的房产记录选择最低价格。 即;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 ))
    

    如果你只想找到价格最低和最高的财产