Sql 如何计算每列中独立出现的每个不同值的数量?
给定表mytable,包含两列letter和numSql 如何计算每列中独立出现的每个不同值的数量?,sql,aggregate-functions,Sql,Aggregate Functions,给定表mytable,包含两列letter和num letter|num ------+------ a |1 a |1 b |1 b |2 我试过了 SELECT letter, count(letter), num, count(num) from mytable group BY letter, num; 但它又回来了 letter|count|num |count ------+-----+------+----- b | 1 | 1
letter|num
------+------
a |1
a |1
b |1
b |2
我试过了
SELECT letter, count(letter), num, count(num) from mytable group BY letter, num;
但它又回来了
letter|count|num |count
------+-----+------+-----
b | 1 | 1 | 1
a | 2 | 1 | 2
b | 1 | 2 | 1
而我想要的
letter|count|num |count
------+-----+------+-----
a | 2 | 1 | 3
b | 2 | 2 | 1
这可能吗?我可以在一个查询中完成吗?您可以将其更改为两个单独的聚合,如下所示
SELECT 'letter' as type, letter AS item, count(letter)
from mytable group BY letter
UNION ALL --CAST to be same type as letter
SELECT 'num', CAST(num AS varchar(100)), count(num)
from mytable group BY num;
预期的输出,
COUNT(num)
没有意义?不太有意义:如果您有14个不同的字母,但只有3个数字呢?您无法捕获此输出。你的例子之所以有效,是因为你每个人都有两个,这是有道理的,谢谢。没有道理。为什么预期答案的第一个记录会列出字母“a”和数字“1”?他们有关系吗?如果我有三个字母和两个数字呢?对不起,我的意思是说我想要的东西没有意义。抱歉搞混了,你能读懂我的心思。这是我的预期产出。直到我尝试了你的代码,我才真正知道我想要什么。非常感谢。干杯