Sql 如何计算每列中独立出现的每个不同值的数量?

Sql 如何计算每列中独立出现的每个不同值的数量?,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

给定表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   |  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”?他们有关系吗?如果我有三个字母和两个数字呢?对不起,我的意思是说我想要的东西没有意义。抱歉搞混了,你能读懂我的心思。这是我的预期产出。直到我尝试了你的代码,我才真正知道我想要什么。非常感谢。干杯