【问题标题】:Retaining additional Columns whilst using MIN or MAX with Group By在使用 MIN 或 MAX 和 Group By 时保留其他列
【发布时间】:2022-01-11 19:26:12
【问题描述】:

第一次在 stackoverflow 上发帖,SQL 新手(以及一般的任何代码)希望对我的 group by query 提供一些建议。根据下面的示例数据集,我希望对 ID/Name 进行分组并返回每个人的最小销售额。我遇到的困难是我还想返回与最低销售业绩相关的 REGION 和 QTR 信息。

ID NAME REGION SALES QTR.
1 Luke NORTH 45 1
2 Danny WEST 67 2
3 Elle NORTH 73 1
1 Luke WEST 32 4
2 Danny EAST 22 3
2 Danny EAST 18 2

所以基本上分组到如下表

ID NAME REGION MIN SALES QTR.
1 Luke WEST 32 4
2 Danny EAST 18 2
3 Elle NORTH 73 1

如果我将其他列引入组中,它会为每个人创建多行,如果我将它们排除在外,我会丢​​失相关数据。

任何人都可以帮忙,从网上看,我可能不得不自己重新加入表格,虽然我不知道该怎么做。

谢谢

汤姆

【问题讨论】:

  • 这能回答你的问题吗? SQL: How to find min value per group in sql?
  • 如果某人在 2 个不同时期的销售额相同且最低,那么预期的结果是什么?
  • 您需要添加您使用的DBMS和版本
  • @jarlh 很好,我没有考虑过,我需要进一步考虑 - 我认为这意味着在这些情况下丢失区域/QTR 信息以保留每人 1 行跨度>

标签: sql group-by min self-join


【解决方案1】:

计算子查询中的row_number,然后对其进行过滤。

SELECT ID, NAME, REGION, SALES AS MIN_SALES, QTR
FROM
(
    SELECT ID, NAME, REGION, SALES, QTR
    , ROW_NUMBER() OVER (PARTITION BY ID ORDER BY SALES ASC) AS rn
    FROM YourTable
) q
WHERE rn = 1
ORDER BY id

如果您想要 MAX_SALES,则按 row_number 中的销售额 DESC(降序)排序。

【讨论】:

  • 感谢您的解决方案
【解决方案2】:

https://dbfiddle.uk/?rdbms=oracle_18&fiddle=ebb85bdb1b93e668aadc688c18351746

  with data(ID, NAME,   REGION, SALES,  QTR) as
    (select 1,  'Luke', 'NORTH',45, 1 from dual union all
    select 2,   'Danny','WEST', 67, 2 from dual union all
    select 3,   'Elle', 'NORTH',73, 1 from dual union all
    select 1,   'Luke', 'WEST', 32, 4 from dual union all
    select 2,   'Danny','EAST', 22, 3 from dual union all
    select 2,   'Danny','EAST', 18, 2 from dual 
    ),
    minS as (select ID , min(Sales) minsales
    from data
    group by ID)
    Select data.id, data.name,data.region,data.sales "min sales" ,data.qtr from data
    join minS on minS.ID= data.Id
    and minS.minsales= data.sales
    order by data.id

【讨论】:

  • 谢谢,非常有帮助,dbfiddle 站点看起来也是我迭代代码以学习的好方法
猜你喜欢
  • 1970-01-01
  • 2019-03-21
  • 1970-01-01
  • 1970-01-01
  • 2017-12-07
  • 1970-01-01
  • 2020-07-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多