挑战:用最少的sql语句查出某个字段值相同数大于2的所有记录

时间:2021-07-08 19:18:23
问题:用最少的sql语句查出某个字段值相同数大于2的所有记录

例如我有一个表:emplo(id,name,phone,age)
如何把存在年龄相同的人数大>2的所有记录一次性提出。
如现有:
 1   张1  55555   1
 2   张2  55555   10
 3   张3  55555   10
 4   张4  55555   20
 5   张5  55555   20
 6   张6  55555   30 
 7   张7  55555   20
一次性选出记录:
 2   张2  55555   10
 3   张3  55555   10
 4   张4  55555   20
 5   张5  55555   20
 7   张7  55555   20

15 个解决方案

#1


select * from emplo where age in(select age from emplo group by age where count(1)>2)

#2


select * from emplo where age in (select age from emplo group by age having(age)>2)

#3


select
    a.*
from 
    emplo a
where
    exists(select 1 from emplo where id!=a.id and age=a.age)

#4


where改成having
select * from emplo where age in(select age from emplo group by age havingcount(1)>2)
暂时还没有想出更简单的,好像用left jou 

#5


来晚了, Leftie(左手,为人民币服务) 已给出答案

#6


已有满地的答案,呜呜

#7


select * from emplo where age in (select age from emplo group by age having count(age)>2)

#8


楼主是要>2的数据,怎么把=2的数据也在结果集中列出来误倒偶啊,:(

#9


select * from emplo where age in(select age,count(id) countid from emplo group by age where countid>=2)

#10


select age  from emplo group by age having cuont(*)>=2
哈哈,我的最短

#11


最少的sql语句,

写的字母最少???

#12


昨天大家给出的解答思路基本正确,完全正确的是如下两为大侠:“ancyzhou”和 “libin_ftsafe(子陌红尘)”,比较好的是后面一位给出的解答,因为他已经满足了我今天提出的问题,关于今天的问题大家能否给出更好的解答。

问题2:

emplo(id,name,phone,age,company)
如何把存在年龄相同并且所在公司相同的人数大>2的所有记录一次性提出。
如现有数据:
 1   张1   55555   1     company1
 2   张2   55555   10    company2
 3   张3   55555   10    company2
 4   张4   55555   20    company4
 5   张5   55555   20    company4
 6   张6   55555   30    company6
 7   张7   55555   20    company4
 8   张8   55555   20    company8
 9   张9   55555   20    company8
 10  张10  55555   20    company10
 11  张11  55555   20    company11

一次性选出记录:
 2   张2   55555   10    company2
 3   张3   55555   10    company2
 4   张4   55555   20    company4
 5   张5   55555   20    company4
 7   张7   55555   20    company4
 8   张8   55555   20    company8
 9   张9   55555   20    company8

#13


更正一下:
“如何把存在年龄相同并且所在公司相同的人数>2的所有记录一次性提出。”
更正为:
“如何把存在年龄相同并且所在公司相同的人数>=2的所有记录一次性提出。”

#14


根据上面人家写的自己琢磨去

#15


-- 在libin_ftsafe(子陌红尘)的基础上面改一下,
-- 这个语句简单一点
select distinct a.*
from emplo a, emplo b
where a.id != b.id and a.age = b.age and a.company = b.company

#1


select * from emplo where age in(select age from emplo group by age where count(1)>2)

#2


select * from emplo where age in (select age from emplo group by age having(age)>2)

#3


select
    a.*
from 
    emplo a
where
    exists(select 1 from emplo where id!=a.id and age=a.age)

#4


where改成having
select * from emplo where age in(select age from emplo group by age havingcount(1)>2)
暂时还没有想出更简单的,好像用left jou 

#5


来晚了, Leftie(左手,为人民币服务) 已给出答案

#6


已有满地的答案,呜呜

#7


select * from emplo where age in (select age from emplo group by age having count(age)>2)

#8


楼主是要>2的数据,怎么把=2的数据也在结果集中列出来误倒偶啊,:(

#9


select * from emplo where age in(select age,count(id) countid from emplo group by age where countid>=2)

#10


select age  from emplo group by age having cuont(*)>=2
哈哈,我的最短

#11


最少的sql语句,

写的字母最少???

#12


昨天大家给出的解答思路基本正确,完全正确的是如下两为大侠:“ancyzhou”和 “libin_ftsafe(子陌红尘)”,比较好的是后面一位给出的解答,因为他已经满足了我今天提出的问题,关于今天的问题大家能否给出更好的解答。

问题2:

emplo(id,name,phone,age,company)
如何把存在年龄相同并且所在公司相同的人数大>2的所有记录一次性提出。
如现有数据:
 1   张1   55555   1     company1
 2   张2   55555   10    company2
 3   张3   55555   10    company2
 4   张4   55555   20    company4
 5   张5   55555   20    company4
 6   张6   55555   30    company6
 7   张7   55555   20    company4
 8   张8   55555   20    company8
 9   张9   55555   20    company8
 10  张10  55555   20    company10
 11  张11  55555   20    company11

一次性选出记录:
 2   张2   55555   10    company2
 3   张3   55555   10    company2
 4   张4   55555   20    company4
 5   张5   55555   20    company4
 7   张7   55555   20    company4
 8   张8   55555   20    company8
 9   张9   55555   20    company8

#13


更正一下:
“如何把存在年龄相同并且所在公司相同的人数>2的所有记录一次性提出。”
更正为:
“如何把存在年龄相同并且所在公司相同的人数>=2的所有记录一次性提出。”

#14


根据上面人家写的自己琢磨去

#15


-- 在libin_ftsafe(子陌红尘)的基础上面改一下,
-- 这个语句简单一点
select distinct a.*
from emplo a, emplo b
where a.id != b.id and a.age = b.age and a.company = b.company