精华内容
下载资源
问答
  • 四、 用SQL解决业务问题 4.1 用SQL解决业务问题思路 理解清楚业务问题(找出关键点,翻译为大白话) 捋顺分析思路 写出对应的SQL子句 比如计算各科的平均成绩(和上面思路对应): 计算每门课程的平均成绩 分析思路...

    一、汇总分析

    8e604fb62383c7db5be14f65d1a9b4fc.png
    图1 常见的汇总函数

    1.1 COUNT函数(忽略Null值)

    SELECT COUNT(列名)
    FROM 表名;
    -- COUNT*不忽略NULL值
    SELECT COUNT(*)
    FROM 表名;
    -- 去掉重复值
    SELECT COUNT(DISTINCT 列名)
    FROM 表名;

    1.2 SUM函数

    -- 对某列数据求和,只能对数值类型的列计算
    SELECT SUM(列名)
    FROM 表名;

    1.3 AVG函数

    -- 对某列数据求平均,只能对数值类型的列计算
    SELECT AVG(列名)
    FROM 表名;

    1.4 MAX,MIN函数

    -- 求某列数据的最大值,最小值
    SELECT MAX(列名),MIN(列名)
    FROM 表名;

    二、分组(GROUP BY)

    2.1 SQL书写顺序

    SELECT 列名
    FROM 表名
    WHERE 行筛选条件
    GROUP BY 列名;

    2.2 SQL运行顺序

    -- SQL运行顺序
    ④SELECT 列名
    ①FROM 表名
    ②WHERE 筛选条件
    ③GROUP BY 列名;
    1. FROM 从哪个表中查找数据
    2. WHERE 查询出符合条件的
    3. GROUP BY 对查出的数据分组
    4. SELECT 对分组后的每个组应用函数+组合结果

    三、对分组结果指定条件(HAVING)

    -- 序号代表运行顺序
    ⑤SELECT 列名
    ①FROM 表名
    ②WHERE 行筛选条件
    ③GROUP BY 列名
    ④HAVING 分组的指定条件;

    四、 用SQL解决业务问题

    4.1 用SQL解决业务问题思路

    • 理解清楚业务问题(找出关键点,翻译为大白话)
    • 捋顺分析思路
    • 写出对应的SQL子句

    比如计算各科的平均成绩(和上面思路对应):

    • 计算每门课程的平均成绩
    • 分析思路
    SELECT 查询结果
           [每门课的课程号:分组,平均成绩:AVG(成绩)]
    FROM 从哪张表中查找数据[成绩表:score]
    WHERE 查询条件[无]
    GROUP BY 分组[每门课程:按照课程号分组]
    HAVING 指定分组条件[没有];
    • 对应的SQL语句
    SELECT 课程号,AVG(成绩)
    FROM score
    GROUP BY 课程号;

    五、对查询结果排序(ORDER BY)

    • 降序(DESC):从大到小
    • 升序(ASC):从小到大(默认
    • 空值(null)排序在最前面

    如果数据库的字符集编码是utf-8,汉字排序并不是按照字母顺序。如果编码是gbk,汉字排序是按照字母顺序。

    5.1 从查询结果中取出指定行:LIMIT

    -- 从查询结果中取出前2行数据
    SELECT *
    FROM 表名
    LIMIT 2;

    5.2 SQL运行顺序

    ⑤SELECT 查询结果
    ①FROM 从哪张表中查找数据
    ②WHERE 查询条件
    ③GROUP BY 分组
    ④HAVING 对分组结果指定条件
    ⑥ORDER BY 对查询结果排序
    ⑦LIMIT 从查询结果中取出指定行

    六、看懂报错信息

    daa93cb73c7780552173083549a03a67.png
    图1 学会看报错信息

    常见错误(每个数据库规则不同,有的支持这个语法,有的却不支持,MySQL能运行就说明支持)

    6.1 在GROUP BY中使用了SELECT里的别名

    从运行顺序那里可知,GROUP BY子句在SELECT子句前运行,别名是在SELECT子句中设置的,GROUP BY还不知道,所以会报错(有的不会报错)。

    6.2 在WHERE子句中使用汇总函数

    WHERE是行筛选条件,汇总函数的对象是列。汇总函数要对全列数据进行计算,因而使用它的前提是:结果集已经确定!而WHERE子句还处于“确定”结果集的过程中,因而不能同时使用,HAVING子句能。

    6.3 字符串类型的数字

    字符串类型和数据类型的排序方式不同,使用时要注意。

    七、案例题解析

    原始表格

    294ee67ac339a1923511d463d38ea867.png
    图2 查询参考表格

    7.1 汇总分析

    查询已选课程的学生人数

    /*
    大白话:查询有多少人选了课程
    SELECT 学号,去掉score表中重复的学号
    */
    SELECT COUNT(DISTINCT 学号)
    FROM score;

    4d5a866906a56f5482daef78ca9677e1.png
    图2 查询结果

    7.2 分组

    (1)查询各科成绩最高和最低的分数,以课程号,最高分,最低分显示。

    /*
    分析思路
    SELECT 查询结果 [课程号,最高分:MAX(成绩),最低分:MIN(成绩)]
    FROM 从哪张表中查找数据 [成绩表score]
    WHERE 查询条件 [没有]
    GROUP BY 分组[各科成绩:每门课程的成绩,按课程号分组]
    */
    SELECT 课程号,MAX(成绩),MIN(成绩)
    FROM score
    GROUP BY 课程号;

    (2)查询每门课程被选修的学生数

    /*
    分析思路
    SELECT 查询结果 [课程号,选修该课程的学生数:COUNT]
    FROM 从哪张表中查找数据 [成绩表score]
    WHERE 查询条件 [没有]
    GROUP BY 分组[每门课程:按课程号分组];
    */
    SELECT 课程号,COUNT(学号)
    FROM score
    GROUP BY 课程号;

    7.3 分组结果的条件

    (1)查询平均成绩大于60分学生的学号和平均成绩

    /*
    通俗翻译:
    平均成绩:计算每个学生的平均成绩
    涉及“每个”就是要分组了
    对分组结果指定条件:平均成绩大于60分
    
    分析思路
    SELECT 查询结果 [学号,平均成绩:AVG]
    FROM 从哪张表中查找数据 [成绩表score]
    WHERE 查询条件 [没有]
    GROUP BY 分组[按学号分组]
    HAVING 对分组结果指定条件[平均值大于60]
    */
    SELECT 学号, AVG(成绩)
    FROM score
    GROUP BY 学号
    HAVING AVG(成绩)>60;

    (2)查询至少选修两门课程的学生学号

    /*
    问题解析:
    第一步:计算出每个学生的选课数量,按学号分组
    第二步:至少两门选修课:对应每个学生的选修课程数目>=2,对分组结果指定条件
    
    分析思路
    SELECT 查询结果 [学号,每个学生选课数目:COUNT]
    FROM 从哪张表中查找数据 [课程的学生学号:score]
    WHERE 查询条件 [至少选修两门课程,要用分组计算每个学生的选课数量,用不到WHERE子句]
    GROUP BY 分组[按学号分组,因为是统计每个学生]
    HAVING 对分组结果指定条件[至少选修两门课程]
    */
    SELECT 学号, COUNT(课程号) AS 选修课程数目
    FROM score
    GROUP BY 学号
    HAVING COUNT(课程号)>=2;

    (3)查询同名同姓学生名单并统计同名人数

    /*
    问题解析:
    第一步:找出姓名相同的学生,每个姓名对应的学生人数
    怎么算姓名相同?姓名分组后人数>=2
    
    分析思路
    SELECT 查询结果 [姓名,人数:COUNT(*)]
    FROM 从哪张表中查找数据 [学生表:student]
    WHERE 查询条件 [没有]
    GROUP BY 分组[姓名相同:按姓名分组]
    HAVING 对分组结果指定条件[姓名相同:COUNT(*)>=2]
    */
    SELECT 姓名, COUNT(*) AS 人数
    FROM student
    GROUP BY 姓名
    HAVING COUNT(*)>=2;

    7.4 对查询结果排序

    (1)查询不及格的课程并按课程号从大到小排列

    /*
    分析思路
    SELECT 查询结果 [课程号]
    FROM 从哪张表中查找数据 [课程号:score]
    WHERE 查询条件 [不及格:成绩<60]
    GROUP BY 分组[没有]
    HAVING 对分组结果指定条件[没有]
    ORDER BY 对查询结果排序[课程号从大到小:降序(DESC)]
    */
    SELECT 课程号
    FROM score
    WHERE 成绩<60
    ORDER BY 课程号 DESC;

    (2)查询每门课程的平均成绩,结果按平均成绩升序排序,平均成绩相同时,按课程号降序排序

    /*
    分析思路
    SELECT 查询结果 [课程号,平均成绩:AVG]
    FROM 从哪张表中查找数据 [score]
    WHERE 查询条件 []
    GROUP BY 分组[课程号:因为是每门课程]
    HAVING 对分组结果指定条件[没有]
    ORDER BY 对查询结果排序[平均成绩升序(ASC),平均成绩相同时,按课程号降序排序(DESC)]
    */
    SELECT 课程号, AVG(成绩) AS 平均成绩
    FROM score
    GROUP BY 课程号
    ORDER BY 平均成绩 ASC, 课程号 DESC;

    (3)检索课程号为“0004”且分数小于60的学生学号,结果按分数降序排序

    /*
    分析思路
    SELECT 查询结果 [学号]
    FROM 从哪张表中查找数据 [score]
    WHERE 查询条件 [课程号=“0004”且成绩小于60分]
    GROUP BY 分组[无]
    HAVING 对分组结果指定条件[没有]
    ORDER BY 对查询结果排序[成绩降序(DESC)]
    */
    SELECT 学号
    FROM score
    WHERE 课程号='0004' AND 成绩<60
    ORDER BY 成绩 DESC;

    (4)统计每门课程的学生选修人数(超过2人的课程才统计),要求输出课程和选修人数,查询结果按人数降序排序,若人数相同,按课程号升序排序

    /*
    分析思路
    SELECT 查询结果 [课程号,选修人数(学号):COUNT]
    FROM 从哪张表中查找数据 [score]
    WHERE 查询条件 []
    GROUP BY 分组[课程号:因为是每门课程]
    HAVING 对分组结果指定条件[超过2人的课程]
    ORDER BY 对查询结果排序[选修人数降序(DESC),选修人数相同时,按课程号升序排序(ASC)]
    */
    SELECT 课程号, COUNT(学号) AS 选修人数
    FROM score
    GROUP BY 课程号
    HAVING COUNT(学号)>2
    ORDER BY 选修人数 DESC, 课程号 ASC;

    (5)查询两门以上不及格课程学生的学号和不及格课程的平均成绩

    /*
    分解题目:
    1)[两门以上][不及格课程]是限制条件
    2)[学生学号和平均成绩],是每个学生的平均成绩,显示学号,平均成绩
    过程:
    第一步:得到每个学生的平均成绩:学号,平均成绩
        SELECT 查询结果 [学号,平均成绩:AVG]
        FROM 从哪张表中查找数据 [score]
        WHERE 查询条件 [无]
        GROUP BY 分组[每个学生,所以按学号分组]
        HAVING 对分组结果指定条件[无]
        ORDER BY 对查询结果排序[无]
    第二步:加上限制条件:[两门以上]+[不及格课程]
        SELECT 查询结果 [课程号:COUNT]
        FROM 从哪张表中查找数据 [score]
        WHERE 查询条件 [成绩<60]
        GROUP BY 分组[每个学生,所以按学号分组]
        HAVING 对分组结果指定条件[课程数目>2]
        ORDER BY 对查询结果排序[无]
    */
    SELECT 学号, AVG(成绩) AS 平均成绩, COUNT(课程号)
    FROM score
    WHERE 成绩<60
    GROUP BY 学号
    HAVING COUNT(课程号)>2;

    八、感想

    初次尝试写稍微复杂的SQL语句,对我来说还是很吃力的。整个过程就是看不懂题 ->题懂了,不知道从哪入手 -> 能想到SQL框架,但是子句细节处不会写。特别是WHERE和HAVING,经常不知道用哪个。

    唯一的解决办法就是练习!练习!练习!

    end.

    展开全文
  • sql降序,升序

    千次阅读 2015-03-26 14:49:27
    降序 SELECT * FROM kc ORDER BY cpbh DESC升序 SELECT * FROM kc ORDER BY cpbh asc
    降序
    SELECT *
    FROM kc
    ORDER BY cpbh DESC
    
    升序
    SELECT *
    FROM kc
    ORDER BY cpbh asc
    展开全文
  • 每日进步的第二天,持续日更,做产品助理的斜杠青年编辑搜图公众号:轻松自由7799第一天的SELECT……FEOM……是最常用的查询语句,每日进步,写一条SQL语句第二天的group by则是方便快捷分组语句数据分析之小白的第...

    每日进步的第二天,持续日更,做产品助理的斜杠青年

    242454ccbeb847fb4c8b28be0025d3b3.png

    编辑搜图

    公众号:轻松自由7799

    第一天的SELECT……FEOM……是最常用的查询语句,每日进步,写一条SQL语句

    第二天的group by则是方便快捷分组语句数据分析之小白的第二条sql语句

    今天带来的是ORDER BY---排序语句

    为了对检索出的结果进行排序,一般我们就会用到ORDER BY了,它的含义是:

    根据字段……进行排序。

    比如:

    order by name---根据姓名排序

    order by price---根据价格排序

    order by price name--先根据价格再根据名字进行排序(这种情况下只有价格相同的情况才会根据姓名进行排序)

    需要注意的是,order by语句是默认进行升序排序的,如果要进行降序排序那么需要在排序对象字段的后面加上DESC.

    比如执行order by price desc那么就可以对数据进行降序排列。

    结合前两天的语句整理如下:

    SELECT employee_num,employee_group,bank_holder

    FROM `hzero_platform`.`hpfm_employee_expand` 

    where employee_id>10 

    GROUP BY employee_group

    ORDER BY employee_group

    试着读一下这段语句的含义li留言吧

    另外,如果是order by price name DESC,那么将会根据哪个字段如何排序呢?

    展开全文
  • sql 降序查询问题

    2014-03-31 16:36:10
    请问各位如何查询降序排序中排第二的数据? 例如 id name 1 a 2 b 3 c 4 d 5 e 按id降序查询后我需要去得id为4的数据,请问sql查询语句怎么写?
  • 解决方法:order by update_time desc NULLS LAST 示例: 修改前: select * from dict order by create_time desc,update_time desc 修改后: ...select * from dict order by create_time desc,update_time desc...

    解决方法:order by update_time desc NULLS LAST

    示例:

    修改前:

    select * from dict order by create_time desc,update_time desc

    修改后:

    select * from dict order by create_time desc,update_time desc NULLS LAST
    展开全文
  • 源数据表(student)源数据表(score)练习1:汇总分析5大汇总函数:count、sum、avg、max、min1)查询课程编号为“0002”的总成绩2)查询选了课程的学生人数利用distinct把重复的学号...理解SQL运行顺序1)查询平均...
  • sql 降序排序时,null排在后面

    千次阅读 2011-02-22 08:04:00
    本文引用:http://tech.ddvip.com/2009-09/1253376028133597.html<br /><br />SELECT [ID]  FROM [demo].[dbo].[Orders] Order By CASE WHEN ID IS NULL THEN 1 ELSE 0 END  这样的话,就可以看到...
  • sql时间降序_SQL总结

    2020-11-21 06:54:28
    通过学号分组取出每个学号对应的成绩 五、如何提高SQL的查询效率 数据量大的情况下 1、select字句尽量避免使用,*查询的是所有数据,只select需要的列的数据。 2、where字句中比较符号左侧避免函数,这会导致数据库...
  • 展开全部降序SELECT * FROM kc ORDER BY cpbh DESC升序SELECT * FROM kc ORDER BY cpbh asc实例:62616964757a686964616fe4b893e5b19e31333366306466/*查询学生表中姓名、学号,并以学号降序排序*/select name,StuID...
  • 降序order by 列名desc--2.升序order by 列名 或order by 列名asc--3.order by语句必须一定要放在整个sql语句的最后。--4.根据多列进行排序--5.可以按照表达式进行排序--现根据英语成绩排序,再根据数学成绩排序(先...
  • sql知识点总结:面试知识点汇总:1-3:简单查询4-16:汇总查询17-22:子查询,20题使用时间函数,21:分组取最大值、最小值,22:每组TopN记录23-29:联结,29:行列互换查询姓“孟”老师的个数2、查询名字中带“猴...
  • 总结 通过此次学习,对之前的练习有了一次系统的回顾,也学习到了topN问题的解决方法,对sql面试题有了初步的了解,在之后的练习中也会多多注意如何提高sql查询的效率。 sqlzoo练习题 details about movie databases...
  • 如何提高sql的查询效率背景:1.简单查询1:查找姓猴的学生(模糊查询)2.查询姓名中最后一个字是猴的学生名单3.查询姓名中带猴的名单4.查询姓“孟”老师的个数(count函数)-----------------------------------...
  • sql建立降序索引

    2012-05-05 23:35:01
    kingbase 下建立降序索引错误是怎么回事啊?求帮助 CREATE UNIQUE INDEX STU ON student(sno DESC); 错误代码:37000 错误描述: 语法分析: syntax error 在或在 "DESC"附近,在字符 40
  • 行列如何互换 五、如何提高SQL查询的效率 1.SELECT子句中尽量避免使用* SELECT子句中,*是选择全部数据的意思,会降低SQL语句的效率。 另外,如果SELECT *用于多表连接,会造成更大成本的开销。 2.WHERE子句比较符号...
  • SQL 升序、降序排列

    万次阅读 2018-03-05 15:17:18
    /*查询学生表中姓名、学号,并以学号降序排序*/ select name,StuID from Students_information order by StuID desc /**order by 以什么排序,默认为升序,desc是降序*/ /*查询学生表中前5名学生的姓名,学号,并以...
  • sql 升序 ,降序

    千次阅读 2015-07-02 14:16:52
    asc 按升序排列 desc 按降序排列
  • SQL运行顺序:先找条件==>再输出结果==>最后对结果排序汇总函数:count:计数函数count(*)表示对所有行进行计数2. sum:求和函数3. aug:求平均数函数4. max/min:求最大最小值函数注意点:对有指定列的函数...
  • 这些面试题使用了很多SQL窗口函数,对SQL窗口函数不太了解的,可以移步去看我之前更新的文章,那些例子可以让大家通俗易懂的学会SQL窗口函数。https://zhuanlan.zhihu.com/p/150812199​zhuanlan.zhihu.com(一)...
  • SQL 查询结果升降序

    2020-12-13 17:19:43
    本文档为个人博客文档系统的备份版本、作者:小游、作者博客:点击访问 使用orderby语句 SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC 这里是降序排序 ASC是升序
  • 源数据表,降序排列 解决方案 ORDER BY子句的使用 源数据表,降序排列 姓名 班级 语文成绩 陈惠婷 五(1)班 75 潘智凤 五(1)班 48 王小丹 五(1)班 55 赖晓红 五(1)班...
  • sql语句执行顺序0.整体说明平时我们写sql的时候有没有注意sql语句是按照什么顺序执行的呢?本篇文章就来介绍下这个顺序,参考了《MySQL技术内幕 SQL编程》,有兴趣可以去观摩一下(8)SELECT (9)DISTINCT <select_...
  • SQL中的升序和降序

    万次阅读 2019-04-25 11:34:15
    select * from 表名 order by 字段名 desc //降序 select * from 表名 order by 字段名 asc //升序 降序: select * from emp order by empid desc; //按empid这一列的值降序来排列查询出emp表 升序: select...
  • 根据下面的例表编写 SQL 查询语句 表 名 : [Product]表名: [Order]表名:[Store]考题:1. 请查找符合下列要求的产品,并按照产品价格降序排列:Category 为 CategoryA 且颜色为 yellow,或者 Weight 大于 5。2. 请...
  • 点击上方“数据管道”,选择“置顶星标”公众号干货福利,第一时间送达SQL是大数据从业者的必备技能,大部分的大数据技术框架也都提供了SQL的解决方案。可以说SQL是一种经久不衰、历久弥新的编程语言。尤其是在数仓...
  • 序之前已经给大家分享四节教程了第一节:讲了SQL中最简单最基础的检索语句。第二节:我们对第一节中的检查语句增加了过滤条件。第三节:我们讲解了5个常用的聚合函数。第四节:SQL超入门第四篇:分组聚合今天我们来...
  • 话不多说,首先开始我们的SQL语言学习。第三课 排序检索数据排序数据为了明确排序用SELECT语句检索出的数据,可使用ORDER BY子句。ORDER BY子句取一个或多个列的名字,据此对输出进行排序。SELECT `prod_name` FROM ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,737
精华内容 1,094
关键字:

sql降序