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

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;

右连接查询:
与左连接相反,可以查询出表名2中的的所有记录,而表名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码进行计算的。

*/

id  name  dept  salary  edlevel  hiredate 
      1 张三 开发部 2000 3 2009-10-11
      2 李四 开发部 2500 3 2009-10-01
      3 王五 设计部 2600 5 2010-10-02
      4 王六 设计部 2300 4 2010-10-03
      5 马七 设计部 2100 4 2010-10-06
      6 赵八 销售部 3000 5 2010-10-05
      7 钱九 销售部 3100 7 2010-10-07
      8 孙十 销售部 3500 7 2010-10-06

例如,我想列出每个部门最高薪水的结果,sql语句如下:

select dept, max(salary) as maximum
from staff
group by dept

查询结果如下:
      dept  maximum 
      开发部 2500
      设计部 2600
      销售部 3500

您可能感兴趣的文章:

  • 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]
“属性名 ”指按照该字段值…

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

  

来看个实例mysql 如何 按name 分组 统计:
有多少个是和否,有多少个是和否,还有多少个

 

select子句中的列名必须为分组列或列函数。列函数对于group
by子句定义的每个组各返回一个结果。

Author

发表评论

电子邮件地址不会被公开。 必填项已用*标注