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

Sumar registros no duplicados usando DISTINCT en MySQL

Estas en el tema de Sumar registros no duplicados usando DISTINCT en MySQL en el foro de Mysql en Foros del Web. Hola a todos, estoy desarrollando una pequeña aplicacion web y en mi tabla `Tabla Productos` de mi base de datos mysql, tengo registros duplicados, pero ...
  #1 (permalink)  
Antiguo 02/08/2011, 14:38
Avatar de ozcarcalle  
Fecha de Ingreso: julio-2011
Ubicación: Piura
Mensajes: 3
Antigüedad: 12 años, 9 meses
Puntos: 0
Pregunta Sumar registros no duplicados usando DISTINCT en MySQL

Hola a todos, estoy desarrollando una pequeña aplicacion web y en mi tabla `Tabla Productos` de mi base de datos mysql, tengo registros duplicados, pero para impedir que esto suceda cuando realizo mis consultas hago uso de DISTINCT, aplico el distinct para el campo Invoice

asi de esta manera

Código SQL:
Ver original
  1. SELECT DISTINCT(Invoice)
  2. FROM `Tabla Productos`
  3. WHERE Campaña='201112' AND Zona='235'


Todo me a ido bien con el DISTINCT, ahora un pequeño problema que me está volviendo loco

Lo que pasa es que tengo q sumar el numero de cajas, pero en mi tabla existen registros duplicados, y creo que tengo que usar el DISTINCTI asi de esta manera dentro de la sentencia where

Código SQL:
Ver original
  1. SELECT SUM(`Cajas`) AS total
  2. FROM `Tabla Productos`
  3. WHERE Campaña='201112' AND Zona='235' AND DISTINCT(Invoice)

Es es el código que estoy utilizando y tal parece que me sale error, solo quiero sumar las cajas pero de los registros no duplicados y yo creo que debe ir en where.

Necesito de su ayuda, es mi primer tema que publico, espero me respondan, gracias.

  #2 (permalink)  
Antiguo 02/08/2011, 14:48
Avatar de ramiro_md  
Fecha de Ingreso: septiembre-2008
Mensajes: 274
Antigüedad: 15 años, 7 meses
Puntos: 26
Respuesta: Sumar registros no duplicados usando DISTINCT en MySQL

Por empezar el where esta mal, no le estas diciendo la tabla de la bd a la query, solo la columna. Asi que el where sería así: "Tabla Productos.Campaña".
Trata de no poner espacios a los nombres y de usar alias en los FROM's.
Por otro lado, en DISTINCT no sé si puede ir en el WHERE.
Te emprolijo la primer consulta con las cosas que te mencione arriba:
Código SQL:
Ver original
  1. SELECT DISTINCT(Invoice)
  2. FROM `Tabla Productos` AS prod
  3. WHERE prod.Campaña='201112' AND prod.Zona='235'
Podrías subir la estructura de tu tabla así nos guiamos mejor para ayudartE?
Saludos.

EDit: tampoco uses caracteres españoles cuando creas bases y sistemas. Como haría un inglés para ejecutar una consulta en tu sistema? jeje
  #3 (permalink)  
Antiguo 02/08/2011, 14:51
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Sumar registros no duplicados usando DISTINCT en MySQL

Hola ozcarcalle

Si te hubieras tomado 5 minutos para leer la documentación de mySQL podrías encontrar que la sintaxis para la función SUM es

Código:
SUM([DISTINCT] expr)
Es decir, dentro del sum es donde se indica la palabra DISTINCT para indicar que no contabilice registros duplicados.

Aquí hay un ejemplo completo de su utilización:

Código MySQL:
Ver original
  1. mysql> INSERT INTO TuTabla VALUES (1), (1), (2), (2), (3);
  2. Query OK, 5 rows affected (0.03 sec)
  3. Records: 5  Duplicates: 0  Warnings: 0
  4.  
  5. mysql> SELECT * FROM TuTabla;
  6. +-------+
  7. | campo |
  8. +-------+
  9. |     1 |
  10. |     1 |
  11. |     2 |
  12. |     2 |
  13. |     3 |
  14. +-------+
  15. 5 rows in set (0.00 sec)
  16.  
  17. mysql> SELECT DISTINCT campo FROM TuTabla;
  18. +-------+
  19. | campo |
  20. +-------+
  21. |     1 |
  22. |     2 |
  23. |     3 |
  24. +-------+
  25. 3 rows in set (0.00 sec)
  26.  
  27. mysql> SELECT SUM(campo) FROM TuTabla;
  28. +------------+
  29. | SUM(campo) |
  30. +------------+
  31. |          9 |
  32. +------------+
  33. 1 row in set (0.00 sec)
  34.  
  35. mysql> SELECT SUM(DISTINCT campo) FROM TuTabla;
  36. +---------------------+
  37. | SUM(DISTINCT campo) |
  38. +---------------------+
  39. |                   6 |
  40. +---------------------+
  41. 1 row in set (0.00 sec)

Saludos
Leo.
  #4 (permalink)  
Antiguo 02/08/2011, 14:52
Avatar de ramiro_md  
Fecha de Ingreso: septiembre-2008
Mensajes: 274
Antigüedad: 15 años, 7 meses
Puntos: 26
Respuesta: Sumar registros no duplicados usando DISTINCT en MySQL

Ahora que releeo tu enunciado. Debes tener algo fiero el diseño de la db porque la tabla que contiene productos no debería contener repetidos ni mucho menos stocks. Deberían ser 2 tablas diferentes.
Salutes.
  #5 (permalink)  
Antiguo 02/08/2011, 15:54
Avatar de ozcarcalle  
Fecha de Ingreso: julio-2011
Ubicación: Piura
Mensajes: 3
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: Sumar registros no duplicados usando DISTINCT en MySQL

Gracias por sus respuestas Ramiro y Leo.

Les cuento que es un proyecto para una empresa que distribuye productos AVON, y trabajan con un software hecho en Power Builder con MS Acces, y ahora quieren cambiar de entorno, es decir visuliazar su información de entradas y salidas via online mediante la web, y está un poco dificultoso por que el nombre de las tablas tienen espacios y cada dia se subirá la información en formato sql, para ello utilizo un conversor de *.mdb a *.sql llamado MySQL Migration Toolkit y siempre se chancará la información, es por eso que se hace uso de el DISTINCT.


Cita:
Iniciado por leonardo_josue Ver Mensaje
Hola ozcarcalle

Si te hubieras tomado 5 minutos para leer la documentación de mySQL podrías encontrar que la sintaxis para la función SUM es

Código:
SUM([DISTINCT] expr)
Es decir, dentro del sum es donde se indica la palabra DISTINCT para indicar que no contabilice registros duplicados.

Aquí hay un ejemplo completo de su utilización:

...

Saludos
Leo.
He buscado documentación de SUM y no e podido resolver mi problema :(

Última edición por ozcarcalle; 03/08/2011 a las 17:40
  #6 (permalink)  
Antiguo 08/08/2011, 15:03
Avatar de ozcarcalle  
Fecha de Ingreso: julio-2011
Ubicación: Piura
Mensajes: 3
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: Sumar registros no duplicados usando DISTINCT en MySQL

Despues de tanto buscar y buscar en las faqs de este foro, al fin he logrado sumar registros no duplicados, mediante esta consulta.

Código MySQL:
Ver original
  1. SELECT SUM(Qty) AS SumaDeQty FROM
  2. (
  3.      SELECT DISTINCT(Invoice), Qty
  4. FROM `Tabla PorFuera Importadas`
  5. WHERE Campaña='201112' AND Zona='226' AND Secc='1'
  6.  
  7. ) AS tabla

Hago el select para mostrar la suma, y dentro de los parentesis hago el distinct para impedir que sume los duplicados :)

Etiquetas: distinct
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 04:46.