给出以下格式的表格:
Name | Value
A | 0
B | 0
C | 1
D | 2
E | 3
我如何以这种格式查询此表:
SELECT value,count(*) FROM table GROUP BY value
这样我们就产生了结果:
Value | Count
0.. 1 | 3
2 | 1
3 | 1
也就是说,分组可以指定一条规则,它应该对范围甚至一组不同的值进行分组(因此我们可以将0
或3
的任何内容组合为一行)。
(以供参考,上面的查询实际上会产生输出)
Value | Count
0 | 2
1 | 1
2 | 1
3 | 1
答案 0 :(得分:1)
使用案例构造:
SELECT
CASE WHEN value IN (0,1) THEN '0..1' ELSE CAST(value AS CHAR(10)) END as values,
count(*)
FROM mytable
GROUP BY CASE WHEN value IN (0,1) THEN '0..1' ELSE CAST(value AS CHAR) END;
答案 1 :(得分:0)
我想到了两个解决方案:
首先使用函数对值进行分组
SELECT some_function(value) v, count(*) c FROM table GROUP BY some_function(value);
另一种方法是使用组和组关系映射来连接映射表。
答案 2 :(得分:0)
如果要保留值列表,请使用GROUP_CONCAT和GROUP BY(值在()中)
SELECT GROUP_CONCAT(DISTINCT value) value, COUNT(value) count FROM table WHERE 1=1 GROUP BY (value IN (0,1)
以上不会给你另一个值,但这一个会。
SELECT GROUP_CONCAT(DISTINCT value) value, SUM(count) as count FROM (SELECT value, COUNT(value) as count FROM table WHERE 1=1 GROUP BY value) x GROUP BY IF(value IN (1,0),NULL,value)