2014-03-02 39 views
0

我试图让每个组按功能组成的最大(选项)。每个组的最大数量()GROUP BY

假设我们有:

Name:  Option: 
Name1  o1 
Name1  o2 
Name1  o1 
Name1  o1 
Name1  o3 
Name2  o4 
Name2  o5 
Name2  o4 
Name3  o6 
Name3  o7 
Name3  o7 
Name3  o8 

最终结果预计:

Group:  max count of option: 
Name1  o1 
Name2  o4 
Name3  o7 
+0

你能选择的计数? – Strawberry

回答

1

要获得期权数量,你可以这样做:

select `group`, `option`, count(*) as cnt 
from table t 
group by `group`, `option`; 

有几种如何获得相应于最大值的选项。我认为,在这种情况下,最简单的是substring_index()/group_concat()方法:

select `group`, 
     substring_index(group_concat(`option` order by cnt desc), ',', 1) as maxoption 
from (select `group`, `option`, count(*) as cnt 
     from table t 
     group by `group`, `option` 
    ) tgo 
group by `group`; 
+0

谢谢。第二个查询完成了这项工作。第一个查询给出了每个名称的分组选项的数量。 –