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

[SOLUCIONADO] Duda SQL con DISTINCT

Estas en el tema de Duda SQL con DISTINCT en el foro de Mysql en Foros del Web. Buenas, Tengo un problema al usar un SELECT con DISTINCT. La tabla tiene tres campos: a, b y c Si hago esta consulta devuelve los ...
  #1 (permalink)  
Antiguo 03/11/2014, 04:00
 
Fecha de Ingreso: abril-2012
Mensajes: 124
Antigüedad: 12 años
Puntos: 3
Duda SQL con DISTINCT

Buenas,

Tengo un problema al usar un SELECT con DISTINCT.

La tabla tiene tres campos: a, b y c

Si hago esta consulta devuelve los campos a y b que tienen valores no repetidos:

Código SQL:
Ver original
  1. SELECT DISTINCT a,b FROM test

Cómo tendría que hacerlo para que además devolviese el campo 'c' aunque tenga valores repetidos?

He probado con eso y no funciona

Código SQL:
Ver original
  1. SELECT DISTINCT a,b FROM test GROUP BY c
  2. SELECT (SELECT DISTINCT a,b FROM test), c FROM test
  3. SELECT *, DISTINCT a,b ...
  4. SELECT c, DISTINCT a,b ...

Seguramente será una tontería, pero no lo he visto en ningún manual.

Gracias.
  #2 (permalink)  
Antiguo 03/11/2014, 04:03
 
Fecha de Ingreso: abril-2012
Mensajes: 124
Antigüedad: 12 años
Puntos: 3
Respuesta: Duda SQL con DISTINCT

Perdón, ya lo solucioné.

Código SQL:
Ver original
  1. SELECT * FROM test GROUP BY a,b
  #3 (permalink)  
Antiguo 03/11/2014, 04:18
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Duda SQL con DISTINCT

Ten en cuenta que eso te devolverá el primer valor de C por cada A, B agrupado, y no el ultimo o más reciente.
puede darte resultados erróneos de acuerdo a lo que busques.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 03/11/2014, 04:43
 
Fecha de Ingreso: abril-2012
Mensajes: 124
Antigüedad: 12 años
Puntos: 3
Respuesta: Duda SQL con DISTINCT

Creo que ya es lo que buscaba, hace lo mismo que
Código SQL:
Ver original
  1. SELECT DISTINCT a,b FROM test
pero añadiendo el valor del campo 'c' del primero de cada grupo.

En realidad simplifiqué mucho la tabla, en vez de a,b y c sería id_empresa, nombre_sucursal y id_comercial, dónde cada comercial puede tener varias sucursales asignadas y cada sucursal varios comerciales.

La consulta sólo debe indicar qué sucursales de cada empresa ya tienen un comercial asignado y listarlas.

Es una tabla mal diseñada, ya que nombre_sucursal debería cambiarse por id_sucursal, pero mi trabajo no me permite estos cambios.

Gracias.
  #5 (permalink)  
Antiguo 04/11/2014, 06:35
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Duda SQL con DISTINCT

Creo que te confundes tanto con el DISTINCT como con el GROUP BY

Pongamos un ejemplo

a,b,c
1,2,3
1,2,3
1,2,4
1,2,5

Código MySQL:
Ver original
  1. SELECT DISTINCT a,b FROM test;
a,b
1,2

Código MySQL:
Ver original
  1. SELECT DISTINCT a,b,c FROM test;
o lo que es lo mismo
Código MySQL:
Ver original 

a,b,c
1,2,3
1,2,4
1,2,5

Código MySQL:
Ver original
  1. SELECT * FROM test GROUP BY a,b

a,b,c
1,2,3

o

a,b,c
1,2,4

o

a,b,c
1,2,5

depende de el momento y de las condiciones físicas de almacenamiento de tus datos en el disco, lo que quizas depende de la última canción que hayas escuchado en el itunes.

DISTINCT retorna registros con combinaciones únicas de los valores de los campos que pidas.

GROUP BY agrupa registros por los campos que definas y aplica una función de agregado a los otros campos en función de lo que pidas. Si no indicas ninguna función sobre los campos que estes pidiendo fuera de los que definen la agrupación retornara el primer valor que encuentre, igual que SELECT retorna el primer registro que encuentra, no siempre es el mismo, si no defines un ORDER BY.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 04/11/2014 a las 06:45
  #6 (permalink)  
Antiguo 06/11/2014, 14:54
 
Fecha de Ingreso: abril-2012
Mensajes: 124
Antigüedad: 12 años
Puntos: 3
Respuesta: Duda SQL con DISTINCT

Gracias, Quim, por tu aclaración.
Código SQL:
Ver original
  1. SELECT * FROM test GROUP BY a,b
devuelve la primera y segunda columna iguales que en
Código SQL:
Ver original
  1. SELECT DISTINCT a,b FROM test;
pero con algún valor de c.

Es precisamente lo que trato de hacer, listar todas las combinaciones 'a,b' distintas y saber si tienen algun valor en 'c' o no (NULL) para poder poner un linc a 'listar detalles' y a 'añadir...' según el caso.

Según dices será mejor usar
Código SQL:
Ver original
  1. SELECT * FROM test GROUP BY a,b ORDER BY c DESC
así me aseguro de que el valor 'c' no será NULL si hay algún otro valor disponible.

Voy a hacer algunas pruebas pero creo que ya está.

Etiquetas: myslq, select, sql
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 06:25.