db2 sql,如何仅在一张表的同一查询中获取最小值和最大值?

Posted

技术标签:

【中文标题】db2 sql,如何仅在一张表的同一查询中获取最小值和最大值?【英文标题】:db2 sql, how to get min and max value only in the same query with one table? 【发布时间】:2021-02-21 22:09:20 【问题描述】:

用这个查询

SELECT distinct name,MIN(price) minprice, MAX(price) maxprice FROM cars where group='CNO' GROUP BY name HAVING MIN(price) > 1 order by minprice;

我得到了这个结果

NAME                                     MINPRICE    MAXPRICE   
---------------------------------------- ----------- -----------
Super CNO                                      20000       20000
CNO 340                                        40000       40000
CNO 110                                        60000       60000
CNO 790                                       100000      100000

如何仅获取 MIN 和 MAX 价格来查看最贵的汽车? 像这样的

NAME                                     MINPRICE    MAXPRICE   
---------------------------------------- ----------- -----------
Super CNO                                      20000       20000
CNO 790                                       100000      100000

当然,我们不知道查询前的最低和最高价格,所以 20000 到 100000 之间是无效的。

【问题讨论】:

【参考方案1】:

您可以使用窗口函数。您的结果显示 min 和 max 具有相同的值,这让我怀疑每个名称只有一行。如果是这样:

select *
from (
    select name, price,
        rank() over(order by price desc) rn_desc,
        rank() over(order by price) rn_asc
    from cars 
    where price > 1
) c
where 1 in (rn_asc, rn_desc)

如果你真的需要聚合:

select *
from (
    select name, min(price) min_price, max(price) max_price
        rank() over(order by max(price) desc) rn_desc,
        rank() over(order by min(price)) rn_asc
    from cars 
    group by name
    having min(price) > 1
) c
where 1 in (rn_asc, rn_desc)

【讨论】:

以上是关于db2 sql,如何仅在一张表的同一查询中获取最小值和最大值?的主要内容,如果未能解决你的问题,请参考以下文章

如何在一张表中添加两个查询?

SQL问题,怎么将一张表的某个字段更新为另一张表的字段

查询在一张表不在另外一张表的记录及效率探究

一张表的简单 SQL 查询

在oracle中怎么把一张表的数据插入到另一张表中

sql如何查询出一张表的的某个字段数据更换成另一张表的字段数据