'MySQL select row only if multiple rows exist in group
I am working with a database where multiple rows of data exist for the same related entity, in this case a user_id.
What I need to do is match user_ids with conditions on a per user basis rather than a per row basis..
For example, I need a list of users where they have rows with both:
meta_key = "utm_campaign" and meta_value = "Summer20222"
but also where they have
meta_key = "utm_medium" and meta_value = "qr_code"
for the same user_id.
Essentially, I'm trying to report How many users have the utm_campaign of "Summer2022" AND have the utm_medium of "qr_code" in this table
Solution 1:[1]
Aggregate and assert both key-value requirements:
SELECT user_id
FROM yourTable
GROUP BY user_id
HAVING SUM(meta_key = 'utm_campaign' AND meta_value = 'Summer20222') > 0 AND
SUM(meta_key = 'utm_medium' AND meta_value = 'qr_code') > 0;
Solution 2:[2]
SELECT user_id,
SUM(meta_key = 'utm_campaign' AND meta_value = 'Summer2022') as campaign,
SUM(meta_key = 'utm_medium' AND meta_value = 'qr_code') as qr_code
FROM sample_data
GROUP BY user_id
HAVING campaign > 0 AND qr_code > 0
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Tim Biegeleisen |
| Solution 2 | Salvino |

