mysql 组函数count的具体用法

问题描述

mysql 组函数count的具体用法

SELECT d.department,
COUNT(CASE e.sex WHEN e.sex='f' AND p.position !='主管' THEN p.id END) fq,
COUNT(CASE e.sex WHEN e.sex='f' AND p.position ='主管' THEN p.id END) fz,
COUNT(CASE e.sex WHEN e.sex='m' AND p.position !='主管' THEN p.id END) mq,
COUNT(CASE e.sex WHEN e.sex='m' AND p.position ='主管' THEN p.id END) mz,
COUNT(e.id) xj
FROM department d LEFT JOIN employ e ON d.id=e.deptid
LEFT JOIN position p ON e.positionid=p.id
GROUP BY d.id;

出现后面两个count统计不出来是什么原因?
为什么下面个可以查出来?
SELECT d.department,
COUNT(CASE WHEN e.sex='f' AND p.position !='主管' THEN p.id END) fq,
COUNT(CASE WHEN e.sex='f' AND p.position ='主管' THEN p.id END) fz,
COUNT(CASE WHEN e.sex='m' THEN CASE WHEN p.position !='主管' THEN p.id END END) mq
COUNT(CASE WHEN e.sex='m' THEN CASE WHEN p.position ='主管' THEN p.id END END) mz,
COUNT(e.id) xj
FROM department d LEFT JOIN employ e ON d.id=e.deptid
LEFT JOIN position p ON e.positionid=p.id
GROUP BY d.id

解决方案

SELECT CASE 1 WHEN 1=1 THEN 'a' else 'b' END;
SELECT CASE 2 WHEN 1=1 THEN 'a' else 'b' END;

是你的理解错误!上面的两行脚本 我想你以为都等于a吧?
其实思路就跟你的一样。也可以这样写

SELECT CASE 1=1 WHEN 1=1 THEN 'a' else 'b' END;
SELECT CASE 2=2 WHEN 1=1 THEN 'a' else 'b' END;

而结果却都是'a' 道理一样

时间: 2024-09-14 13:41:47

mysql 组函数count的具体用法的相关文章

mysql字符串函数CONCAT_WS与CONCAT()用法

CONCAT(str1,str2,-) 方法 CONCAT(str1,str2,-) 说明     返回结果为连接参数产生的字符串.如有任何一个参数为NULL ,则返回值为 NULL.如果所有参数均为非二进制字符串,则结果为非二进制字符串. 如果自变量中含有任一二进制字符串,则结果为一个二进制字符串.一个数字参数被转化为与之相等的二进制字符串格式:若要避免这种情况,可使用显式类型 cast, 例如: SELECT CONCAT(CAST(int_col AS CHAR), char_col).

mysql group_concat()函数用法总结_Mysql

本文实例讲述了mysql group_concat()函数用法.分享给大家供大家参考,具体如下: group_concat(),手册上说明:该函数返回带有来自一个组的连接的非NULL值的字符串结果.比较抽象,难以理解. 通俗点理解,其实是这样的:group_concat()会计算哪些行属于同一组,将属于同一组的列显示出来.要返回哪些列,由函数参数(就是字段名)决定.分组必须有个标准,就是根据group by指定的列进行分组. group_concat函数应该是在内部执行了group by语句,这

MySQL replace函数替换字符串语句的用法_Mysql

MySQL replace函数我们经常用到,下面就为您详细介绍MySQL replace函数的用法,希望对您学习MySQL replace函数方面能有所启迪. 最近在研究CMS,在数据转换的时候需要用到mysql的MySQL replace函数,这里简单介绍一下. 比如你要将表 tb1里面的 f1字段的abc替换为def UPDATE tb1 SET f1=REPLACE(f1, 'abc', 'def'); REPLACE(str,from_str,to_str) 在字符串 str 中所有出现

6.组函数(avg(),sum(),max(),min(),count())、多行函数,分组数据(group by,求各部门的平均工资),分组过滤(having和where),sql优化

 1组函数 avg(),sum(),max(),min(),count()案例: selectavg(sal),sum(sal),max(sal),min(sal),count(sal) from emp / 截图: 2 组函数和null在一起 案例:求员工的平均奖金 错误sql: select avg(comm) 方式1,sum(comm)/count(comm)方式2,sum(comm)/count(*) 方式3 from emp; 截图: 错误原因: select count(comm

[MySQL 5.6 ]count 不出来数据,如何通过函数进行转换呢?

1.表结构: mysql>show create table temp3daysdata\G *************************** 1. row *************************** Table: temp3daysdata Create Table: CREATE TABLE `temp3daysdata` ( `id` int(11) NOT NULL AUTO_INCREMENT, `borrow_id` int(11) DEFAULT NULL, `b

mysql聚合函数和分组

文章实例的数据表,来自上一篇博客<mysql简单查询>:http://blog.csdn.net/zuiwuyuan/article/details/39349611 一. 聚合函数 聚合函数,也叫做组合函数 求所有数据数 count不统计null ,统计的是记录数 SELECT COUNT(comm) FROM emp; # 查询emp表comm的总数 SELECT COUNT(*) FROM emp; # 查询emp表行记录的总数 SELECT COUNT(DISTINCT deptno)

mysql数据库replace、regexp的用法_Mysql

replace.regexp的用法 0 Comments | This entry was posted on Apr 08 2010 mysql replace用法 1.replace into replace into table (id,name) values('1′,'aa'),('2′,'bb') 此语句的作用是向表table中插入两条记录.如果主键id为1或2不存在 就相当于 insert into table (id,name) values('1′,'aa'),('2′,'bb

8. 分组和组函数

        组函数即<数据库函数>中提到的多行函数.每组记录作为整体计算,并返回一个结果,而不是每条记录返回一个结果. 常用的5个组函数:(以下expr均可以是变量.常量.数据列,无特别说明则数据类型可为任意类型) AVG([DISTINCT|all] expr):计算多行expr的平均值,数据类型:数值型. DISTINCT:不计算重复值:all(省略时效果相同):需要计算重复值. COUNT(*|[DISTINCT|all]expr,[expr...]):计算多行expr的总条数 *:

mysql having和group by 语句用法

利用Mysql中的 的聚合函数 count(*) 可以实现这个功能,例如需要查询data表中name出现次数最多的记录,可以先按照group by name分组,用count算出分组里的条数,再按照count排序:  代码如下 复制代码 select name,count(*) from data group by name order by count(*) DESC limit 1 不加limit限制将返回按照name重复次数排列的数据   在使用聚合函数之前,我们可以通过where对查询加