一.查询各个部门的最高工资及姓名,其中薪资字段是字符串类型:

优化前:

SELECT
*
FROM
(SELECT
a.`deptno`, a.`sal`, a.`ename`
FROM
emp a
ORDER BY CONVERT(a.`sal`, SIGNED) DESC) aa
GROUP BY aa.deptno;

优化后:

SELECT
aa.`ename`, aa.`sal`, aa.`deptno`
FROM
emp aa,
(SELECT
a.`deptno`, MAX(CONVERT(a.`sal`, SIGNED)) max_sal
FROM
emp a
GROUP BY a.`deptno`) bb
WHERE aa.`deptno` = bb.deptno
AND aa.`sal` = bb.max_sal;

二.case when使用总结

case when两种语法及与聚合函数使用:
1.
SELECT
CASE
WHEN a.`accountChannel` = 'BSR' THEN '上饶银行'
WHEN a.`accountChannel` = 'BGZ' THEN '贵州银行'
WHEN a.`accountChannel` = 'JZ' THEN '丰付'
ELSE '其它'
END 类型
FROM
`jz_local_account` a
GROUP BY a.`accountChannel`;

2.
SELECT
CASE accountChannel
WHEN 'BSR' THEN '上饶银行'
WHEN 'BGZ' THEN '贵州银行'
WHEN 'JZ' THEN '丰付'
ELSE '其它'
END 类型
FROM `jz_local_account` a
GROUP BY a.`accountChannel`;

3.比如说一个学生表,有学生id,名字,老师id,来源(app或者pc) 我们有这样的一个需求 我们想知道每个老师有几个学生,并且这些学生里面 来自app的有几个 来自pc的有几个。
这个就有点麻烦了,要看每个老师下面有几个学生 肯定是将老师id分组 然后count(1) , 这个简单 但是 我们还要知道每个老师下面学生分别来自app几个 pc端几个 无疑还是要用到count 然后再搭配case when 的用法来判断

SELECT count(1) '数量',stu.tid,
COUNT(CASE WHEN ly = 'pc' then 1 END) pc,
COUNT(CASE WHEN ly = 'app' then 1 END) app
FROM stu GROUP BY tid

#意思就是说 只要ly=pc 就算符合一条 然后用count累加 后面的那个1 无关紧要,你写任意数字都可以 但是我们习惯上都写1 比如我们习惯上统计总数喜欢count(1)

Mysql--查询相关语句总结的更多相关文章

  1. mysql查询相关的命令解析

    特:不重启mysql 更新配置文件方法(不允许重启mysql实例或连接不上msyql服务器): gdb -p $(pidof mysqld) -ex "set max_connections ...

  2. mysql 查询select语句汇总

    数据准备: 创建表: create table students( id int unsigned primary key auto_increment not null, name varchar( ...

  3. mysql查询相关

    查询事务 SELECT * FROM information_schema.INNODB_TRX\G; 查询正在锁的事务 SELECT * FROM INFORMATION_SCHEMA.INNODB ...

  4. mysql查询相关问题

    前言 本文实现的这个需求其实十分普遍,举例来说,我们存在一个用户来源表,用来标记用户从哪个渠道注册进来.表结构如下所示… 其中 origin 是用户来源,其中的值有 iPhone .Android . ...

  5. mysql 查询相关命令

    1. 结果集按列展示 mysql  -u用户名  -p密码  -D 数据库名 -e  sql语句 示例:mysql   -uroot  -p123456  -D mysql -e select * f ...

  6. MySQL 的相关语句(增删改查)(SQLyog软件实现)

    -- 创建雇员表:emp CREATE TABLE emp( empno INT, -- 员工编号 ename ), -- 员工姓名 job ), -- 员工工作 mgr INT, -- 领导编号 h ...

  7. 【转载】MySQL查询阻塞语句

    select r.trx_id waiting_trx_id, r.trx_mysql_thread_Id waiting_thread,        r.trx_query waiting_que ...

  8. MySQL查询相关(初级)(全文重点)

    where 是约束条件 先找到表 from t1 where 条件 : 指的是把表里的数据,一条一条的记录取出来 然后 group by 分组, having 是过滤条件 指记录已经出来 聚合 cou ...

  9. oracle查询相关语句

    1,查询表空间使用情况select a.a1 表空间名称,c.c2 类型,c.c3 区管理,b.b2/1024/1024 表空间大小M,(b.b2-a.a2)/1024/1024 已使用M,subst ...

  10. mysql 查询死锁语句

    我们可以用下面三张表来查原因:        innodb_trx ## 当前运行的所有事务        innodb_locks ## 当前出现的锁        innodb_lock_wait ...

随机推荐

  1. [Usaco2018 Feb] New Barns

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=5192 [算法] 维护树的直径,在树上离一个点最远的点一定是一条直径的端点.     ...

  2. 2018.10.20 XMYZ Day1总结

    上周的忘写了……题目没有作者…… T1.backpack 期望得分100,实际得分100. 感觉我自己真是不如以前了……以前做这种题都是秒掉的,现在怎么想了10分钟啊…… 因为物品的体积和价值都非常小 ...

  3. snnu1120: 划分数(DP计数问题)

    1120: 划分数 Time Limit: 8 Sec  Memory Limit: 128 MBSubmit: 6  Solved: 3[Submit][Status][Web Board] Des ...

  4. Rails5终端基本命令

    更新: 2017/06/10 更新: 2017/06/21 增加迁移文件查看履历命令: rails db:migrate:status                           迁移文件生成 ...

  5. 2018SCin tsyzDay2 模拟赛-动态规划(简单的)

    内心OS:简单?????还是我太弱了. 期望得分:100+100+0+0+0+0+随机暴力的点==200 实际得分:0+100+10+0+10+0==120 您知道我第一题为什么错了嘛??文件在混乱中 ...

  6. spring-retry简单demo(附完整代码)

    重试 最近项目要用到重试.开始想自己写,后来想用RetryTemplate,最后想到既然项目用了springboot,还是直接集成spring-retry把. 代码 Application packa ...

  7. elasticsearch全文搜索

    1.创建索引 PUT 192.168.100.102:9200/news 2.创建mapping POST 192.168.100.102:9200/news/new/_mapping { " ...

  8. _bzoj1088 [SCOI2005]扫雷Mine【dp】

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1088 简单的状压dp(话说本题的编号减1,即1087,也是一道状压dp),不解释. #inc ...

  9. 洛谷 P2062 分队问题

    这题太毒了....一开始就是死活想不到,结果看了很多遍题解,重新做的时候还是做不出来.. 好像有一点被错误的题解误导了? #include<cstdio> #include<algo ...

  10. ACM_素数环(dfs)

    Problem Description: 如图所示,环由n个圆组成. 将自然数1,2,...,n分别放入每个圆中,并且两个相邻圆中的数字总和应为素数. 注意:第一个圆圈的数量应该始终为1. Input ...