Tenho um banco de dados/tabela com esta estrutura:
Ano | Idade | Gênero | ID do pedido |
---|---|---|---|
2012 | 18 | M | 4268 |
2021 | 75 | M | 7569 |
2015 | 56 | F | 5381 |
2018 | 29 | M | 2876 |
2014 | 33 | F | 3749 |
O que estou tentando conseguir é que eu quero 400 registros/linhas de tabela puxadas aleatoriamente para formar uma amostra menor, mas preciso de 200 registros masculinos e 200 femininos. Além disso, preciso que cada registro masculino forneça um registro feminino com o mesmo valor de Idade, então eu essencialmente termino com 200 pares de resultados - cada par tendo um masculino e uma feminina da mesma Idade.
Já produzi e testei o seguinte código:
DROP TABLE IF EXISTS #SampleTableM
DROP TABLE IF EXISTS #SampleTableF
SELECT TOP (200) [Year],[Age],[Gender],[OrderID]
INTO #SampleTableM
FROM [database.name]
WHERE Age <=90 AND Sex = 'M'
ORDER BY NEWID()
SELECT TOP (200) [Year],[Age],[Gender],[OrderID]
INTO #SampleTableF
FROM [database.name]
WHERE Age <=90 AND Sex = 'F'
ORDER BY NEWID()
SELECT * FROM #SampleTableM
UNION
SELECT * FROM #SampleTableF;
No entanto, isso só me dá 200 resultados aleatórios de homens e 200 resultados aleatórios de mulheres, sem que cada resultado seja correspondido a alguém do gênero oposto com a mesma idade.
Com base nos comentários, primeiro selecionei uma amostra aleatória de 200 homens e depois comparei a idade com o gênero feminino correspondente às 200 amostras masculinas coletadas. Não tem certeza de como sua saída deve ficar, já que você não compartilhou a saída esperada. Você pode ajustar as colunas na saída conforme necessário.
Aqui está um exemplo
Violino
EDIT : Conforme o comentário, podemos obter os pares correspondentes em linhas subsequentes usando UNION ALL e, em seguida, ordenar por idade e gênero. Pode haver ou não distribuição igual de idade para cada gênero, mas pelo menos idades semelhantes aparecerão juntas.
Observação : visualmente, isso ainda pode parecer irregular quando o número de homens e mulheres for maior que 2 para uma idade.
Violino
Saída