【问题标题】:Select distinct count on field that has two different values within another field在另一个字段中具有两个不同值的字段上选择不同的计数
【发布时间】:2014-11-10 22:06:36
【问题描述】:

我有一张没有主键的表。它保存的电子邮件地址具有标记为“可用”或“不可用”的标志字段。

我要做的是计算只有“可用”标志的不同电子邮件地址,而不是计算可能有一行带有“可用”和“不可用”标志的不同电子邮件地址。

我应该把表放到另一个表中,然后用不同的查询开始删除吗?

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

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

感谢您的帮助!

乔什

【问题讨论】:

  • 但该字段只能设置为可用或不可用,不能同时设置?
  • SELECT email_id FROM my_table where flag = 'available' MINUS SELECT email_id FROM my_table where flag != 'unavailable';
  • @Begueradj,这是一张没有主键的表,表示重复记录
  • 您使用的是哪个 DBMS?后格雷斯?甲骨文?

标签: sql distinct


【解决方案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 放在外部查询中。

【讨论】:

    【解决方案2】:

    这个呢:

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-23
      • 2016-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多