Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Conteo de Pregutnas por Materia

Estas en el tema de Conteo de Pregutnas por Materia en el foro de Mysql en Foros del Web. tengo dos tablas, una de materias(id_materia,materia) y otra de preguntas(id_pregunta,id_materia) lo que requiero hacer es contar cuantas preguntas tiene cada materia, lo logro pero con ...
  #1 (permalink)  
Antiguo 16/03/2010, 11:38
Avatar de tampiko  
Fecha de Ingreso: marzo-2006
Ubicación: Mexico, en Villa hace calor, prefiero tampiko
Mensajes: 17
Antigüedad: 18 años, 9 meses
Puntos: 0
Busqueda Conteo de Pregutnas por Materia

tengo dos tablas, una de materias(id_materia,materia) y otra de preguntas(id_pregunta,id_materia)

lo que requiero hacer es contar cuantas preguntas tiene cada materia, lo logro pero con el campo id_materia de la misma tabla de preguntas, lo que requiero es que me diga la materia, campo materia de la tabla materias. esta consulta no me sirve

SELECT
M.MATERIA
COUNT(P.ID_PREGUNTA)
FROM
PREGUNTAS P,
MATERIAS M
INNER JOIN
M.ID_MATERIA=P.ID_MATERIA
GROUP BY
P.ID_MATERIA


en cambio esta consulta si funciona pero solo me trae el id de la materia y yo requiero el nombre de la materia:
SELECT
P.ID_MATERIA,
COUNT(P.ID_PREGUNTA)
FROM
PREGUNTAS P
GROUP BY
P.ID_MATERIA

he intentado iner joins, un where normal, pero no he logrado resolverlo, espero puedan ayudarme, gracias.
  #2 (permalink)  
Antiguo 16/03/2010, 12:20
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 10 meses
Puntos: 360
Respuesta: Conteo de Pregutnas por Materia

Código SQL:
Ver original
  1. SELECT
  2. M.MATERIA
  3. COUNT(P.ID_PREGUNTA)
  4. FROM
  5. PREGUNTAS P
  6. INNER JOIN
  7. MATERIAS M
  8. ON
  9. M.ID_MATERIA=P.ID_MATERIA
  10. GROUP BY
  11. M.MATERIA

que tal esta?
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 16/03/2010, 12:25
Avatar de tampiko  
Fecha de Ingreso: marzo-2006
Ubicación: Mexico, en Villa hace calor, prefiero tampiko
Mensajes: 17
Antigüedad: 18 años, 9 meses
Puntos: 0
Respuesta: Conteo de Pregutnas por Materia

no, no me funciona, no se ejecuta la consulta, gracias por el apoyo :D
  #4 (permalink)  
Antiguo 16/03/2010, 12:42
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 10 meses
Puntos: 360
Respuesta: Conteo de Pregutnas por Materia

Cita:
no, no me funciona, no se ejecuta la consulta, gracias por el apoyo :D
No dices que te sale ni cual es el error.

Dices que tienes 2 tablas así
Código MySQL:
Ver original
  1. mysql> desc materias;
  2. +------------+---------+------+-----+---------+-------+
  3. | Field      | Type    | Null | Key | Default | Extra |
  4. +------------+---------+------+-----+---------+-------+
  5. | id_materia | int(11) | YES  |     | NULL    |       |
  6. | materia    | text    | YES  |     | NULL    |       |
  7. +------------+---------+------+-----+---------+-------+
  8. 2 rows in set (0.01 sec)
  9.  
  10. mysql> desc preguntas;
  11. +-------------+---------+------+-----+---------+-------+
  12. | Field       | Type    | Null | Key | Default | Extra |
  13. +-------------+---------+------+-----+---------+-------+
  14. | id_pregunta | int(11) | YES  |     | NULL    |       |
  15. | id_materia  | int(11) | YES  |     | NULL    |       |
  16. +-------------+---------+------+-----+---------+-------+
  17. 2 rows in set (0.01 sec)

si tienes estos registros

Código MySQL:
Ver original
  1. mysql> select *from materias;
  2. +------------+-------------+
  3. | id_materia | materia     |
  4. +------------+-------------+
  5. |          1 | español     |
  6. |          2 | matematicas |
  7. |          3 | biologia    |
  8. +------------+-------------+
  9. 3 rows in set (0.00 sec)
  10.  
  11. mysql> select *from preguntas;
  12. +-------------+------------+
  13. | id_pregunta | id_materia |
  14. +-------------+------------+
  15. |           1 |          1 |
  16. |           2 |          1 |
  17. |           3 |          1 |
  18. |           4 |          2 |
  19. |           5 |          2 |
  20. |           6 |          3 |
  21. +-------------+------------+
  22. 6 rows in set (0.00 sec)

Significa que deben haber 3 preguntas de español, 2 de matemáticas y 1 de biología

Si ejecutas la consulta que te doy lo obtienes

Código MySQL:
Ver original
  1. mysql> SELECT
  2.     -> M.MATERIA,
  3.     -> COUNT(P.ID_PREGUNTA)
  4.     -> FROM
  5.     -> PREGUNTAS P
  6.     -> INNER JOIN
  7.     -> MATERIAS M
  8.     -> ON
  9.     -> M.ID_MATERIA=P.ID_MATERIA
  10.     -> GROUP BY
  11.     -> M.MATERIA;
  12. +-------------+----------------------+
  13. | MATERIA     | COUNT(P.ID_PREGUNTA) |
  14. +-------------+----------------------+
  15. | biologia    |                    1 |
  16. | español     |                    3 |
  17. | matematicas |                    2 |
  18. +-------------+----------------------+
  19. 3 rows in set (0.00 sec)

Si no es eso, te estoy entendiendo mal.

saludos tampiko
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 16/03/2010, 12:54
Avatar de tampiko  
Fecha de Ingreso: marzo-2006
Ubicación: Mexico, en Villa hace calor, prefiero tampiko
Mensajes: 17
Antigüedad: 18 años, 9 meses
Puntos: 0
Respuesta: Conteo de Pregutnas por Materia

oye!! algo hiciste!! jeje, el codigo anterior no me funcionaba, este que pones jala perfectamente, muchisisisisimas gracias :D llevaba ya 3 dias con esta bendita consulta y tu la has resuelto en 2 patadas, y me llamo programador, ja!

muchas gracias le codigo funciona de lujo, mil gracias, la unica forma que se como agradecertelo es ayudando en los foros que pueda para hacer de esta comunidad la mejor, mil gracias.

por cierto, el foro se queda asi o tengo que cerrarlo? como lo cierro? :P

mil gracias.
  #6 (permalink)  
Antiguo 16/03/2010, 12:56
Avatar de tampiko  
Fecha de Ingreso: marzo-2006
Ubicación: Mexico, en Villa hace calor, prefiero tampiko
Mensajes: 17
Antigüedad: 18 años, 9 meses
Puntos: 0
Respuesta: Conteo de Pregutnas por Materia

y si necesitara el campo id_materia tambien? se lo agrege pero quack!! truena :(
dice:
Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause)
  #7 (permalink)  
Antiguo 16/03/2010, 13:13
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 10 meses
Puntos: 360
Respuesta: Conteo de Pregutnas por Materia

Cita:
por cierto, el foro se queda asi o tengo que cerrarlo? como lo cierro? :P
Así queda. después de 6 meses, si alguien postea, un moderador se encarga de cerrarlo.

Me alegra que te haya funcionado.

Cita:
y si necesitara el campo id_materia tambien? se lo agrege pero quack!! truena :(
dice:
Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause)
Donde se lo agregaste?

yo lo hice así y no tuve problemas

Código MySQL:
Ver original
  1. mysql> SELECT
  2.     -> M.ID_MATERIA,
  3.     -> M.MATERIA,
  4.     -> COUNT(P.ID_PREGUNTA)
  5.     -> FROM
  6.     -> PREGUNTAS P
  7.     -> INNER JOIN
  8.     -> MATERIAS M
  9.     -> ON
  10.     -> M.ID_MATERIA=P.ID_MATERIA
  11.     -> GROUP BY
  12.     -> M.MATERIA
  13.     -> ORDER BY M.ID_MATERIA;
  14. +------------+-------------+----------------------+
  15. | ID_MATERIA | MATERIA     | COUNT(P.ID_PREGUNTA) |
  16. +------------+-------------+----------------------+
  17. |          1 | español     |                    3 |
  18. |          2 | matematicas |                    2 |
  19. |          3 | biologia    |                    1 |
  20. +------------+-------------+----------------------+
  21. 3 rows in set (0.00 sec)
  22.  
  23. mysql>

El order by es opcional.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #8 (permalink)  
Antiguo 16/03/2010, 13:28
Avatar de tampiko  
Fecha de Ingreso: marzo-2006
Ubicación: Mexico, en Villa hace calor, prefiero tampiko
Mensajes: 17
Antigüedad: 18 años, 9 meses
Puntos: 0
Respuesta: Conteo de Pregutnas por Materia

si, solo se lo agregue al inicio del select como lo pones tu pero me truena, ya hasta la cabeza me duele, muchisimas gracias por todo tu apoyo master, se nota que soy nuevo en este foro verdad? jeje

gracias, solo como comentario, esstoy usando firebird, pero mi pregunta la meti en mysql, no creo que el problema sea por ahi o si? digo, es consulta SQL a fin de cuentas, habran diferencias en sql server y oracle pero en firebird y mysql es casi que igual no?

gracias, seguire revisando el bendito sql, mil gracias, en verdad me ayudaste.
  #9 (permalink)  
Antiguo 16/03/2010, 13:35
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 10 meses
Puntos: 360
Respuesta: Conteo de Pregutnas por Materia

Cita:
gracias, solo como comentario, esstoy usando firebird, pero mi pregunta la meti en mysql, no creo que el problema sea por ahi o si? digo, es consulta SQL a fin de cuentas, habran diferencias en sql server y oracle pero en firebird y mysql es casi que igual no?
En este caso si es por eso..

Mysql a diferencia de otros DBMS puede realizar agrupaciones de funciones por un solo campo sin importar que haya mas campos en la select.

Si es en firebird agregale el campo también al group by.
Código MySQL:
Ver original
  1. M.ID_MATERIA,M.MATERIA,
  2. COUNT(P.ID_PREGUNTA)
  3. PREGUNTAS P
  4. MATERIAS M
  5. M.ID_MATERIA=P.ID_MATERIA
  6. M.MATERIA,M.ID_MATERIA;

En pocas palabras... cada campo adicional que le metas a la consulta, debe ser especificado en el group by.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #10 (permalink)  
Antiguo 16/03/2010, 13:37
Avatar de tampiko  
Fecha de Ingreso: marzo-2006
Ubicación: Mexico, en Villa hace calor, prefiero tampiko
Mensajes: 17
Antigüedad: 18 años, 9 meses
Puntos: 0
Respuesta: Conteo de Pregutnas por Materia

EL SQL ESTA ASI:

SELECT
M.ID_MATERIA,
M.MATERIA,
COUNT(P.ID_PREGUNTA)
FROM
PREGUNTAS P
INNER JOIN
MATERIAS M
ON
M.ID_MATERIA=P.ID_MATERIA
GROUP BY
M.MATERIA
ORDER BY
M.MATERIA ASC



LO QUE ME MANDA DE ERROR DICE ASI:

M.MATERIA ASC )
Message: isc_dsql_prepare failed

SQL Message : -104
Invalid token

Engine Code : 335544569
Engine Message :
Dynamic SQL Error
SQL error code = -104
Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause)
  #11 (permalink)  
Antiguo 16/03/2010, 13:39
Avatar de tampiko  
Fecha de Ingreso: marzo-2006
Ubicación: Mexico, en Villa hace calor, prefiero tampiko
Mensajes: 17
Antigüedad: 18 años, 9 meses
Puntos: 0
Respuesta: Conteo de Pregutnas por Materia

OK, POSTIE ANTES DE ACTUALIZAR LA PAGINA, SORRY, MIL GRACIAS, la consulta y los resultados ya estan bien, muchisimas gracias por tu tiempo y dedicacion, gracias.

gracias por existir gente como tu ;)

mil gracias. esta funcionando de lujo.
gracias.

Etiquetas: contar, count, materias
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:17.