选择在另一个字段中具有两个不同值的字段上的非重复计数

时间:2014-11-10 13:43:54

标签: sql distinct

我有一张没有主键的表。它包含一个标记为“可用”标记字段的电子邮件地址。或者'不可用'。

我要做的是计算只有“可用”字样的电子邮件地址。标记,并且不计算可能具有“可用”行的不同电子邮件地址。和'不可用'标志。

我应该将表放入另一个表并开始使用不同的查询进行删除吗?

示例:由于test@gmail.com有两条记录,它仍然是一个不同的电子邮件地址;但是,我不想数这个,因为它有两个可用的'和'不可用'标志。

电子邮件标记 test@gmail.com可用 test@gmail.com不可用

感谢您的帮助!

约什

2 个答案:

答案 0 :(得分:1)

您可以使用having子句执行此操作:

select email
from table t
group by email
having sum(case when flag = 'unavailable' then 1 else 0 end) = 0 and
       sum(case when flag = 'available' then 1 else 0 end) > 0;

如果您想要计算它们,只需将其用作子查询并将select count(*) from放在外部查询中。

答案 1 :(得分:0)

这个怎么样:

SELECT SUM( CASE WHEN av = 1 AND unav = 0 THEN 1 ELSE 0 END ) AS totalavailableemails  
FROM
(
    SELECT email, MAX(CASE WHEN  av = 1 THEN 1 ELSE 0 END) AS av, MAX(CASE WHEN  unav = 1 THEN 1 ELSE 0 END) AS unav
    FROM emails
    GROUP BY email
) AS table1

其中av是可用标记,unav是不可用标记

Demo here