我有一张表,我需要在其中返回两件事(最好使用一个查询):
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。
先感谢您。
只需使用条件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)