选择具有唯一列值的行
Selecting rows with unique column values
我正在尝试编写一个 SQL 命令 returns emails
具有值
(track openers) 并且没有值 (redirect) 对于同一 table 中的列 action_type
。
email countrycode action_type
email1@domain.com GB track openers
email1@domain.com GB redirect
email2@domain.com GB track openers
email2@domain.com GB redirect
email3@domain.com GB track openers
email3@domain.com GB redirect
email4@domain.com GB track openers <<
DB Table Screenshot
我已经尝试过了,但没有成功,它继续显示正在加载...没有返回任何结果
SELECT DISTINCT LOWER(email) as `email`, `action_type`, `countrycode`
FROM `stats`
WHERE `email` NOT IN (SELECT `email` FROM `stats` WHERE `action_type` = 'redirect');
我建议聚合:
SELECT LOWER(email) as email
FROM `stats`
WHERE action_type in ('redirect', 'track openers')
GROUP BY LOWER(email)
HAVING MIN(action_type) = MAX(action_type) AND
MIN(action_type) = 'track openers';
这也是一种选择。在这里您可以查找所有具有操作类型 track openers
且不存在具有 redirect
操作类型的操作的电子邮件。
SELECT LOWER(email)
FROM stats s
WHERE s.action_type = 'track openers' AND NOT EXISTS(
SELECT ss.email
FROM stats ss
WHERE s.email = ss.email
AND ss.action_type = 'redirect'
);
稍微不那么冗长的选项
SELECT LOWER(email) as email
FROM `stats`
WHERE action_type in ('redirect', 'track openers') --optional if there are only 2 types
GROUP BY email
HAVING AVG(CASE WHEN action_type ='track openers' THEN 1 END) = 1;
我正在尝试编写一个 SQL 命令 returns emails
具有值
(track openers) 并且没有值 (redirect) 对于同一 table 中的列 action_type
。
email countrycode action_type
email1@domain.com GB track openers
email1@domain.com GB redirect
email2@domain.com GB track openers
email2@domain.com GB redirect
email3@domain.com GB track openers
email3@domain.com GB redirect
email4@domain.com GB track openers <<
DB Table Screenshot
我已经尝试过了,但没有成功,它继续显示正在加载...没有返回任何结果
SELECT DISTINCT LOWER(email) as `email`, `action_type`, `countrycode`
FROM `stats`
WHERE `email` NOT IN (SELECT `email` FROM `stats` WHERE `action_type` = 'redirect');
我建议聚合:
SELECT LOWER(email) as email
FROM `stats`
WHERE action_type in ('redirect', 'track openers')
GROUP BY LOWER(email)
HAVING MIN(action_type) = MAX(action_type) AND
MIN(action_type) = 'track openers';
这也是一种选择。在这里您可以查找所有具有操作类型 track openers
且不存在具有 redirect
操作类型的操作的电子邮件。
SELECT LOWER(email)
FROM stats s
WHERE s.action_type = 'track openers' AND NOT EXISTS(
SELECT ss.email
FROM stats ss
WHERE s.email = ss.email
AND ss.action_type = 'redirect'
);
稍微不那么冗长的选项
SELECT LOWER(email) as email
FROM `stats`
WHERE action_type in ('redirect', 'track openers') --optional if there are only 2 types
GROUP BY email
HAVING AVG(CASE WHEN action_type ='track openers' THEN 1 END) = 1;