MySQL基础题

从风~ 2020-11-16 08:10:51
在student_score数据库中,查询选修课有两门分数在80分(含)以上的学生成绩信息,结果如下图


下面是相关表的内容:
...全文
135 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
从风~ 2020-11-19
  • 打赏
  • 举报
回复
好的谢谢,知道了
小野马1209 2020-11-18
  • 打赏
  • 举报
回复
declare @temp table(PersonId varchar(50),Name varchar(50),subject VARCHAR(50),score int)
insert into @temp
SELECT '2014013601','陈明','数学',80 union all
SELECT '2014013601','陈明','语文',70 union all
SELECT '2014013602','张三','语文',85 union all
SELECT '2014013602','张三','数学',90 union all
SELECT '2014013602','张三','英语',65

SELECT * from @temp A
where EXISTS
(
    select 1 
    From @temp  B
    WHERE B.PersonId=A.PersonId
    AND B.score>=80 
    GROUP BY B.PersonId 
    HAVING count(1)>=2
)
晴天8 2020-11-18
  • 打赏
  • 举报
回复
我就用上面大佬的代码块借花献佛一下了 你要的子查询

declare @temp table(PersonId varchar(50),Name varchar(50),subject VARCHAR(50),score int)
insert into @temp
SELECT '2014013601','陈明','数学',80 union all
SELECT '2014013601','陈明','语文',70 union all
SELECT '2014013602','张三','语文',85 union all
SELECT '2014013602','张三','数学',90 union all
SELECT '2014013602','张三','英语',65
 
SELECT * 
from @temp
where personid in
(
    select personid from @temp 
    where score>=80 
    group by personid 
    having count(1)>=2
)
从风~ 2020-11-17
  • 打赏
  • 举报
回复
引用 3 楼 kaijie_wu1209的回复:
declare @temp table(PersonId varchar(50),Name varchar(50),subject VARCHAR(50),score int)
insert into @temp
SELECT '2014013601','陈明','数学',80 union all
SELECT '2014013601','陈明','语文',70 union all
SELECT '2014013602','张三','语文',85 union all
SELECT '2014013602','张三','数学',90 union all
SELECT '2014013602','张三','英语',65

SELECT A.*,
Que=(SELECT TOP 1 COUNT(1) OVER(PARTITION BY B.PersonId ) FROM @temp B WHERE B.PersonId=A.PersonId and B.score>=80)
 FROM @temp A
把结果>=2的捞出来即可
额😓能用子查询吗,这好像还没学
小野马1209 2020-11-17
  • 打赏
  • 举报
回复
declare @temp table(PersonId varchar(50),Name varchar(50),subject VARCHAR(50),score int)
insert into @temp
SELECT '2014013601','陈明','数学',80 union all
SELECT '2014013601','陈明','语文',70 union all
SELECT '2014013602','张三','语文',85 union all
SELECT '2014013602','张三','数学',90 union all
SELECT '2014013602','张三','英语',65

SELECT A.*,
Que=(SELECT TOP 1 COUNT(1) OVER(PARTITION BY B.PersonId ) FROM @temp B WHERE B.PersonId=A.PersonId and B.score>=80)
 FROM @temp A
把结果>=2的捞出来即可
从风~ 2020-11-17
  • 打赏
  • 举报
回复
引用 1 楼 晴天8的回复:
你到底想干什么?
写出这题的sql指令忘打这句话了
晴天8 2020-11-17
  • 打赏
  • 举报
回复
你到底想干什么?

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧