面试时的一个sql问题要求只用一个句sql 查出表中某个字段值出现3次以上的,只显示其中三行数据,少于3次的是
面试时的一个sql问题
要求只用一个句sql 查出表中某个字段值出现3次以上的,只显示其中三行数据,少于3次的是多少条就显示多少。
表中数据
col1 text1
11第一科
12第一科
21第二科
31第三科
32第三科
33第三科
34第三科
12第二科
35第三科
结果为
col1 text1
21第二
12第二
31第三
32第三
33第三
11第一1
12第一
请问如果写呢?
[解决办法]
- SQL code
SELECT col1,text1 FROM (SELECT t.*, row_number() over(PARTITION BY text1 ORDER BY col1) rn FROM t) WHERE rn <= 3
[解决办法]
select * from tab
group by text1
having count(text1)<=3
union
select * from tab
group by text1
having count(text1)>3
where rownum<=3
[解决办法]
[解决办法]
--分析函数最好
- SQL code
select col1,text1from (select col1,text1,row_number() over(partition by text1 order by col1) rnfrom tb) awhere rn<=3
[解决办法]
Ding
[解决办法]
引用:
SQL code
SELECT col1,text1
FROM (SELECT t.*, row_number() over(PARTITION BY text1 ORDER BY col1) rn FROM t)
WHERE rn <= 3
[解决办法]
select * from
(
select col1,text1,row_number()over(partition by text1 order by col1) as num from tb
)
where num<=3
[解决办法]
- SQL code
select * from TABNAME t where (select count(1) from TABNAME where text1 = t.text1 and col1 < t.col1 and rownum <= 3) < 3
