Autor Tema: [Ayuda con SQL] Listar solo las filas unicas?  (Leído 14134 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado vlad

  • Global Moderator
  • The Communiter-
  • *
  • Mensajes: 6351
    • Qualium.net
[Ayuda con SQL] Listar solo las filas unicas?
« : junio 01, 2008, 07:19:38 pm »
Tengo una consulta, tengo una pequeña base de datos que tiene una columna con datos en esta forma:


Col
Valor1
Valor1
Valor3
Valor3
Valor2
Valor4
Valor2
Valor1
Valor1
Valor4
etc.


Pero quisiera saber como hacer para listar solo los valores no repetidos, por ej. que me quedara asi:

Col
Valor1
Valor1
Valor2
Valor3
Valor4
etc.


Estuve probando con 'select count (distinct columna) from tabla' pero eso solo me cuenta el numero de valores distintos, yo necesito saber cuales son :)

Gracias de antemano.

Desconectado vlad

  • Global Moderator
  • The Communiter-
  • *
  • Mensajes: 6351
    • Qualium.net
Re: [Ayuda con SQL] Listar solo las filas unicas?
« Respuesta #1 : junio 01, 2008, 07:22:33 pm »
 :phew: ups...
Se me ocurrio quitar el 'count' y probar con 'select distinct columna from tabla'  y me funcionó jejeje...

Bueno, seguro que tendre muchas otras dudas asi que voy a ocupar este tema para hacerles consultas sobre SQL.  :thumbsup:

Desconectado tekun

  • -^- Elite Silver -^-
  • The Communiter-
  • *
  • Mensajes: 3221
  • Han convertido mi casa en cueva de mercaderes!!!!
    • www.tekun.es
Re: [Ayuda con SQL] Listar solo las filas unicas?
« Respuesta #2 : junio 02, 2008, 11:13:37 am »
hay otra que también funciona, solo que tiene otras bondades....

[gropu by]

tabla con los siguientes datos

Col
Valor1
Valor1
Valor3
Valor3
Valor2
Valor4
Valor2
Valor1
Valor1
Valor4
valor5
valor6

- sacar todos los resultados una vez
Citar
select col
from tabla
group by col

resultado


Col     
Valor1
Valor2
Valor3
Valor4
Valor5
Valor6

- sacar todos los resultados, sabiendo cuantas veces esta cada uno
Citar
select col , count(*) cantidad
from tabla
group by col

resultado

Col     cantidad
Valor1     4
Valor2     2
Valor3     2
Valor4     2
Valor5     1
Valor6     1

- sacar solamente los que estan duplicados o más de una vez
Citar
select col
from tabla
group by col
having count(col)>1

resultado

Col     
Valor1
Valor2
Valor3
Valor4

- sacar solo los que estan una vez
Citar
select col
from tabla
group by col
having count(col)=1

resultado

Col     
Valor5
Valor6

etc.......

...espero te sirva :thumbsup:
« Última Modificación: junio 02, 2008, 11:15:19 am por tekun »
lo difícil lo hago rápido, con lo imposible, casi siempre me tardo un poquito

Desconectado vlad

  • Global Moderator
  • The Communiter-
  • *
  • Mensajes: 6351
    • Qualium.net
Re: [Ayuda con SQL] Listar solo las filas unicas?
« Respuesta #3 : junio 02, 2008, 12:10:16 pm »
 :shock: muchas gracias!, en especial este me va a servir: "- sacar todos los resultados, sabiendo cuantas veces esta cada uno"

Desconectado Chepix

  • Sv Member
  • ***
  • Mensajes: 175
Re: [Ayuda con SQL] Listar solo las filas unicas?
« Respuesta #4 : junio 02, 2008, 12:22:47 pm »
bueno aprovechan yo ando en esto de sql tambien por ahi alguien no tendra alguna base ded atos para hacer pruebas o de donde la podemos obtener????

la q trae el sql 2005 es como medio rarona no me parece mucho si alguien tiene una por ahi para compartir a versi nos hace el cachiflin

Desconectado rdoggsv

  • Administrator
  • The Communiter-
  • *
  • Mensajes: 6530
  • "Once you go arch , u never go back"
    • SV CommunitY

Desconectado ruiz

  • Sv Full Member
  • *
  • Mensajes: 729
Re: [Ayuda con SQL] Listar solo las filas unicas?
« Respuesta #6 : junio 02, 2008, 01:24:48 pm »
puedes usar el DISTINCT

SELECT DISTINCT col FROM tabla

Desconectado vlad

  • Global Moderator
  • The Communiter-
  • *
  • Mensajes: 6351
    • Qualium.net
Re: [Ayuda con SQL] Listar solo las filas unicas?
« Respuesta #7 : junio 08, 2008, 04:37:38 pm »
Gracias tekun, +K :), gracias ruiz tambien  :thumbsup:.

Ahora tengo otra consulta:

Pongamos un ejemplo, digamos que tengo esta consulta:

SELECT libro, capitulo, texto FROM tDatos WHERE (libro = "tal nombre") and (capitulo = "tal cap")

Pero sucede que a veces digamos no me interesa mostrar un capitulo en especifico, mas bien todos los de ese "libro"

Pense en hacer:

SELECT libro, capitulo, texto FROM tDatos WHERE (libro = "tal nombre") and (capitulo = "*")

Pensando que "*" significaria "Cualquier cosa". Sucede que o lo hago mal o estoy perdido XD.

Se que una solucion seria simplemente quitar el and (capitulo = "tal cap") de la consulta, pero me sale mas facil solo sustituir los valores que armar la consulta.

Espero que me de a entender, gracias  :thumbsup:

Desconectado Trance

  • Sv Vampire Team ® Founder
  • The Communiter-
  • *****
  • Mensajes: 1655
Re: [Ayuda con SQL] Listar solo las filas unicas?
« Respuesta #8 : junio 08, 2008, 05:03:47 pm »
cualquier cantidad de caracteres es: %

and capitulo like '%'

una forma podria ser:

and capitulo like  '%' || :NombreCapitulo ||'%'

donde :NombreCapitulo  es el parametro que se busca ej. capitulo 3
« Última Modificación: junio 08, 2008, 05:13:16 pm por Trance »

Desconectado vlad

  • Global Moderator
  • The Communiter-
  • *
  • Mensajes: 6351
    • Qualium.net
Re: [Ayuda con SQL] Listar solo las filas unicas?
« Respuesta #9 : junio 08, 2008, 05:11:33 pm »
cualquier cantidad de caracteres es: %

and capitulo like '%'

Gracias, funcionó a la perfección  :thumbsup: (+k)


Actualización: Tu ayuda me hizo buscar cual era mejor entre "Glob" y "Like" y encontré algo aun mejor:
http://web.utk.edu/~jplyon/sqlite/SQLite_optimization_FAQ.html Sección 5.5.1

Terminé reemplazando: and capitulo like '%' por and capitulo <> '', de esa forma creo que hace uso de indices y es mas eficiente  :yahoo:
« Última Modificación: junio 08, 2008, 05:43:50 pm por Vlad »

Desconectado rdoggsv

  • Administrator
  • The Communiter-
  • *
  • Mensajes: 6530
  • "Once you go arch , u never go back"
    • SV CommunitY
Re: [Ayuda con SQL] Listar solo las filas unicas?
« Respuesta #10 : junio 08, 2008, 09:48:57 pm »
si no necesitas delimitar los capitulos simplemente no pongas el and  :thumbsup:

Desconectado vlad

  • Global Moderator
  • The Communiter-
  • *
  • Mensajes: 6351
    • Qualium.net
Re: [Ayuda con SQL] Listar solo las filas unicas?
« Respuesta #11 : junio 08, 2008, 10:05:04 pm »
El problema con eso es que digamos tengo 3 condiciones:

Condicion1 AND Condicion2 AND Condicion3

Si digamos Condicion1 y Condicion3 dejan de importar, tendria que eliminar del 'query' las condiciones y me quedaria asi:

Condicion1 AND Condicion2 AND Condicion3

Lo que me daria error al solo intentar ejecutar "AND condicion2".

Y para evitar eso tendria que hacer un pequeño constructor que forme el query, lo cual seria mas dificil que reemplazar el "=" por "like '%'" o "glob *".

 :thumbsup:

Desconectado rdoggsv

  • Administrator
  • The Communiter-
  • *
  • Mensajes: 6530
  • "Once you go arch , u never go back"
    • SV CommunitY
Re: [Ayuda con SQL] Listar solo las filas unicas?
« Respuesta #12 : junio 08, 2008, 10:31:24 pm »
ah entonces es por otro motivo que las estas creando en el momento, pero si eso andas buscando, las condiciones se deberian de ir poniendo de principio a final, si no necesitas 3 condiciones deberias de hacer tu constructor de query que la ultima elimine no las primeras, aunque si te funciona con los like y no te queres complicar la vida esta bien, pero como siempre veo que queres dejar las cosas bien retocadas  :thumbsup: me puse a pensar que estabas perdiendo velocidad usando un like innecesario :)

Desconectado vlad

  • Global Moderator
  • The Communiter-
  • *
  • Mensajes: 6351
    • Qualium.net
Re: [Ayuda con SQL] Listar solo las filas unicas?
« Respuesta #13 : junio 08, 2008, 10:39:53 pm »
Sabes que me acabas de iluminar  :rofl: estaba pensando mas en como eliminar lo que ya tenia en el query en lugar de ir apilando las condiciones segun las iba necesitando  :rofl:

PD: si, al leer lo de las optimizaciones tiré el like y el glob, use "Condicion <> '' " para las que eran de texto y "Condicion > 0" para las que eran de numeros.

Ya voy a hacer el constructor del query de esa forma que sugeris, me parece mas apropiado y mas estetico, gracias  :thumbsup:

Desconectado vlad

  • Global Moderator
  • The Communiter-
  • *
  • Mensajes: 6351
    • Qualium.net
Re: [Ayuda con SQL] Listar solo las filas unicas?
« Respuesta #14 : agosto 27, 2008, 04:43:50 pm »
Una nueva consulta:

Tengo un campo tipo DATETIME, como selecciono solo los que esten entre determinado rango de fechas?

Por ej. las que esten dentro del mes actual

Algo asi como:

SELECT * FROM tMensualidades WHERE Codigo="XXX" AND Mes BETWEEN date('now','start of month') AND date('now','start of month','+1 month','-1 day');

?