COUNT DISTINCT条件

der*_*khh 89 sql

我想计算受特定条件限制的列中不同项目的数量,例如,如果表格如下:

tag | entryID
----+---------
foo | 0
foo | 0
bar | 3
Run Code Online (Sandbox Code Playgroud)

如果我想将不同标签的数量计为"标签计数"并在同一个表中将条目ID> 0的不同标签的数量计为"正标签计数",我该怎么办?

我现在从两个不同的表中计算,在第二个表中我只选择了entryID大于零的那些行.我认为应该有一种更紧凑的方法来解决这个问题.

nta*_*lbs 223

你可以试试这个:

select
  count(distinct tag) as tag_count,
  count(distinct (case when entryId > 0 then tag end)) as positive_tag_count
from
  your_table_name;
Run Code Online (Sandbox Code Playgroud)

第一个count(distinct...)很容易.第二个看起来有点复杂,实际上与第一个相同,只是你使用了case...when子句.在该case...when子句中,您只过滤正值.零和负值将是null和不包括在计数中.

这里要注意的一件事是,这可以通过阅读一次表来完成.当看起来你必须读两次或更多相同的表时,实际上可以通过在大多数时间读取一次来完成.因此,它将以更少的I/O更快地完成任务.

  • 但那么positive_tag_count也会有所区别吗? (2认同)