话不多说直接上测试代码:
create table persontest( name nvarchar(10), age int)
insert into persontest(name, age)values('a',3),('a',3),('b',4),('b', 3)
以上sql跑完了之后你应该能得到大概这么一个表:
name agea 3a 3b 4b 3
现在我要进行类似这么一个查找(该sql肯定是不能跑的, 我只是用它来表达我想要做的查询)
select name, agefrom persontest group by namehaving all age = 3
我期待的结果是:
(a,3), 或者能直接查出(a)也是可以接受的。
因为对于a来说, 所有的a的age都是3,因此a符合条件, 我要a了
b的话, 有一个4, 所以不全是3, 因此b不合格。b被踢掉了。
就是这么个需求。
由于聚合函数里我没找到类似于"all"这样的函数, 所以弄不清这个到底如何写。
有谁有办法吗?非常感谢。 圆豆不是问题。
补充:数据库是sql server
8 回答
当年话下
TA贡献1890条经验 获得超9个赞
select name from (
select name,age
from persontest
group by name,age) as n
group by name
having COUNT(1)=1
你是要找 name分组后,所有age都相同的么.?
牧羊人nacy
TA贡献1862条经验 获得超7个赞
虽然没读懂你的话, 但是我感觉你说的应该就是我的意思。
比如全天下叫张三的人今年都3岁, 那就显示张三
而全天下叫李四的人, 有三岁的有四岁的, 不显示李四。
全天下叫王五的人, 全都不是三岁的, 不显示王五。
犯罪嫌疑人X
TA贡献2080条经验 获得超4个赞
select name , min(age) from persontest group by name having min(age)=max(age)
喵喵时光机
TA贡献1846条经验 获得超7个赞
select name ,age, COUNT(*) AS num
from persontest
group by name,age
having age= 2
- 8 回答
- 0 关注
- 510 浏览
添加回答
举报
0/150
提交
取消