首页 > 数据库 >常见sql问题总结三

常见sql问题总结三

时间:2023-04-07 10:36:11浏览次数:45  
标签:总结 -- 常见 score student sql corse id SELECT

-- 查询各科成绩前三名的记录:(不考虑成绩并列情况) 
-- ROW_NUMBER()函数 方便统计排序。
-- ROW_NUMBER() OVER(PARTITION BY SC.corse_id ORDER BY SC.number DESC) RN   根据corse_id分组在进行倒叙排序
SELECT * FROM (
              SELECT SC.student_id SNO,
              SC.corse_id CNO,
              SC.number SCORE,
              ROW_NUMBER() OVER(PARTITION BY SC.corse_id ORDER BY SC.number DESC) RN
                            
              FROM score SC) A
WHERE A.RN <= 3   -- 取 rn的前三个 (前三名)

-- 查询每门课程被选修的学生数;
SELECT COUNT(DISTINCT student_id) as 人数,corse_id FROM score GROUP BY score.corse_id

-- 查询出只选修了一门课程的全部学生的学号和姓名
select bb.选课数量 数量,aaa.sid,aaa.sname FROM
(SELECT * FROM student) aaa
INNER JOIN
(SELECT COUNT(DISTINCT corse_id) as 选课数量,student_id FROM score GROUP BY score.student_id HAVING COUNT(DISTINCT corse_id)=1) bb
on aaa.sid=bb.student_id;

-- 查询男生、女生的人数;
SELECT gender, COUNT(sid) as 人数 FROM student GROUP BY gender;

-- 查询姓“张”的学生名单;
SELECT * FROM student WHERE sname LIKE '张%';

-- 查询同名同姓学生名单,并统计同名人数;
SELECT sname, COUNT(sid) as 人数 FROM student GROUP BY sname HAVING 人数>1;
    
-- 查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列

SELECT AVG(number)AS avg_num ,corse_id FROM score GROUP BY corse_id ORDER BY avg_num  ,corse_id DESC;

-- 查询平均成绩大于85的所有学生的学号、姓名和平均成绩;
SELECT sid,avg_num,sname FROM
(SELECT sid,sname FROM student) aa
INNER JOIN
(SELECT AVG(number)AS avg_num ,student_id FROM score  GROUP BY student_id HAVING avg_num>85) bb
ON aa.sid=bb.student_id

-- 查询课程名称为“数学”,且分数低于60的学生姓名和分数;
SELECT student.sid,sname,score.number,course.cname FROM student
INNER JOIN
score
on 
student.sid=score.student_id 
INNER JOIN
course
on 
score.corse_id=course.cid
WHERE course.cname='生物' AND score.number<60


-- 查询课程编号为003且课程成绩在80分以上的学生的学号和姓名; 
SELECT student.sid,sname,score.number,course.cname FROM student
INNER JOIN
score
on 
student.sid=score.student_id 
INNER JOIN
course
on 
score.corse_id=course.cid
WHERE course.cid='3' AND score.number>80

-- 求选了课程的学生人数
SELECT COUNT(DISTINCT student_id)FROM score 

-- 查询选修“王老师”老师所授课程的学生中,成绩最高的学生姓名及其成绩;
SELECT MAX(score.number),student.sname FROM score 
LEFT JOIN
course
on score.corse_id=course.cid
LEFT JOIN
teacher
ON course.tearch_id=teacher.tid
LEFT JOIN
student
ON score.student_id=student.sid
WHERE teacher.tname='王老师'
GROUP BY student.sid
ORDER BY MAX(score.number) desc 
LIMIT 1

 

标签:总结,--,常见,score,student,sql,corse,id,SELECT
From: https://www.cnblogs.com/xxks/p/17295277.html

相关文章

  • C# SQLHelp工具类
    usingSystem;usingSystem.Collections;usingSystem.Collections.Generic;usingSystem.Configuration;usingSystem.Data;usingSystem.Data.SqlClient;usingSystem.Linq;usingSystem.Reflection;usingSystem.Web;namespaceEFXXH.Tool{///此类为抽象类,......
  • Centos7使用systemctl管理mysql8服务开机启动
    centos7下开机默认不执行原来配置启动命令的/etc/rc.local文件,建议使用systemctl管理自启动服务,如果要使用/etc/rc.local进行自启动,需要给文件/etc/rc.d/rc.local添加可执行权限。    systemctl常用命令如下:1.列出所有启动项命令systemctllist-unit-files开启的和未开启的......
  • SQLiteOpenHelper&SharedPreferences练习
    目录结构:packagecom.dc.app;importjava.text.DecimalFormat;importjava.util.Locale;importandroid.app.Activity;importandroid.app.AlertDialog;importandroid.app.Dialog;importandroid.app.Notification;importandroid.app.Notificati......
  • SqlServer中PATINDEX()函数
    SQLServer的PATINDEX()函数用于在字符串中查找某个模式的位置,并返回该模式第一个匹配项的起始位置。它接受两个参数:要查找的模式和要查找的字符串。下面是语法格式:PATINDEX('%pattern%',expression)其中,'%pattern%'是模式,expression是要查找的字符串。模式中可以含有通配......
  • 力扣1050(MySQL)-合作过至少三次的演员和导演(简单)
    题目:ActorDirector 表: 写一条SQL查询语句获取合作过至少三次的演员和导演的id对 (actor_id,director_id)示例:  建表语句:1createtableifnotexistsactordirector_1050(actor_idint(3),director_idint(3),timestampint(3)primarykey);2truncatetable......
  • 自建基于Hadoop+Hive+Spark的离线数仓总结
    整体架构图 服务台账 hadoop1hadoop2hadoop3 172.23.112.160172.23.112.161172.23.112.162HDFSNameNodeDataNodeHDFSNameNodeHTTPUI:9870HDFSDataNodeHTTPUI:9864DataNodeSecondaryNameNodeDataNode http://hadoop1:9870/dfshealth.html#tab-o......
  • pg数据库查找外键但没有索引的sql
    SELECTpg_index.indexrelid::regclass,'createindex'||relname||'_'||array_to_string(column_name_list,'_')||'_idxon'||conrelid||'('||array_to_string(column_name_list,......
  • 力扣1045(MySQL)-买下所有产品的客户(中等)
    题目:Customer 表: Product 表:写一条SQL查询语句,从 Customer 表中查询购买了 Product 表中所有产品的客户的id。示例:  解题思路:建表语句:1createtableifnotexistscustomer_1045(customer_idint(3)notnull,product_keyint(3));2createtableif......
  • IO流中「线程」模型总结
    目录一、基础简介二、同步阻塞1、模型图解2、参考案例三、同步非阻塞1、模型图解2、参考案例四、异步非阻塞1、模型图解2、参考案例五、Reactor模型1、模型图解1.1Reactor设计原理1.2单Reactor单线程1.3单Reactor多线程1.4主从Reactor多线程2、参考案例六、参考源码IO流模块......
  • 力扣627(MySQL)-变更性别(简单)
    题目:Salary 表:请你编写一个SQL查询来交换所有的'f'和'm'(即,将所有'f'变为'm',反之亦然),仅使用单个update语句,且不产生中间临时表。注意,你必须仅使用一条update语句,且不能使用select语句。查询结果如下例所示。示例1: 来源:力扣(LeetCode)链接:https://leet......