I have a dataset looks like this
| Country | id | ------------------- | a | 5 | | a | 1 | | a | 2 | | b | 1 | | b | 5 | | b | 4 | | b | 7 | | c | 5 | | c | 1 | | c | 2 |
and i need a query which returns 2 random values from where country in (‘a’, ‘c’):
| Country | id | ------------------ | a | 2 | -- Two random rows from Country = 'a' | a | 1 | | c | 1 | | c | 5 | --Two random rows from Country = 'c'
Advertisement
Answer
This should work:
select Country, id from (select Country, id, row_number() over(partition by Country order by rand()) as rn from table_name ) t where Country in ('a', 'c') and rn <= 2
Replace rand()
with random()
if you’re using Postgres or newid()
in SQL Server.