sql;将最小值(price)和最大值(price)连接到列中?

xurqigkl  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(223)

我正在进行一个aws雅典娜查询,如下所示:

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作为两个独立的列,但是我想将它们组合成一个列“price range”,它将minprice和maxprice用“-”字符串分隔,所以它看起来像这样:

price_range
3.99 - 5.33
2.11 - 9.99
2.22 - 2.22

我试着通过添加concat来实现这一点,但没有得到有效的结果。我对sql非常陌生,我想知道如何通过将max()和min()结果组合成一个字符串值来创建这个price range列。
另外,我还可以向sql添加逻辑,以便如果价格范围为零(比如在2.22-2.22的情况下,max price和minprice是相同的),只显示单个值,而不是具有相同max/min值的价格范围?
最后一部分是一个延伸的目标,首先我只是想创建price\u range列

1aaf6o9v

1aaf6o9v1#

使用 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

jtw3ybtb

jtw3ybtb2#

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( MIN(effective_price),'-' , MAX(effective_price)) price_range

FROM "db" 
WHERE product_gap = 'yes' AND store_name = 'petco'
group by normalised_brand

http://sqlfiddle.com/#!9/85668/44

相关问题