【发布时间】:2014-05-12 18:54:48
【问题描述】:
我需要获取表中每个值的计数。问题是我需要从一张表的 3 列中取出它。
(简化的)数据库表如下所示:
+---------+------+--------+------+
| Id | Col1 | Col2 | Col3 |
+---------+------+--------+------+
| 1 | a | a | |
| 2 | b | null | a |
| 3 | b | b | c |
| 4 | d | a | null|
| 5 | a | c | c |
+---------+------+--------+------+
这就是我需要的结果:
+-------+-------+
| Col | Count |
+-------+-------+
| a | 5 |
| b | 3 |
| c | 3 |
| d | 1 |
+-------+-------+
有什么建议吗?
编辑:我还想获得计数最高的 x 行的顶部,即使在通过 asc/desc 对 count 或 col 进行排序时,必须显示 10 HIGHEST。我发现当我按 Count desc 订购时,简单的限制 10 不起作用。然后我会得到 10 个最低值而不是最高值。
【问题讨论】:
-
这种问题是设计不佳的症状,但 UNION 会得到你想要的。
-
使用带有 1 列的
UNION ALL并在外部查询中计算值。 -
我知道这是糟糕的设计,但它不是我的数据库,我不允许更改数据库中的任何内容。
-
对于你的问题的第二部分,我建议你提供一个更具代表性的数据集和期望的结果。 Sqlfiddle 对此很有用。