面试时的一个sql问题

weg910 2010-04-08 01:15:32
要求只用一个句sql 查出表中某个字段值出现3次以上的,只显示其中三行数据,少于3次的是多少条就显示多少。

表中数据
col1 text1
11 第一科
12 第一科
21 第二科
31 第三科
32 第三科
33 第三科
34 第三科
12 第二科
35 第三科
结果为
col1 text1
21 第二
12 第二
31 第三
32 第三
33 第三
11 第一 1
12 第一

请问如果写呢?
...全文
135 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
tjuxl123 2010-04-08
  • 打赏
  • 举报
回复
select col1,text1 from (select col1,text1,row_number()over(partition by text1 order by text1)num from a_bak)
where num<=3
tjuxl123 2010-04-08
  • 打赏
  • 举报
回复
select col1,text1 from (select col1,text1,row_number()over(partition by text1 order by text1)num from a_bak)
where num<=3
weg910 2010-04-08
  • 打赏
  • 举报
回复
谢谢各位了。我当时是用的rank()
小灰狼W 2010-04-08
  • 打赏
  • 举报
回复
select *
from TABNAME t
where (select count(1)
from TABNAME
where text1 = t.text1
and col1 < t.col1
and rownum <= 3) < 3
ojuju10 2010-04-08
  • 打赏
  • 举报
回复

select * from
(
select col1,text1,row_number()over(partition by text1 order by col1) as num from tb
)
where num<=3
gll0809 2010-04-08
  • 打赏
  • 举报
回复
引用 1 楼 tangren 的回复:
SQL code
SELECT col1,text1
FROM (SELECT t.*, row_number() over(PARTITION BY text1 ORDER BY col1) rn FROM t)
WHERE rn <= 3
ORHCLE 2010-04-08
  • 打赏
  • 举报
回复
Ding
心中的彩虹 2010-04-08
  • 打赏
  • 举报
回复
--分析函数最好


select col1,text1
from (select col1,text1,row_number() over(partition by text1 order by col1) rn
from tb) a
where rn<=3

duqiangcise 2010-04-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 tangren 的回复:]
SQL code
SELECT col1,text1
FROM (SELECT t.*, row_number() over(PARTITION BY text1 ORDER BY col1) rn FROM t)
WHERE rn <= 3
[/Quote]

顶起!
iqlife 2010-04-08
  • 打赏
  • 举报
回复
select * from tab
group by text1
having count(text1)<=3
union
select * from tab
group by text1
having count(text1)>3
where rownum<=3
tangren 2010-04-08
  • 打赏
  • 举报
回复
SELECT col1,text1
FROM (SELECT t.*, row_number() over(PARTITION BY text1 ORDER BY col1) rn FROM t)
WHERE rn <= 3

17,140

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧