按自定义规则对值进行分组

时间:2014-10-21 15:53:43

标签: mysql sql group-by

给出以下格式的表格:

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

也就是说,分组可以指定一条规则,它应该对范围甚至一组不同的值进行分组(因此我们可以将03的任何内容组合为一行)。

(以供参考,上面的查询实际上会产生输出)

Value   | Count
0       | 2
1       | 1
2       | 1
3       | 1

3 个答案:

答案 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)