怎样用一条sql 查出表(table)中 每科成绩高于80的 人的名字
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎样用一条sql 查出表(table)中 每科成绩高于80的 人的名字相关的知识,希望对你有一定的参考价值。
怎样用一条sql 查出表(table)中 每科成绩高于80的 人的名字
name subject mark
张三 数学 81
张三 语文 77
李四 数学 80
李四 语文 88
王五 数学 86
王五 语文 88
王五 英文 99
select name from ss Group by name having min(mark)>80;
这句话为什么查出的是2个人
我很奇怪,,你确定你给的数据没问题?
CREATE TABLE test(NAME VARCHAR(10),SUBJECT VARCHAR(10),MARK INT)INSERT INTO dbo.test
( NAME, SUBJECT, MARK )
SELECT
'张三','数学',81
UNION ALL
SELECT
'张三','语文',77
UNION ALL
SELECT
'李四','数学',80
UNION ALL
SELECT
'李四','语文',88
UNION ALL
SELECT
'王五','数学',86
UNION ALL
SELECT
'王五','语文',88
UNION ALL
SELECT
'王五','英文',99
select name
from test
Group by name
having min(mark)>80;
------
1 王五
我跟你写的完全一样,我得到的数据都是1条,,,,,
追问SQL> select name from ss Group by name having min(mark)>80;
NAME
----------
王五
张三
。。
你的ss表的数据是你上面写的这样的吗,,,我建的表数据和你的语句都一样,,,
追问一样呀 我是oracle 大哥能不能给讲下 这个 having什么的是什么意思。
追答having就是个限定条件啊,打个比方如果他不跟group by 一起用,和where 一样的效果;只不过是where子句中不允许出现聚合,所以一般这种聚合group by 后一般用having来做条件语句
参考技术A select name from ss Group by name having min(mark)>80;这句是没错的,结果的确是两个人。楼主已经做出来了,何必再问?可以看看这个网址:http://bbs.csdn.net/topics/190052824如果楼主是希望三科都高于80的,你表中都没有相关的数据,除非得特别声明是哪三个科目。测试了一下,在oracle平台运行的话,结果只有一个:王五。估计在sqlserver平台运行结果为两个,没有安装sqlserver,所以测试不了本回答被提问者采纳 参考技术B
这样试试:
select distinct name from table awhere not exists
(select 1 from b where b.name = a.name and b.mark <= 80)
and
name in (select name from table group by name having count(1) = 3) 参考技术C 你按照姓名分组,然后在组内根据他的最小成绩>80做判断,查出来的应该只有王五! 参考技术D select name
from
(
select name,mark=min(mark)
from table
group by name
) a
where mark>80
用一条sql语句查询表中字段的所有首字母大写
就是我一个表中cname中雇员名字首字母大写的名字查询显示出来
参考技术A select cname from table where cname in (select initcap(cname) from table);或者
select cname from table where cname=initcap(cname);本回答被提问者和网友采纳
以上是关于怎样用一条sql 查出表(table)中 每科成绩高于80的 人的名字的主要内容,如果未能解决你的问题,请参考以下文章