SQL - Contar ocurrencias

 
Vista:

Contar ocurrencias

Publicado por oknarf (18 intervenciones) el 12/04/2015 16:13:53
Hola gente
Les cuento que estoy tratando de hacer una query para sacar ocurrencias, pero no logro encontrar la forma de hacerlo.

Tengo una base de la siguiente manera:

id, n1, n2, n3, n4, n5, n6

Cada columna desde n1 a n2 tiene numeros del 00 al 99.

Lo que estoy buscando es hacer una query que me diga cuantas ocurrencias hay en todas las columnas, por ejemplo:

Quiero saber cuantas veces se repiten los numeros 00 y 03, o 11, 22, 33, o 01, 02, 03 y 04 en todas las columnas. Tengo como 10 mil registros.

La idea es que me muestre que numeros de id son los que tienen las ocurrencias.

Me podrian ayudar por favor?

Muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Contar ocurrencias

Publicado por leonardo_josue (1173 intervenciones) el 13/04/2015 16:32:20
Hola oknarf:

No me queda claro qué es lo que estás esperando como resultado... hay algunas preguntas que tendrías que responder antes:

1. A qué te refieres con esto:

1
La idea es que me muestre que numeros de id son los que tienen las ocurrencias.


Es decir, ¿puedes tener id's repetidos (lo que implicaría una agrupación) o sólo un id 1 valores repetidos en las columnas?

2. cómo debería mostrarse la información??? es decir en forma de columnas o en forma de renglones,

3. Postea algunos datos de ejemplo (no los 10 mil que mencionas, con unos 5 o 10 registros es más que suficiente) y a partir de esos datos de ejemplo dinos qué es lo que estás esperando como salida.

4. (lo más importante) Postea algo de lo que intentaste hacer, no importa que tenga error, lo que interesa es saber que estás trabajando en la consulta.

5. Dinos con qué BD's estás trabajando, aunque la mayoría de los DBMS están basados en SQL, hay diferencias sintácticas muy importantes entre cada uno de ellos, por lo que este dato es muy importante para poder darte una respuesta puntual.

Dependiendo de lo que respondas, hay muchas formas para obtener esta consulta, unas más complicadas que otras. Puede ser que para ti el problema es claro y la explicación sea suficiente, pero no es así, entre más detalles nos puedas proporcionar más factible será que podamos ayudarte.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Contar ocurrencias

Publicado por oknarf (18 intervenciones) el 13/04/2015 17:24:39
Hola, y gracias por responder.

Te cuento que estoy buscando algo como esto:

http://geeks.ms/blogs/ghernandez/archive/2009/02/12/encontrando-combinaciones-num-233-ricas-con-sql-server.aspx

Pero lo que estoy tratando de hacer es que la sentencia SQL me busque en toda la base de datos de forma "automatica", no le quiero pasar yo que numeros estoy buscando, necesito saber que ocurrencias de 2 o mas numeros se repiten en toda la base, de forma automatica, y me muestre la cantidad de veces que se repite y la ocurrencia, no es tan importante ver el ID.

El resultado que espero es algo asi:

Veces Ocurrencia
04 03 05
11 11 22 33
99 01 02 03 04

Se que es un query muy dificil, y tampoco tengo mucha experiencia, pero es para un trabajo en la facultad.

Estoy trabajando con SQL 2008.

Hasta ahora, se me ocurrio algo asi:

Select ID
from LaTabla
Where n1 in (11, 22,33)
or n2 in (11, 22,33)
or n3 in (11, 22,33)
or n4 in (11, 22,33)
or n5 in (11, 22,33)
or n6 in (11, 22,33)

Pero como explique antes, no quiero pasarle yo los valores, sino que la sentencia busque todas las combinaciones, en toda la base de forma automatica.

Muchas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 2.542
Oro
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Contar ocurrencias

Publicado por Isaias (1921 intervenciones) el 13/04/2015 20:47:18
¿Y tienes una idea de cuanto se va a tardar comparando con IN(valor) en toda tu base?

Digo, SQL Server 2008 es un motor de base de datos, pero nunca he sabido que haga cosas extraordinarias.

Déjame ver si entendí.

¿Qué vaya a todas tus tablas?, ya que dices: "Tengo una base de la siguiente manera:"
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Contar ocurrencias

Publicado por OKNARF (18 intervenciones) el 13/04/2015 20:56:15
Hola
Gracias por contestar.
La base que tengo es chica, 10 mil registros es muy poco para un motor como SQL 2008.
Tampoco me importa cuanto pueda tardar la consulta, porque solo accedo yo a los datos, no hay concurrencia de multiples usuarios.

Solo estoy tratando de hacer una sentencia, que me busque automaticamente, cuantas veces se repitieron 2, 3, 4, 5 y hasta 6 numeros en toda la base (por ejemplo: 03 y 05, o 11, 22 y 33, o 04, 14, 24, 34, 44 o 99, 99, 99, 99)

Mi base es asi:
id, n1, n2, n3, n4, n5, n6

Cada columna desde n1 a n6 tiene numeros del 00 al 99.

Como soy nuevo en sql, estoy probando varias maneras de hacerlo, pero no se como hacerlo de forma automatica.

Muchas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 2.542
Oro
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Contar ocurrencias

Publicado por Isaias (1921 intervenciones) el 13/04/2015 23:49:22
Insisto, es BASE o TABLA?????
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Contar ocurrencias

Publicado por OKNARF (18 intervenciones) el 14/04/2015 18:59:14
Hola
Es una tabla, con 7 columnas:

id, n1, n2, n3, n4, n5, n6.

Muchas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 2.542
Oro
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Contar ocurrencias

Publicado por Isaias (1921 intervenciones) el 14/04/2015 20:21:31
¿Algo asi?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
create table #occurring_value (id int identity, n1 int, n2 int, n3 int, n4 int, n5 int, n6 int)
insert into #occurring_value (n1, n2, n3, n4, n5, n6) values(01,02,03,04,55,57)
insert into #occurring_value (n1, n2, n3, n4, n5, n6) values(88,89,90,91,92,99)
insert into #occurring_value (n1, n2, n3, n4, n5, n6) values(01,02,03,56,57,58)
insert into #occurring_value (n1, n2, n3, n4, n5, n6) values(01,02,03,91,92,99)
 
SELECT n1, count(*)
from #occurring_value
group by n1
union
SELECT n2, count(*)
from #occurring_value
group by n2
union
SELECT n3, count(*)
from #occurring_value
group by n3
union
SELECT n4, count(*)
from #occurring_value
group by n4
union
SELECT n5, count(*)
from #occurring_value
group by n5
union
SELECT n6, count(*)
from #occurring_value
group by n6
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Contar ocurrencias

Publicado por leonardo_josue (1173 intervenciones) el 14/04/2015 21:56:32
Otra forma de hacerlo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
mysql> SELECT * FROM occurring_value;
+------+------+------+------+------+------+------+
| id   | n1   | n2   | n3   | n4   | n5   | n6   |
+------+------+------+------+------+------+------+
|    1 | 01   | 02   | 03   | 04   | 55   | 57   |
|    2 | 88   | 89   | 90   | 91   | 92   | 99   |
|    3 | 01   | 02   | 03   | 56   | 57   | 58   |
|    4 | 01   | 02   | 03   | 91   | 92   | 99   |
+------+------+------+------+------+------+------+
4 rows in set (0.00 sec)
 
mysql> SELECT n1, COUNT(n1) total FROM
    -> ( SELECT n1 FROM occurring_value
    ->   UNION ALL
    ->   SELECT n2 FROM occurring_value
    ->   UNION ALL
    ->   SELECT n3 FROM occurring_value
    ->   UNION ALL
    ->   SELECT n4 FROM occurring_value
    ->   UNION ALL
    ->   SELECT n5 FROM occurring_value
    ->   UNION ALL
    ->   SELECT n6 FROM occurring_value
    ->  ) T GROUP BY N1;
+------+-------+
| n1   | total |
+------+-------+
| 01   |     3 |
| 02   |     3 |
| 03   |     3 |
| 04   |     1 |
| 55   |     1 |
| 56   |     1 |
| 57   |     2 |
| 58   |     1 |
| 88   |     1 |
| 89   |     1 |
| 90   |     1 |
| 91   |     2 |
| 92   |     2 |
| 99   |     2 |
+------+-------+
14 rows in set (0.00 sec)

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Contar ocurrencias

Publicado por OKNARF (18 intervenciones) el 15/04/2015 01:19:23
Muchisimas gracias!!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Contar ocurrencias

Publicado por OKNARF (18 intervenciones) el 15/04/2015 03:00:13
Hola, como estas?
Te molesto nuevamente, ya que probe la base y el query que me pasaste, y no es lo que estoy buscando, se que busco algo muy dificil de hacer...
El query que me pasaste en el ejemplo, solo me muestra el total de veces que sale un solo numero.
Lo que estoy tratando de hacer, es que en un solo query, busque en toda la tabla, si 2 o mas numeros se repiten de forma consecutiva, o no, por ejemplo:

Imaginate esta base:

Fila1:
01 02 03 04 05 06
Fila2:
01 03 05 10 11 22
Fila3:
03 05 10 11 22 33
Fila4:
05 10 11 22 33 44
Fila5:
05 06 11 22 33 44

El query que estoy tratando de hacer, me tendria que decir que::

Repeticiones Numeros
2 01 03
3 03 05
2 11 22
3 11 22 33
3 05 10
2 11 22 33 44

Ojala me puedas ayudar, te pido disculpas si no se explicarme bien, y perdon si te pido algo muy complicado, soy nuevo en sql.
Muchas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar