DadoIncluir eficientemente columna no en el Grupo A de consultas SQL
Tabla A
Id INTEGER
Name VARCHAR(50)
Tabla B
Id INTEGER
FkId INTEGER ; Foreign key to Table A
deseo de contar las ocurrencias de cada valor FkId
:
SELECT FkId, COUNT(FkId)
FROM B
GROUP BY FkId
Ahora simplemente también quiero dar salida al Nombre de Table A
.
Esto no funcionará:
SELECT FkId, COUNT(FkId), a.Name
FROM B b
INNER JOIN A a ON a.Id=b.FkId
GROUP BY FkId
porque a.Name
no está contenido en la cláusula GROUP BY
(produce is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause
error).
El punto es pasar de salida como esta
FkId Count
1 42
2 25
para salida como esta
FkId Count Name
1 42 Ronald
2 22 John
Hay bastantes partidos en SO para ese mensaje de error, pero algunos, por ejemplo, https://stackoverflow.com/a/6456944/141172 tienen comentarios como "generarán 3 escaneos en la tabla, en lugar de 1, por lo que no se escalarán".
Como puedo eficienteincluir un campo de la Table B
unido (que tiene una relación 1: 1 a FkId
) en la salida de la consulta?
¿Puede mostrar algunos datos de muestra y los resultados deseados? Me está costando entender si puede haber más de un nombre único por FkId. –
Habría solo un nombre único por FkId. El objetivo es mostrar el nombre junto con FkId para que el usuario que mira el resultado no vea "La persona 1 apareció 42 veces", sino que vea "Persona 1, cuyo nombre es Ronald, apareció 42 veces". –
¿Por qué no solo agrega Nombre al grupo? –