我正在使用WinSQL在表上运行查询来计算文字字符串的出现次数。当我试图对一组特定的字符串进行计数时,我仍然想看看某些值是否返回0.例如:
select letter, count(*)
from table
where letter in ('A', 'B', 'C')
group by letter
让我们知道' A'发生3次,' B'发生0次,并且' C'发生5次。我希望有一个表返回原样:
letter count
A 3
B 0
C 5
但是,该表永远不会返回一个0计数的行,结果如下: 字母数 A 3 C 5
我环顾四周,看到一些文章提到了连接的使用,但是我没有运气正确地返回一个看起来像第一个例子的表。
答案 0 :(得分:0)
您可以创建一个内嵌表格,其中包含您查找的所有字母,然后LEFT JOIN
您的表格:
select t1.col, count(t2.letter)
from (
select 'A' AS col union all select 'B' union all select 'C'
) as t1
left join table as t2 on t1.col = t2.letter
group by t1.col
答案 1 :(得分:0)
在许多平台上,您现在可以使用values语句而不是union all来创建“in-line”表 - 就像这样
select t.letter, count(mytable.letter)
from ( values ('A'),('B'),('C') ) as t(letter)
left join mytable on t.letter = mytable.letter
group by t.letter
答案 2 :(得分:-1)
我对WinSQL并不熟悉,但如果你在某个表格的最左边的列中没有你想要的值,那就不太好了。如果你这样做,你可以使用左连接和条件。没有它,你可以这样做:
SELECT all_letters.letter, IFNULL(letter_count.letter_count, 0)
FROM
(
SELECT 'A' AS letter
UNION
SELECT 'B' AS letter
UNION
SELECT 'C' AS letter
) all_letters
LEFT JOIN
(SELECT letter, count(*) AS letter_count
FROM table
WHERE letter IN ('A', 'B', 'C')
GROUP BY letter) letter_count
ON all_letters.letter = letter_count.letter