简言之的mysql教程 分组总计语句实例代码/*id name code_id code_name
is_true score1 张三 1 帅气 是 52 张三 2 阔气 是 43 张三 1 帅气 是 44
张三 2 阔气 否 3 5 李四 1 帅气 是 56 李四 2 阔气 是 3

将 where 子句与 group by 子句一同行使

精解MySQL中的分组查询与连接查询语句,详细明白mysql

分组查询 group by group by 属性名 [having 条件表明式][ with rollup]
“属性名 ”指依据该字段值实行分组;“having 条件发挥式
”用来界定分组后的显得,满足条件的结果将被显示;with rollup
将会在富有记录的终极加上一条记下,该记录是地点装有记录的总量。

1)单独使用
group by 单独选取,查询结果只展现一个分组的一条记下。
实例:

select * from employee group by sex;

将只显示孩子两条记下。

2)与group_concat()函数一起行使
每一个分组中指定字段值都来得出来
实例:

select sex,group_concat(name) from employee group by sex;

来得结果中“女”会显得全部sex为“女”的名字name

sex | group_concat(name)
女 | 小红,小兰
男 | 张三,王五,王六

3)与聚焦函数一齐行使
实例:

select sex,count(sex) from employee group by sex;

结果:

sex | count(num)
女 | 1
男 | 3

count()为计算个数的点子。

4)与having一同利用
“having条件表明式”,能够约束出口结果。唯有知足条件表明式的结果才显得。
实例:

select sex,count(sex) from employee group by sex having count(sex) >= 3;

结果:

sex | count(sex)
男 | 3

“having条件表明式”成效于分组后的记录。

5)按多字段张开分组

select * from employee group by d_id,sex;

查询结果先按d_id分组,再按sex进行分组

6) 与with rollup一齐行使
运用with
rollup将会在具有记录的最后加上一条记下,那条记下是地点装有记录的总额
实例:

select sex,count(sex) from employee group by sex with rollup;

结果:

sex | count(sex)
女 | 1
男 | 5
null | 6

即使是字符串的话,譬如姓名就能变卦“张三,李四,王五”那种类型的结果,即name总和。

接二连三查询 将七个及五个以上的表连接起来采纳所需数据。

1)内三番五次查询:
当五个表中有所同等意义的字段值相等时,就询问出该条记录。
实例:

复制代码 代码如下:

select num,name,employee.d_id,age,d_name from employee,department
where employee.d_id = department.d_id

因字段名相通,所以取d_id字段值时最棒钦点哪张表的字段。

2)外接连查询
select 属性名列表 from 表名1 left|right join 表名2 on
表名1.属性名1=表名2.属性名2;
左连接查询:
进行左连接查询时,能够摸清表名1中所指的表中全数记录。而表名2所指表中,只可以查询出万分的笔录。
实例:

复制代码 代码如下:
select num,name,employee.d_id,age,d_name from employee left join
department on employee.d_id = department.d_id;

右连接查询:
与左连接相反,能够查询出表名第22中学的的持有记录,而表名1中所指的表中,只询问出合营的笔录。

PS:使用集结函数查询 集结函数蕴含count(),sum(),avg(),max()和min()。
1)count()函数
总括记录条数
实例:

select count(*) from employee;

与group by一齐利用

select d_id,count(*) from employee group by d_id;

上述语句会先分组后总括。

2) sum()函数
sum()函数是求和函数
实例:

select num,sum(score) from grade where num= 1001;

select num,sum(score) from grade group by num;

sum()只好计算数值类型字段。
3)avg()函数
avg()函数是求平均值函数。
实例:

select avg(age) from employee;

select course,avg(score) from group by course;

4)max(),min()函数
求最大值和微小值。
实例:
select max(age) from employee;
select num,course,max(score) from grade group by course;
对此字符串的最大值难题,max()函数是应用字符对应的ascii码举行测算的。

当数码再度的时候分组才有意义。

来看个实例mysql 如何 按name 分组 计算:
有多少个是和否,某些许个是和否,还会有微微个

分组查询能够在产生组和计量列函数此前全数消亡非节制行的正式 where
子句。必需在group by 子句在此之前线指挥部定 where 子句

你可能感兴趣的随笔:

  • MySQL中对表连接查询的回顾优化学科
  • MySQL中挑汴京的多表连接查询教程
  • 经文mysql连接查询例题
  • 详整MySql基本查询、连接查询、子查询、正则表明查询
  • MySQL笔记之连接查询详明
  • MySQL查询优化:连接查询排序limit(join、order by、limit语句卡塔尔国介绍
  • MySQL查询优化:用子查询替代非主键连接查询实例介绍
  • MySQL查询优化:连接查询排序浅谈
  • MySQL中distinct与group by语句的一些相比较及用法疏解
  • MySQL中Distinct和Group By语句的着力选拔教程

分组查询 group by group by 属性名 [having 条件表明式][ with rollup]
“属性名 ”指根据该字段值…

注意点:WHERE和HAVING的区别

*/

 

  • WHERE:是在实施GROUP
    BY操作此前开展的过滤,表示从全部数据里面筛选出一部分的数目,在WHERE之中不能够利用总计函数;
  • HAVING:是在GROUP
    BY分组之后的重复过滤,可以在HAVING子句中选取总计函数;

select name, sum(if(code_name=’帅气’ and is_true=’是’,1,0)),
sum(if(code_name=’帅气’ and is_true=’否’,1,0)),
sum(if(code_name=’阔气’ and is_true=’是’,1,0)),
sum(if(code_name=’阔气’ and is_true=’否’,1,0)), count(*)from
table1group by name

$result = mysql教程_query(“select groups教程,name,goods from table
group by groups,name order by name”);
$arr = array();
$i = 0;
while($row = mysql_fetch_array($result)){
$arr[] = $row;
}

$m = $i – 1;
foreach($arr as $k=>$v){
if($v[$i][‘groups’] <> $v[$m][‘groups’]){
echo ‘分割符号’;
}
echo $v[‘name’],$v[‘goods’];
}

示例:

相关文章