FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
SELECT con SUM y COUNT
Estoy teniendo un problema al que no sé como meterle mano. Tego este query:
Código PHP:
Si hago el SELECT sólo con el COUNT (SELECT B.Nombre, COUNT(C.Codigo)) o sólo con el SUM (SELECT B.Nombre, SUM(D.Censo)) me salen los resultados que he puesto más arriba, pero si combino ambas operaciones tal como en el código me da como resultado 90.700 para el COUNT y 52.797.377 para el SUM. Y me estoy volviendo loco tratando de averiguar porqué salen esos resultados. |
#2
|
|||
|
|||
Yque resultado muestra si pones
|
#3
|
||||
|
||||
#4
|
||||
|
||||
El problema creo que ha de estar en como relacionar las tablas Junta y Mesas, que al poner ambos contadores pasa más de una vez por cada registro. Si no es así, no lo entiebdo.
|
#5
|
||||
|
||||
Por lo tanto debes poner el codigo en el group by. (y pon un order by para que la consulta sea estable)
La otra, pon un ejemplo de los datos con valores duplicados pa que veamos como estan...
__________________
El malabarista. |
#6
|
|||
|
|||
Perdona mi ignorancia pero, ¿podrías comentar esto??
|
#7
|
||||
|
||||
El SQL que envías es teoricamente igual a este con JOINS. Pruébalo y nos cuentas...
|
#8
|
||||
|
||||
Sql NO GARANTIZA EL ORDEN DE LOS RESULTADOS. Puedes obtener un resultado diferente con el tiempo, por ejemplo, si se mueven las filas o se cambian de puesto. Ademas los optimizadores pueden insertar ORDERS BY como lo vean que puede no concordar con lo que piensas. A menos que tengas un CLUSTERED INDEX o un SORT BY definido no se puede aseverar que el resultado sera estable.
__________________
El malabarista. |
#9
|
||||||
|
||||||
Gracias por viestras respuestas.
Cita:
Cita:
Cita:
Con el código que puse yo en el primer mensaje sale esto: Cita:
Cita:
Cita:
Última edición por Angel.Matilla fecha: 08-06-2018 a las 11:19:19. |
#10
|
||||
|
||||
Te sugiero hacer un SQL que te devuelva las lineas que va a sumar (Básicamente quitar el GROUP BY) y ver que sale.
Seguramente veras que se repite 10 veces algún "Identificador" por cada "NOMBRE". Por los resultados que muestras, me docy cuenta que está multiplicando por 10 el valor que consideras correcto. Esto implica que cada "NOMBRE" se está repitiendo 10 veces con esta forma de unir las tablas. Yo supongo que debe haber
Si este es el problema, deberás corregir el SQL para que te devuelva 1 solo registro por cada DATLOC. |
#11
|
||||
|
||||
Estoy corrigiendo ahora la estructira de las tabals (me he dado cuenta que me faltan algunas columnas en las definiciones), pero en cuanto termine de adaptarlas probaré lo que me dices. Gracias.
|
#12
|
||||
|
||||
Cita:
No obstante, como comentaba el otro día, he tenido que modificar un poco la estructura de las tablas (básicamente he tenido que añadir un nuevo campo en varias de ellas), pero sigo sin conseguir lo que busco. He cambiado el query a este otro, ya con las tablas modificadas, para comprobar la sugerencia de duilioisola: Código PHP:
En total salen 100 líneas, que es correcto y los datos que muestra están bien. Pero si ahora si hago SÓLO el SUM(D.Censo) con SELECT DISTINCT B.Nombre, SUM(D.Censo), en vez de los 58211 que debería dar salen los 52 millones. Perplejo estoy. |
#13
|
||||
|
||||
Pero nada que pones los datos iniciales, solo los resultados.
Haznos unas tablas con ejemplos representativos de las filas.
__________________
El malabarista. |
#14
|
||||
|
||||
Supongo entonces, que deberás hacer subselects:
Básicamente, haces un select que te devuelva lo que quieres (SELECT que solo devuelve nombre de junta agrupado). Por cada registro haces un select que en el where filtre lo que corresponda con ese registro. Es importante que solo devuelve un solo resultado. (SELECT SUM(), COUNT(), FIRST 1) Ejemplo:
|
#15
|
||||
|
||||
Gracias por la idea. Estaba dándole vueltas a algo similar desde ayer pero no se me ocurría como. Voy a probarlo ahora mismo.
|
#16
|
||||
|
||||
¡Perfecto! Me ha quedado así:
Código PHP:
|
#17
|
||||
|
||||
Sugerencia de estilo:
|
#18
|
||||
|
||||
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#19
|
||||
|
||||
Herramientas | Buscar en Tema |
Desplegado | |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
¿Select count sin group by? | zazexx | SQL | 5 | 07-08-2008 16:27:11 |
Ayuda con Select Count | aanil | SQL | 16 | 13-05-2008 23:12:34 |
Mejorar SELECT COUNT | ferjavrec2 | SQL | 0 | 01-06-2007 22:00:00 |
valor de SELECT COUNT | maruenda | SQL | 15 | 25-05-2007 23:58:38 |
Select Count (distinct X) | lunatiko | SQL | 2 | 17-10-2004 22:06:45 |
|