I am working on an aws athena query like so:
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
Which will give results like so:
Right now I have maxprice and minprice as two separate columns, but I want to combine them into one column “price range” which will have minprice and maxprice separated by a ” – ” string, so it would look something like this:
price_range
3.99 - 5.33
2.11 - 9.99
2.22 - 2.22
I tried doing this by adding CONCAT but wasn’t getting working results. Im very new to sql and am wondering how I could potentially create this price range column by combining the MAX() and MIN() results into a string value.
Also, I it possible to add logic to SQL so that if the price range is zero (like in the case of 2.22 – 2.22 where max price and minprice are identical) to just display a single value instead of a price range with identical max/min values?
this last part is a stretch goal, first im just trying to create the price_range column
Advertisement
Answer
Use 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