首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在同一个查询中使用两个聚合函数- min和max

在同一个查询中使用两个聚合函数- min和max
EN

Stack Overflow用户
提问于 2019-03-05 08:59:42
回答 3查看 575关注 0票数 3

这是我产品表的数据-

代码语言:javascript
复制
product_id  category    discount
454           C-10       10 
357           C-10       9
64            C-10       10
294           C-11       17 
449           C-11       17
471           C-11       17 
89            C-11       12 
56            C-11       10

我想得到每个产品类别的最大折扣,如果任何一个类别有多个产品具有相同的折扣,则应该选择具有最小product_id的产品。

期望输出-

代码语言:javascript
复制
product_id  category    discount
64          C-10        10
294         C-11        17

我试过两次查询,但没有工作-

代码语言:javascript
复制
select category,min(product_id),max(discount)
from Product 
group by category

非常感谢你的帮助。谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-03-05 09:03:09

在这里,使用ROW_NUMBER很有帮助:

代码语言:javascript
复制
WITH cte AS (
    SELECT product_id, category, discount,
        ROW_NUMBER() OVER (PARTITION BY category
            ORDER BY discount DESC, product_id) rn
    FROM Product
)

SELECT product_id, category, discount
FROM cte
WHERE rn = 1;

或者,我们甚至可以在不使用子查询/CTE的情况下做到这一点:

代码语言:javascript
复制
SELECT TOP 1 WITH TIES product_id, category, discount
FROM Product
ORDER BY
    ROW_NUMBER() OVER (PARTITION BY category
        ORDER BY discount DESC, product_id);
票数 4
EN

Stack Overflow用户

发布于 2019-03-05 09:05:10

使用row_number()

代码语言:javascript
复制
select * from
(
select *,row_number() over(partition by category order by discount desc, poroduct_id asc) rn
from tablename
)A where rn=1

或者使用关联子查询

代码语言:javascript
复制
select * from tablename a where discount in 
  (select max(discount) from tablename b where a.category=b.category 
     having min(b.product_id)=a.product_id)
票数 1
EN

Stack Overflow用户

发布于 2019-03-05 09:10:07

使用外敷

代码语言:javascript
复制
with cte as    
(
select 454 as product_id, 'C-10'  as category, 10 as discount union all
select 357,'C-10',9 union all
select 64,'C-10',10 union all
select 294,'C-11',17 union all
select 449,'C-11',17 union all
select 471,'C-11',17 union all
select 89,'C-11', 12 union all
select 56,'C-11', 10 

) select distinct p1.category,a.product_id,a.discount
 from cte p1
 outer apply ( select top 1 p2.*
               from cte p2 where p1.category=p2.category  
                order by discount desc, product_id asc

             ) a 

输出

代码语言:javascript
复制
category    product_id   discount
C-10        64               10
C-11        294              17

演示链接

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54998930

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档