【问题标题】:SQL selecting the maximum value with all the columnSQL选择所有列的最大值
【发布时间】:2022-01-14 22:21:36
【问题描述】:

查询:

SELECT 
    itemcode, whsecode, MAX(quantity)
FROM
    inventoryTable
WHERE
    itemcode = 'FG 4751'
GROUP BY 
    itemcode;

它返回这个错误:

列 'inventoryTable.whsecode' 在选择列表中无效,因为 它不包含在聚合函数或 GROUP BY 中 子句。

当我将 whsecode 放在 GROUP BY 子句中时,它只返回所有或多行,itemcode 'FG 4751':

我需要的输出是

FG 4751|WHSE3|100

【问题讨论】:

    标签: sql group-by max


    【解决方案1】:
    SELECT TOP 1 * 
    FROM inventoryTable 
    WHERE itemcode = 'FG 4751'
    ORDER BY quantity DESC
    

    【讨论】:

    • 它返回聚合函数错误,但我只需要删除 MAX() 就可以了,谢谢。
    【解决方案2】:
    SELECT * FROM inventoryTable 
    WHERE itemcode = 'FG 4751'
    ORDER BY MAX(quantity) DESC LIMIT 1
    

    【讨论】:

      【解决方案3】:

      理查德-

      不确定是否计划在某个时候将其用于多个项目代码。这可以使用窗口函数来实现 -

      WITH HIGH_RANK AS(
      SELECT 
          itemcode, 
          whsecode, 
          quantity,
          RANK(quantity) OVER (PARTITION BY itemcode ORDER BY quantity DESC) AS MAX_RANK
      FROM
          inventoryTable)
      
      SELECT
          itemcode,
          whsecode,
          quantity
      FROM HIGH_RANK
      WHERE MAX_RANK = 1
      

      -RANK(quantity) OVER (PARTITION BY itemcode ORDER BY quantity DESC) AS MAX_RANK

      在数量等于最大值的所有情况下都使用排名,如果您只想要一个值,请将排名交换为 ROW_NUMBER

      【讨论】:

        猜你喜欢
        • 2022-01-15
        • 2020-05-03
        • 2011-02-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-16
        • 2020-05-14
        相关资源
        最近更新 更多