mysql 计算其他列中不同值的列值

Mir*_*ror 3 mysql sql

我有一张表,我需要在其中返回两件事(最好使用一个查询):
1)每个日期的唯一 ID 计数
2)otherfield = "-" 表示唯一 ID 的行数。这意味着,如果同一天的 id 在 中输入值“-”的两倍otherfield,我希望它把它算作一。

示例表:

date | id | otherfield
----------
date1 | f  | abc
date1 | p  | -
date1 | p  | -
date2 | f  | abc
date2 | d  | dee
Run Code Online (Sandbox Code Playgroud)

应该返回表:

date1 | 2 | 1
date2 | 2 | 0
Run Code Online (Sandbox Code Playgroud)

目前我正在使用:

SELECT date, COUNT(DISTINCT `id`) AS id, SUM(IF(otherfield = '-', 1,0)) AS `undeclared` FROM mytable GROUP BY date
Run Code Online (Sandbox Code Playgroud)

但这总结了 otherfield 的所有值,将 id='p' 的条目计数两次,我希望它只计算不同的 id。

先感谢您。

Gor*_*off 5

只需使用条件count distinct

select date, count(distinct `id`) as num_ids, 
       count(distinct case when otherfield = '-' then id end) as undeclared
from mytable 
group by date;
Run Code Online (Sandbox Code Playgroud)