Reputation: 215
I have a table that has product_name,groups(a,b,c,d)
I want to get all products that are in groups a,b
and d
but not c
.
I gave below query but I am not getting expected results
SELECT
prod_name,group, COUNT(group) AS Count
FROM
[prod.table]
WHERE
prod NOT IN('c')
AND prod IN('a'.'b','d')
From the above table, the query has to fetch only prod2 as it is not in group c.
I can do this easily using pivot table by just excluding group c
alone and including a,b,d
. I am looking for something similar.
Upvotes: 0
Views: 97
Reputation: 172944
Try below
SELECT
product, GROUP_CONCAT_UNQUOTED(gr) groups, COUNT(gr) AS cnt
FROM (
SELECT product, gr FROM
(SELECT 'Prod1' AS product,'a' AS gr),
(SELECT 'Prod1' AS product,'b' AS gr),
(SELECT 'Prod1' AS product,'c' AS gr),
(SELECT 'Prod1' AS product,'d' AS gr),
(SELECT 'Prod2' AS product,'a' AS gr),
(SELECT 'Prod2' AS product,'b' AS gr),
(SELECT 'Prod2' AS product,'d' AS gr),
(SELECT 'Prod3' AS product,'a' AS gr),
(SELECT 'Prod3' AS product,'b' AS gr),
(SELECT 'Prod3' AS product,'c' AS gr),
(SELECT 'Prod3' AS product,'d' AS gr)
)
GROUP BY product
HAVING NOT ',' + groups + ',' CONTAINS ',c,'
AND ',' + groups + ',' CONTAINS ',a,'
AND ',' + groups + ',' CONTAINS ',b,'
AND ',' + groups + ',' CONTAINS ',d,'
but I'm looking for count of products that are not in group c but in other groups.
SELECT
COUNT(product) AS products
FROM (
SELECT
product, GROUP_CONCAT_UNQUOTED(gr) groups
FROM (
SELECT product, gr FROM
(SELECT 'Prod1' AS product,'a' AS gr),
(SELECT 'Prod1' AS product,'b' AS gr),
(SELECT 'Prod1' AS product,'c' AS gr),
(SELECT 'Prod1' AS product,'d' AS gr),
(SELECT 'Prod2' AS product,'a' AS gr),
(SELECT 'Prod2' AS product,'b' AS gr),
(SELECT 'Prod2' AS product,'d' AS gr),
(SELECT 'Prod3' AS product,'a' AS gr),
(SELECT 'Prod3' AS product,'b' AS gr),
(SELECT 'Prod3' AS product,'c' AS gr),
(SELECT 'Prod3' AS product,'d' AS gr)
)
GROUP BY product
HAVING NOT ',' + groups + ',' CONTAINS ',c,'
AND ',' + groups + ',' CONTAINS ',a,'
AND ',' + groups + ',' CONTAINS ',b,'
AND ',' + groups + ',' CONTAINS ',d,'
)
Upvotes: 1