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

优化前:

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. C++实现用两个栈实现队列

    /* * 用两个栈实现队列.cpp * * Created on: 2018年4月7日 * Author: soyo */ #include<iostream> #include<s ...

  2. 在 SharePoint 2013 中针对地理位置字段创建地图视图

    在 SharePoint 2013 中针对地理位置字段创建地图视图 了解如何通过在 SharePoint 2013 列表中使用地图视图来显示位置信息.您可以通过 SharePoint 用户界面 (UI ...

  3. 01_创建一个新的activity&activity配置清单文件

    今天开始学四大组件.今天是学Activity,然后是广播接收者,然后是服务,然后是内容提供者.四大组件,咱们一天一个.Activity就是跟用户交互的界面,大部分的应用都不会只有这么一个界面.创建多个 ...

  4. 【WIP】rails redis的使用

    创建: 2018/03/17 [任务表]TODO 注: mac版 %开头表示命令行命令 安装    安装 % brew install redis  确认版本 % redis-server --ver ...

  5. bzoj 4069: [Apio2015]巴厘岛的雕塑【dp】

    居然要对不同的数据写不同的dp= = 首先记得开long long,<<的时候要写成1ll<<bt 根据or的性质,总体思路是从大到小枚举答案的每一位,看是否能为0. 首先对于 ...

  6. bzoj 4819: [Sdoi2017]新生舞会【二分+最小费用最大流】

    如果\( b[i]==0 \)那么就是裸的费用流/KM,当然KM快一些但是为什么不写KM呢因为我不会打板子了 考虑二分答案,那么问题变成了判定问题. \[ ans=\frac {a_1+a_2+... ...

  7. 【插件开发】—— 10 JFace开发详解

    前文回顾: 1 插件学习篇 2 简单的建立插件工程以及模型文件分析 3 利用扩展点,开发透视图 4 SWT编程须知 5 SWT简单控件的使用与布局搭配 6 SWT复杂空间与布局搭配 7 SWT布局详解 ...

  8. Akka源码分析-Akka Typed

    对不起,akka typed 我是不准备进行源码分析的,首先这个库的API还没有release,所以会may change,也就意味着其概念和设计包括API都会修改,基本就没有再深入分析源码的意义了. ...

  9. QT5每日一学(五)QT布局管理器

    Qt中的布局管理器主要包括 QBoxLayout基本布局管理器 QGridLayout栅格布局管理器 QFormLayout窗体布局管理器 而基本布局管理器又分为QHBoxLayout水平布局管理器和 ...

  10. zoj 3649 lca与倍增dp

    参考:http://www.xuebuyuan.com/609502.html 先说题意: 给出一幅图,求最大生成树,并在这棵树上进行查询操作:给出两个结点编号x和y,求从x到y的路径上,由每个结点的 ...