猿问

提问个奇怪的sql

话不多说直接上测试代码:

create table persontest
(
name nvarchar(10),
age int
)

insert into persontest
(name, age)
values
('a',3),
('a',3),
('b',4),
('b', 3)

以上sql跑完了之后你应该能得到大概这么一个表:

name age
a 3
a 3
b 4
b 3

现在我要进行类似这么一个查找(该sql肯定是不能跑的, 我只是用它来表达我想要做的查询)


select name, age
from persontest
group by name
having all age = 3

 

我期待的结果是:

(a,3), 或者能直接查出(a)也是可以接受的。

 

因为对于a来说, 所有的a的age都是3,因此a符合条件, 我要a了

b的话, 有一个4, 所以不全是3, 因此b不合格。b被踢掉了。

 

就是这么个需求。

 

由于聚合函数里我没找到类似于"all"这样的函数, 所以弄不清这个到底如何写。

有谁有办法吗?非常感谢。 圆豆不是问题。

补充:数据库是sql server

杨__羊羊
浏览 511回答 8
8回答

当年话下

select name from (select name,agefrom persontestgroup by name,age) as ngroup by namehaving COUNT(1)=1   你是要找 name分组后,所有age都相同的么.?

千万里不及你

你的意思是要找所有age=3且没有age<>3的name是吗?

牧羊人nacy

虽然没读懂你的话, 但是我感觉你说的应该就是我的意思。  比如全天下叫张三的人今年都3岁, 那就显示张三 而全天下叫李四的人, 有三岁的有四岁的, 不显示李四。  全天下叫王五的人, 全都不是三岁的, 不显示王五。

皈依舞

太难了。。

犯罪嫌疑人X

select  name , min(age) from persontest group by name   having min(age)=max(age)

喵喵时光机

select name ,age, COUNT(*) AS num from persontest group by name,age having age= 2
随时随地看视频慕课网APP

相关分类

SQL Server
我要回答