Sql 如何找到使用最多和最少的钥匙?
我的表格中有以下数据:Sql 如何找到使用最多和最少的钥匙?,sql,oracle,Sql,Oracle,我的表格中有以下数据: INSERT INTO VIDEOS VALUES(20,'V1','KIDNAP','CRIME'); INSERT INTO VIDEOS VALUES(20,'V2','ABUSE','CRIME'); INSERT INTO VIDEOS VALUES(20,'V3','ROBBERY','CRIME'); INSERT INTO VIDEOS VALUES(20,'V4','MURDER','CRIME'); INSERT INTO VIDEOS VALUES(
INSERT INTO VIDEOS VALUES(20,'V1','KIDNAP','CRIME');
INSERT INTO VIDEOS VALUES(20,'V2','ABUSE','CRIME');
INSERT INTO VIDEOS VALUES(20,'V3','ROBBERY','CRIME');
INSERT INTO VIDEOS VALUES(20,'V4','MURDER','CRIME');
INSERT INTO VIDEOS VALUES(20,'V5','POLITICAL','POLITICAL');
INSERT INTO VIDEOS VALUES(20,'V6','POLITICAL','POLITICAL');
INSERT INTO VIDEOS VALUES(20,'V7','POLITICAL','POLITICAL');
INSERT INTO VIDEOS VALUES(20,'V8','POLITICAL','POLITICAL');
INSERT INTO VIDEOS VALUES(20,'V9','SOCIAL','SOCIAL');
INSERT INTO VIDEOS VALUES(19,'V1','KIDNAP','CRIME');
INSERT INTO VIDEOS VALUES(19,'V2','ABUSE','CRIME');
INSERT INTO VIDEOS VALUES(19,'V3','ROBBERY','CRIME');
INSERT INTO VIDEOS VALUES(19,'V4','MURDER','CRIME');
INSERT INTO VIDEOS VALUES(19,'V5','POLITICAL','POLITICAL');
INSERT INTO VIDEOS VALUES(19,'V6','POLITICAL','POLITICAL');
INSERT INTO VIDEOS VALUES(19,'V7','POLITICAL','POLITICAL');
INSERT INTO VIDEOS VALUES(19,'V8','POLITICAL','POLITICAL');
INSERT INTO VIDEOS VALUES(29,'V1','KIDNAP','CRIME');
INSERT INTO VIDEOS VALUES(29,'V2','ABUSE','CRIME');
INSERT INTO VIDEOS VALUES(29,'V3','ROBBERY','CRIME');
从上面的19、20和29是关键值。我想找到与键一起具有最小值和最大值的键
此处,键29的值最少(3),键20的值最多(9)
如何识别使用最少和最多的键值?如果您没有领带,您可以使用
保持稠密\u排名
,或者在这种情况下使用两个版本,使用和:
如果您确实有领带,您可以通过在orderby
-比如orderby count(*),id
中添加另一个子句来决定如何订购领带
但是,如果出现平局,这种方法将不允许返回两个结果。如果需要这样做,可以使用inine视图。添加一些数据,使最低计数保持一致:
INSERT INTO VIDEOS VALUES(30,'V1','KIDNAP','CRIME');
INSERT INTO VIDEOS VALUES(30,'V2','ABUSE','CRIME');
INSERT INTO VIDEOS VALUES(30,'V3','ROBBERY','CRIME');
最低要求:
select id
from (
select id, dense_rank() over (order by count(*)) as rnk
from videos
group by id
)
where rnk = 1;
ID
----------
30
29
最大值:
select id
from (
select id, dense_rank() over (order by count(*) desc) as rnk
from videos
group by id
)
where rnk = 1;
ID
----------
20
如果有平局呢?@Cory,显示两个值
select id
from (
select id, dense_rank() over (order by count(*) desc) as rnk
from videos
group by id
)
where rnk = 1;
ID
----------
20