I have 3 columns as below

col1 col2 price
abc 12345 10
abc 12345 10
bcd 45689 15
abc 78945 20
bcd 54782 13
def 12345 10
def 12345 10

I looking to get result as below.

col1 col2 count Amount
abc 12345,78945 2 30
bcd 45689,54782 2 28
def 12345 1 10

1 Answer

GROUP BY into array_agg with distinct and cardinality to count the length should produce required result:

WITH dataset (col1, col2) AS ( VALUES ('abc', 12345), ('abc', 12345), ('bcd', 45689), ('abc', 78945), ('bcd', 54782), ('def', 12345), ('def', 12345) ) --query select col1, array_agg(distinct col2) col2, cardinality(array_agg(distinct col2)) count from dataset group by col1 order by col1 -- for output ordering 

Output:

col1 col2 count
abc [12345, 78945] 2
bcd [45689, 54782] 2
def [12345] 1

If you need different formatting for col2 - use array_join.

5

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.