Reputation: 45
Trying to combine results which are the following results on snowflake. I used SQL server before this and im confused that Snowflake can't use UNION statements? Has anyone with lots of Snowflake experience have a solution to this problem?
SELECT
PARSE_JSON(extra[0]['party'])[0]['trait1'] AS Trait1,
COUNT(Trait1) AS T1
FROM E_OT AS EOT
WHERE Trait1 != 'NULL'
GROUP BY Trait1
ORDER BY T1 DESC
UNION
SELECT
PARSE_JSON(extra[0]['party'])[0]['trait2'] AS Trait2,
COUNT(Trait2) AS T2
FROM E_OT
WHERE Trait2 != 'NULL'
GROUP BY Trait2
ORDER BY T2 DESC
Upvotes: 0
Views: 4369
Reputation: 21
Try this:
SELECT TRAIT1, T1 FROM ( SELECT PARSE_JSON(EXTRA[0]['PARTY'])[0]['TRAIT1'] AS TRAIT1, COUNT(TRAIT1) AS T1 FROM E_OT AS EOT WHERE TRAIT1 != 'NULL' GROUP BY TRAIT1 ORDER BY T1 DESC )
UNION
SELECT TRAIT2, T2 FROM ( SELECT PARSE_JSON(EXTRA[0]['PARTY'])[0]['TRAIT2'] AS TRAIT2, COUNT(TRAIT2) AS T2 FROM E_OT WHERE TRAIT2 != 'NULL' GROUP BY TRAIT2 ORDER BY T2 DESC )
Upvotes: 0
Reputation: 1269953
I think that what you are trying to do is simpler using grouping sets
:
SELECT COALESCE(PARSE_JSON(extra[0]['party'])[0]['trait1'],
PARSE_JSON(extra[0]['party'])[0]['trait2']
) AS Trait,
COUNT(*) AS T1
FROM E_OT AS EOT
GROUP BY GROUPING SETS ( (PARSE_JSON(extra[0]['party'])[0]['trait1']),
(PARSE_JSON(extra[0]['party'])[0]['trait2'])
)
ORDER BY T1 DESC;
I'm not sure what your WHERE
clause is doing. It should be returning an error unless there is a TRAIT1
column in the data.
Upvotes: 0
Reputation: 10079
The ORDER BY clause should be at the end:
SELECT
PARSE_JSON(extra[0]['party'])[0]['trait1'] AS Trait1,
COUNT(Trait1) AS T1
FROM E_OT AS EOT
WHERE Trait1 != 'NULL'
GROUP BY Trait1
UNION
SELECT
PARSE_JSON(extra[0]['party'])[0]['trait2'] AS Trait2,
COUNT(Trait2) AS T2
FROM E_OT
WHERE Trait2 != 'NULL'
GROUP BY Trait2
ORDER BY T1 DESC
https://docs.snowflake.com/en/sql-reference/operators-query.html#general-syntax
Upvotes: 2