【问题标题】:MySQL distinct countMySQL 不同计数
【发布时间】:2014-11-12 18:24:58
【问题描述】:

abc 表 -

ID
---
1
2
3

xyz 表 -

abc_id | flag 

--------------

1       |   0

1       |   1

2       |   0

3       |   0

3       |   0

我需要不同 abc_id 的计数,如果特定 abc_id 的 flag = 1,则不应计算该 id。 在上面的例子中,计数应该是 2。有什么办法可以实现吗?对不起,如果这个问题之前已经回答过或者很明显。提前谢谢^^

编辑:基本上我希望 abc_id = 1 在计数中被忽略,因为其中一个标志 = 1。我希望它足够清楚:|

【问题讨论】:

  • 请重新格式化您的帖子。我无法识别任何东西。
  • 一个特定 abc_id 的不同 abc_id 计数始终为 1。添加标志和计数将是 0 或 1。根据您的文字解释,计数为 2 是不可能的。您能否尝试改写您的问题以消除歧义?
  • 已编辑。我的错。第一篇文章。
  • 不应该是3吗?还是第一行 (abc_id=1; flag=0) 被忽略?

标签: mysql distinct


【解决方案1】:

主要问题是弄清楚你的意思,但我很确定就是这个。 :o)

计算不同的abc_ids,完全排除至少有一行被标记的ID。所以 id 1 被排除在外,因为它有一个标志。

您可以使用not in 条件解决此问题,以排除所有已标记的 ID。之后,您可以使用 count(distinct abc_id) 计算剩余的行数,以获取不同 id 的数量。

select
  count(distinct abc_id) as non_flagged_id_count
from
  xyz x1
where
  abd_id not in 
    (select x2.abc_id from xyz x2 where x2.flag = 1)

【讨论】:

  • 是的!这正是我想要的!谢谢你,先生。 ^^
【解决方案2】:
select count(distinct abc_id)
from xyz as x
left join (
select abc_id from xyz where flag = 1 
) as y using (abc_id)
where y.abc_id is null
;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-09
    • 1970-01-01
    • 2013-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-11
    相关资源
    最近更新 更多