es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Seleccionar una columna de una tabla y el Count() de una columna en otra tabla.

Considere las siguientes tablas:

“`
TABLA PAPEL // contiene ID de los papeles científicos e ID de los científicos que los escribieron
╔═══════════╦═════════════╗
║ IDPapel ║ IDCientífico ║
╠═══════════╬═════════════╣
║ 10 ║ 1 ║
╠═══════════╬═════════════╣
║ 11 ║ 1 ║
╠═══════════╬═════════════╣
║ 12 ║ 2 ║
╠═══════════╬═════════════╣
║ 13 ║ 3 ║
╚═══════════╩═════════════╝

TABLA CIENTÍFICOS // contiene ID de los científicos y sus nombres
╔═════════════╦════════════════╗
║ IDCientífico ║ NombreCientífico ║
╠═════════════╬════════════════╣
║ 1 ║ Tikola Nesla ║
╠═════════════╬════════════════╣
║ 2 ║ Carie Murie ║
╠═════════════╬════════════════╣
║ 3 ║ Nsaac Iewton ║
╚═════════════╩════════════════╝

Estoy buscando una consulta SELECT que imprima los nombres de los científicos y cuántas veces lanzaron un papel científico, el resultado deseado debe ser este:

ContadorDePapelesPorCientífico NombreDelCientífico
————————- ————-
2 Tikola Nesla
1 Carie Murie
1 Nsaac Iewton

Pude imprimir solo el recuento de papeles por científico usando esto:

SELECT COUNT(IDPapel) FROM PAPEL GROUP BY IDCientífico;

Pero esto no funciona:

SELECT COUNT(IDPapel), NombreCientífico FROM PAPEL, CIENTÍFICOS WHERE CIENTÍFICOS.IDCientífico=PAPEL.IDCientífico GROUP BY PAPEL.IDCientífico;

ERROR en la línea 1:
ORA-00979: no es una expresión GROUP BY

¿Qué es una “expresión GROUP BY” y por qué mi consulta no es una? ¿Qué consulta alternativa podría usar?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Una “expresión GROUP BY” es una instrucción que le dice a SQL qué columna o columnas agrupar los resultados al utilizar funciones agregadas como COUNT. En la segunda consulta, la instrucción GROUP BY solo incluye PAPER.ScientistID, pero no la columna ScientistName seleccionada en la instrucción SELECT. Esto causa el error “no es una expresión GROUP BY”.

    Para solucionarlo, la instrucción SELECT debería incluir la columna ScientistName y la instrucción GROUP BY debería incluir ambas columnas de la siguiente manera:

    SELECT COUNT(PaperID) AS CountOfPapersPerScientist, ScientistName 
    FROM PAPER 
    JOIN SCIENTISTS ON SCIENTISTS.ScientistID=PAPER.ScientistID 
    GROUP BY SCIENTISTS.ScientistID, ScientistName;
    

    Esta consulta une las tablas PAPER y SCIENTISTS y agrupa el resultado por ScientistID y ScientistName. También utiliza la palabra clave AS para darle al resultado COUNT(PaperID) el alias “CountOfPapersPerScientist” para que coincida con la salida deseada.

Comments are closed.