sql - How to find the most and least used keys? -
i have data in table:
insert videos values(20,'v1','kidnap','crime'); insert videos values(20,'v2','abuse','crime'); insert videos values(20,'v3','robbery','crime'); insert videos values(20,'v4','murder','crime'); insert videos values(20,'v5','political','political'); insert videos values(20,'v6','political','political'); insert videos values(20,'v7','political','political'); insert videos values(20,'v8','political','political'); insert videos values(20,'v9','social','social'); insert videos values(19,'v1','kidnap','crime'); insert videos values(19,'v2','abuse','crime'); insert videos values(19,'v3','robbery','crime'); insert videos values(19,'v4','murder','crime'); insert videos values(19,'v5','political','political'); insert videos values(19,'v6','political','political'); insert videos values(19,'v7','political','political'); insert videos values(19,'v8','political','political'); insert videos values(29,'v1','kidnap','crime'); insert videos values(29,'v2','abuse','crime'); insert videos values(29,'v3','robbery','crime');
from above 19, 20 , 29 key values. want find keys having min , max number of values along keys.
here key 29 has fewest values (3) , key 20 has values (9).
how can identify least , used keys values?
if don't have ties can use keep dense_rank
, or 2 versions of in case, using first
, last
:
select min(id) keep (dense_rank first order count(*)) id_with_fewest, max(id) keep (dense_rank last order count(*)) id_with_most videos group id; id_with_fewest id_with_most -------------- ------------ 29 20
if have ties can decide how order them adding clause order by
- order count(*), id
.
this method won't allow 2 results if there tie though. if need can use inine view. adding data there's tie lowest count:
insert videos values(30,'v1','kidnap','crime'); insert videos values(30,'v2','abuse','crime'); insert videos values(30,'v3','robbery','crime');
minimum:
select id ( select id, dense_rank() on (order count(*)) rnk videos group id ) rnk = 1; id ---------- 30 29
maximum:
select id ( select id, dense_rank() on (order count(*) desc) rnk videos group id ) rnk = 1; id ---------- 20
Comments
Post a Comment