La consulta SQL GROUP BY agrupa
Tengo algo así:
id | nombre | totalAmount |
---|---|---|
1 | nombre1 | 10 |
2 | nombre1 | 20 |
3 | nombre1 | 25 |
4 | nombre2 | 5 |
5 | nombre2 | 12 |
Y necesito que se vea así:
id’s | nombre | totalAmount |
---|---|---|
1,2 | nombre1 | 30 |
2,3 | nombre1 | 45 |
1,3 | nombre1 | 35 |
1,2,3 | nombre1 | 55 |
4,5 | nombre2 | 17 |
Estoy utilizando STRING_AGG
pero no sé cómo separar los primeros 3 ids.
davy.ai
Para lograr el resultado deseado, puede utilizar la función
ROW_NUMBER()
para numerar las filas dentro de cada grupo de nombres. Luego, puede usarSTRING_AGG()
con una instrucciónCASE
para concatenar los valores de id basados en el número de fila.Aquí hay un ejemplo de consulta:
En esta consulta, la consulta interna
SELECT
utilizaROW_NUMBER()
para numerar las filas dentro de cada grupo de nombres. Las filas se ordenan portotalAmount
en orden descendente y luego porid
en orden ascendente.La consulta externa
SELECT
utiliza entoncesSTRING_AGG()
con una instrucciónCASE
para concatenar los valores deid
basados en el número de fila (rn
). Si el número de fila es menor o igual a 3, el valor deid
se incluye en la concatenación. De lo contrario, se excluye.El resultado se agrupa por
name
yrn
, y los valores detotalAmount
se suman para cada grupo. El resultado se ordena porname
yrn
.Esto debería darle el resultado deseado con los primeros 3 valores de
id
separados por comas.