首页 > 解决方案 > sql; 将 MIN(price) 和 MAX(price) 连接到列中?

问题描述

我正在处理这样的 aws athena 查询:

SELECT 
    normalised_brand, 
    COUNT(DISTINCT merch1) merch1_distinct_count,
    COUNT(DISTINCT category_level_1) category_level_1_distinct_count,
    COUNT(*) product_distinct_count,
    MIN(effective_price) maxprice, 
    MAX(effective_price) minprice 
    -- CONCAT_WS(' - ', minprice, maxprice) price_range
    
FROM "db" 
WHERE product_gap = 'yes' AND store_name = 'petco'
group by normalised_brand

这将给出如下结果:

在此处输入图像描述

现在我将 maxprice 和 minprice 作为两个单独的列,但我想将它们组合成一列“价格范围”,其中 minprice 和 maxprice 由“-”字符串分隔,所以它看起来像这样:

price_range
3.99 - 5.33
2.11 - 9.99
2.22 - 2.22

我尝试通过添加 CONCAT 来做到这一点,但没有得到工作结果。我对 sql 很陌生,我想知道如何通过将 MAX() 和 MIN() 结果组合成一个字符串值来创建这个价格范围列。

此外,我可以向 SQL 添加逻辑,以便如果价格范围为零(例如 2.22 - 2.22 的情况,其中最高价格和最低价格相同)仅显示单个值而不是具有相同最高价格的价格范围/最小值?

最后一部分是一个延伸目标,首先我只是试图创建 price_range 列

标签: sqlprestoamazon-athena

解决方案


采用concat()

SELECT 
    normalised_brand, 
    COUNT(DISTINCT merch1) merch1_distinct_count,
    COUNT(DISTINCT category_level_1) category_level_1_distinct_count,
    COUNT(*) product_distinct_count,
    MIN(effective_price) maxprice, 
    MAX(effective_price) minprice 
    concat(cast(MIN(effective_price) as varchar(10)),'-',cast(MAX(effective_price) as varchar(10)))
FROM "db" 
WHERE product_gap = 'yes' AND store_name = 'petco'
group by normalised_brand

推荐阅读