GROUP BY dept,name 的意思,就是先按dqpt分组,如果出现dept相同的,再按name分组,也就是说除非出现dept和name都相同的记录才会合为一组,否则的话是不会合在一起的,这样的话显示出的name就只有一个了。
创新互联公司专业为企业提供竹溪网站建设、竹溪做网站、竹溪网站设计、竹溪网站制作等企业网站建设、网页设计与制作、竹溪企业网站模板建站服务,十载竹溪做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
你用现实生活中的例子来理解一下就很明白啦:比如说你们班上的同学如果按性别来分组,可以分为两组,如果按照姓名来分组,那就基本上有多少个同学就有多少组(除非有同名同姓的),那如果按性别和姓名同时分组呢,那分的组就是同学数的两倍了,即“男的张三”一组,“女的张三”一组,“男的李四”一组,“女的李四”一组……当然,这其中有一半的组是空的,剩下的也是每一组只有一个人啊!理解没有?
所以 Group by 后面的分组字段不是随便加的,多个字段的分组是需要排列组合的,分的组数会按几何级数增长!
补充说一句:本来按名字来分组就是个愚不可及的想法了!更何况还要加上其他分组条件,这样的话基本上就是一组只有一个了!
不知道你的表结构可以这样
假设 表名为students
专业名 字段为name
gener 代表性别 男生为1
sql语句如下
select name,count(if(genre =1,Id,null)) as man_count from students group name order by man_count desc
希望可以帮到你
你只有这一个student表,没有专业表么,如果只有这一个表,可以是
给你个排序函数,按指定的key排序
/**
* 将数组按指定的key排序
* @param array $arr 待排序数组
* @param string $key 按哪个key排序
* @param string $type 升序/降序,默认升序asc
* @return array 排序后的结果
*/
function array_sort($arr, $key, $type = 'asc') {
$keysvalue = $new_array = array ();
foreach ( $arr as $k = $v ) {
$keysvalue[$k] = $v[$key];
}
if ($type == 'asc') {
asort($keysvalue);
} else {
arsort($keysvalue);
}
foreach ( $keysvalue as $k = $v ) {
$new_array[] = $arr[$k];
}
return $new_array;
}