2 oiu1010110 oiu1010110 于 2016.04.26 12:51 提问

SQL 查询问题 group by

student(sno,sname,,sdept)
course(cno,cname,ccredit)
sc(sno,cno,grade)
为什么这样写不行呢?
//查询CS系成绩最高的学生的学号、姓名以及成绩

select student.sno,sname,grade from student,sc where student.sno = sc .sno
and grade=(select max(grade) from sc where sc.sno = sno and sdept = 'cs')
还有一个问题;
//查询每个系的最高成绩
select sdept,max(grade) from sc,student where sc.sno=student.sno group by sdept;这样写把每个系的最高分列出来了,当我想把sno列出来,所以加上了sc.sno,下面的就什么结果也没有,是错的。
--select sdept,sc.sno,max(grade) from sc,student where sc.sno=student.sno group by sdept,sc.sno
那这样的问题的group by到底该怎么写呢?如果我想把学号等也列出来是不是只可以写成相关查询呢?
select x.sno,sdept,grade from student x,sc where x.sno = sc.sno and grade =
(select max(grade) from sc,student where sc.sno=student.sno and sdept=x.sdept) //这个结果又是对的
谢谢指导。

2个回答

danielinbiti
danielinbiti   Ds   Rxr 2016.04.26 13:37
已采纳
 select student.sno,sname,grade from student,sc where student.sno = sc .sno
and grade=(select max(grade) from sc where sc.sno = sno and sdept = 'cs')
这句不对的原因在于,下面子句中,左边的sdept不存在,在sc表中没有
(select max(grade) from sc where sc.sno = sno and sdept = 'cs')
oiu1010110
oiu1010110 这样写仍然是错的:select x.sno,sname,sc.cno,grade from student x,sc where x.sno = sc.sno and grade=(select max(grade) from sc,student where sc.sno = student.sno and student.sno = x.sno and sdept = 'cs');但是这样是对的:select student.sno,sname,grade from student,sc where student.sno = sc.sno and sdept = 'cs' and grade >=all(select grade from sc,student where student.sno = sc.sno and sdept = 'cs');为什么呢?谢谢
大约 2 年之前 回复
CSDNXIAOS
CSDNXIAOS   2016.04.26 13:02

---所有书籍价格的统计
select sum(price)总价,avg(price)均价,max(price)最高价,min(price)最低价
from titles

---统计where条件的记录
---business类型书籍价格的统计
select sum(price)总价,avg(price)均价,max(price)最高价,min(price)最低价
from tit......
答案就在这里:sql查询 -count,group by,havi..
----------------------Hi,地球人,我是问答机器人小S,上面的内容就是我狂拽酷炫叼炸天的答案,除了赞同,你还有别的选择吗?

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
SQL-----group by 查询多个字段
SQL-----group by 查询多个字段
sql语句group by问题
#GROUP BY 如果存在,那么前面查询语句里出现的字段要么出现在groupby里要么groupby里的字段与select里的其他字段不在同一个表 #SELECT 里如果有多个字段,必须有一个和group by里的是一致的,且select里的其他字段与group by里字段不在同一个表(聚合函数除外)。 SELECT SUM(grade),stu_id, name,sex FROM scor
[mysql]SQL语句性能优化--Group by中执行慢性能差的原因调查与处理
1. mysql在数据量较大的时候、使用group by查询结果集时速度很慢的原因可能有以下几种:1) 分组字段不在同一张表中2) 分组字段没有建索引3)分组字段加DESC后索引没有起作用(如何让索引起作用才是关键、且听下文分解)4)分组字段中加函数导致索引不起作用(这种一定要避免、本文不对这种情况展开说明)5)分组字段中含有TEXT或CLOB字段(改成VARCHAR字段)2.今天讲讲多表关联、但...
数据库中经常分组查询的表如何做性能优化(group by)
一、原sql SELECT U.NAME        AS NAME,        U.ACCOUNT,        U.REGION_NAME,        U.ORG_NAME,        L.LOGIN_TIME  AS M   FROM PUB_USER U,        (SELECT t.CREATOR, MAX(t.LOGIN_TIME) LOGIN_TI
关于SQL语句的group by 以及如何 “先排序,再查询”
group by order by 排序 查询
SQL中子查询和group by查询
1、SQL中的子查询:在做sql题时,我们最怕遇到条件复杂的查询语句,因为大多时候需要两三个子查询来实现,而大多数同学,可以说都比较怕子查询的,以前我也被这些题目弄的云里雾里的,不过做多了这类的题目后发现,其实也有一定规律,我们可以总结一套适合自己的方法来处理,下面时我对该类题目的处理方法:有购物表如下:题目: 查询购物商品类型不只一种的购物者的信息。 我
如何验证group by的查询SQL中是否包含重复数据
引言: 我们在项目开发过程中,总是会碰到一些书写复杂sql时(特别是要设计到金额计算),总是会怕统计到多余或重复的记录,那又要怎么查看呢?例子:如下SQLSELECT b.bldg_id,b.bldg_name, SUM(pu.psu_salearea) AS pre_sale_area, IFNULL(SUM(pu.psu_sumprice),'0.00') AS pre_sale_total
SQLSERVER GROUP BY查询最大一条,并关联当前行其它列
/* 8月 A账户 余额 2017-08-07 8月 A账户 余额 2017-08-10 8月 A账户 余额 2017-08-12 8月 B账户 余额 2017-08-07 8月 B账户 余额 2017-08-20 8月 B账户 余额 2017-08-30 结果 8月 A账户 余额 2017-08-12 8月 B账户 余额 2017-08-30 */ ;WI
sql:分组统计时的查询及效率
一张user表 里面有id、国籍、出生日期等字段 现在要统计各个国家成年的人有多少、未成年的人有多少 结果如下图所示  第一种写法: SELECT    gjname, (select count(0) from criminal_base_info where gjname=baseInfo.gjname and TRUNC(months_between(sysdate,cs
Laravel 运行原生SQL时,Group by必须包含select字段的问题
正常启动无问题,就是运行sql时提示group by中的字段必须包含select字段中的条目,后经百度以及查阅只需修改database.php中的内容即可解决: 'strict' => true更改为'strict'=>false即可