【问题标题】:Order by highest and lowest按最高和最低排序
【发布时间】:2013-04-13 20:48:27
【问题描述】:

我的问题与一个Select有关,我想按ASC和DESC排序一个字段,看例子:

我有表格产品,我想订购的字段称为价格,所以,我知道我可以这样做:

SELECT Price FROM Products ORDER BY Price ASC.

但我想看看最高价和最低价,因为我知道我能做到的最高价:

 SELECT Price FROM Products ORDER BY Price ASC limit 1; 

那么,如何在 1 中选择最高值和最低值?

我还想选择价值最高的产品名称和最低的产品名称。

问候。

【问题讨论】:

  • 您只想要这个价格还是整个行都有这个价格?你将如何打破平局(多行共享最低/最高)?随便挑一个?返回所有同行?

标签: mysql sql select sql-order-by


【解决方案1】:

简单的MIN和MAX聚合函数怎么用

SELECT MAX(Price) as MaxPrice, MIN(Price) as MinPrice FROM Products

【讨论】:

    【解决方案2】:

    这将显示所有具有最高价格或最低价格的产品:

    SELECT Products.*
    FROM Products
    WHERE Price = (SELECT MAX(Price) FROM Products)
          OR Price = (SELECT MIN(Price) FROM Products)
    

    或者你可能想要这样的东西:

    SELECT
      Products.*,
      m.mx As Highest,
      m.mn As Lowest,
      CASE WHEN Products.Price = m.mx THEN 'Max' ELSE 'Min' END As Is_Max_or_Min
    FROM
      Products INNER JOIN (
        SELECT MAX(Price) mx, MIN(Price) mn
        FROM Products
      ) m ON Products.Price IN (m.mx, m.mn)
    

    如果您希望它们位于同一行,并且只有一种产品具有最高价格,而只有一种产品具有最低价格,您可以使用以下内容:

    SELECT
      m.Lowest, p1.Name Name_Lowest,
      m.Highest, p2.Name Name_Highest
    FROM
      (SELECT MIN(Price) Lowest, MAX(Price) Highest FROM Products) m
      INNER JOIN Products p1 ON m.Lowest = p1.Price
      INNER JOIN Products p2 ON m.Highest = p2.Price
    LIMIT 1
    

    或者如果你只是需要一些更简单的东西,你可以使用这个:

    (SELECT 'Max' Is_Max_Or_Min, Products.*
     FROM Products ORDER BY Price DESC LIMIT 1)
    UNION ALL
    (SELECT 'Min', Products.*
     FROM Products ORDER BY Price LIMIT 1)
    

    【讨论】:

    • @Tennosuke 我已经更新了我的最后一个查询,我想这就是你要找的...如果可以的话请告诉我:)
    • 有这么难吗?没有更简单的方法吗?
    • @Tennosuke 我再次编辑,我认为更简单的方法是最后一个
    【解决方案3】:

    SELECT Price FROM Products ORDER BY Price DESC limit 1;??

    【讨论】:

      【解决方案4】:

      如果您想同时查看最高价和最低价,请使用以下查询:

      select highest, lowest from
      (
      SELECT Price as highest FROM Products ORDER BY Price DESC limit 1;
      SELECT Price as lowest FROM Products ORDER BY Price ASC limit 1;
      ) t
      

      【讨论】:

        【解决方案5】:

        最简单的方法是:

        SELECT MIN(Price) LowestPrice, MAX(Price) HighestPrice FROM Products
        

        但在某些情况下,您可能希望使用UNION 声明:

        (SELECT 'Lowest'  type, Price FROM Products ORDER BY Price ASC  LIMIT 1)
        UNION
        (SELECT 'Highest' type, Price FROM Products ORDER BY Price DESC LIMIT 1)
        

        【讨论】:

        • 现在有点困难,除了价格,如果我想要最高和最低的产品名称?你怎么看?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-15
        • 1970-01-01
        • 2014-04-14
        • 1970-01-01
        相关资源
        最近更新 更多