Estou fazendo algumas análises de dados e quero encontrar uma maneira fácil de examinar todos os membros de cada "grupo" em um grupo por função.
Assim, 3 agentes podem estar envolvidos em um pedido. Quero examinar rapidamente os três agentes que foram 'agrupados' nesta ordem por vários motivos.
Normalmente, eu usaria group_concat para isso (maneira fácil de ver todas as strings agrupadas). No entanto, replicar isso usando um 'agrupar por' parece difícil e pesado por enquanto no servidor SQL.
No momento, bruto e sujo, eu usaria max(username) e min(username) para encontrar rapidamente 2 (e 90% dos pedidos provavelmente têm 2 ou menos pessoas. Existe uma maneira de fazer mid(username) ou 2nd- mais alto (nome de usuário) ou percentil (50º, nome de usuário)? Essa seria uma maneira excelente e rápida de encontrar esses dados relevantes. Por algum motivo, as respostas anteriores que vi descrevendo group_concat no SQL Server não parecem diretas para mim.
Dados de exemplo, por exemplo:
employee purchase_id
bill 1
bob 1
chrissy 1
mike 2
bill 2
bob 3
Atualmente eu tenho isso:
purchase_id, employee_count, complicated metric
1 3 blahblah
2 2 dsflsajf
3 1 98%
Eu gostaria de ver de relance:
purchase_id, employees, complicated metric
1 (bill,bob,chrissy) blahblah
No entanto, o group_concat parece muito confuso para usar com um grupo por instrução - ou simulando group_concat com SQL Server. Então, em vez disso, que tal isso.
selecione max(funcionário), min(funcionário)
purchase_id, max(employee), min(employee)
1 bill chrissy
no exemplo, você vê que bob é omitido, já que max/min encontrará apenas os dois pontos finais. Se houvesse algum tipo de função para extrair o segundo valor mais alto, ou valor do 50º percentil, em strings, isso seria útil.
Algo assim dividiria os resultados em várias colunas, mas você precisaria saber com antecedência o número máximo de funcionários por purchase_id: