SQL - Contar ocurrencias en SQL

 
Vista:

Contar ocurrencias en SQL

Publicado por Franco (18 intervenciones) el 08/06/2015 20:57:58
Hola, que tal?

Les cuento que estoy tratando de hacer un query que me busque ocurrencias, algo parecido a esto:

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

Estoy tratando de hacer una sentencia SQL que me busque en toda mi base de datos de unos 10 mil registros, cuantas ocurrencias de 2 o mas numeros se repiten en toda la base. Lo que quiero es buscar de forma automatica, y me muestre la cantidad de veces que se repiten TODAS las ocurrencias.

La tabla que tengo es asi, tiene cargados numeros de 00 a 99:

N1 N2 N3 N4 N5 N6
01 02 03 04 05 06
01 03 05 10 11 22
03 05 10 11 22 33
05 10 11 22 33 44
05 06 11 22 33 44

El query que estoy tratando de hacer, me tendria que dar un resultado similar a este:

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 puedan ayudar, pido disculpas si no se explicarme bien, y perdon si pido algo muy complicado, soy nuevo en sql.

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
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 en SQL

Publicado por Isaias (1921 intervenciones) el 08/06/2015 21:17:18
¿Por qué vuelves a abrir el mismo tema que se trato ya hace algunos días en este foro?

Lo que pides es casi imposible de lograr

No dices que base de datos estas ocupando

Oracle
MySQL
SQL Server
Informix
Tera Data


¿Cual?
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 en SQL

Publicado por FRANCO (18 intervenciones) el 08/06/2015 21:38:41
Hola
En serio es casi imposible?? No sabia que era tan dificil...

Uso SQL 2008 express o MYSQL, no me importa tanto en que base de datos lo pueda hacer, me interesa poder hacerlo.

Bueno, igual 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 en SQL

Publicado por Isaias (1921 intervenciones) el 08/06/2015 22:50:29
No es lo mismo usar un MYSQL que un SQL SERVER y mucho menos en diferentes ediciones o versiones

Por ejemplo, la edición EXPRESS de SQL Server es la que es "free" (o libre de pago), pero nada que ver con la ENTERPRISE.

Cada versión-edición tienes sus ventajas

Espero haberme explicado.
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 en SQL

Publicado por Franco (3 intervenciones) el 20/08/2022 00:20:31
Lo que casi imposible de logar, se pudo logar con este query:

--alter table [Q6].[dbo].[q6.19ago22] add idserie int identity(1,1)

--inicio all--
Declare @tblConteos TABLE(Veces int, Nros varchar(30), Orden varchar(10))

/* Conocer Parejas*/
;WITH SEMILLA AS (Select [idserie] as Serie, Numero from [Q6].[dbo].[q6.19ago22]
UNPIVOT(Numero FOR Nros in (N1, N2, N3, N4, N5, N6)) as Num)
, SERIES2 AS (Select TOP 100 PERCENT S1.Serie, S1.Numero as Numero1, S2.Numero as Numero2
FROM SEMILLA AS S1
CROSS JOIN
SEMILLA AS S2
WHERE S2.Serie = S1.Serie AND S2.Numero <> S1.Numero AND S2.Numero > S1.Numero
ORDER BY S1.Numero)
insert into @tblConteos
SELECT COUNT(DISTINCT(Serie)) AS Veces, Numero1 + ',' + Numero2 as Parejas, 'Parejas'
FROM SERIES2
GROUP BY Numero1, Numero2
HAViNG COUNT(DISTINCT(Serie))>1

/*Trios*/
;WITH SEMILLA AS (Select [idserie] as Serie, Numero from [Q6].[dbo].[q6.19ago22]
UNPIVOT(Numero FOR Nros in (N1, N2, N3, N4, N5, N6)) as Num)
, SERIES3 AS (Select TOP 100 PERCENT S1.Serie, S1.Numero as Numero1, S2.Numero as Numero2, S3.Numero as Numero3
FROM SEMILLA AS S1
CROSS JOIN
SEMILLA AS S2
CROSS JOIN
SEMILLA AS S3
WHERE S1.Serie = S2.Serie AND S1.Numero <> S2.Numero AND S1.Numero < S2.Numero
AND S2.Serie = S3.Serie AND S2.Numero <> S3.Numero AND S2.Numero < S3.Numero
ORDER BY S1.Numero)
INSERT INTO @tblConteos
SELECT COUNT(DISTINCT(Serie)) AS Veces, Numero1 + ',' + Numero2 + ',' + Numero3 as Trios, 'Trios'
FROM SERIES3
GROUP BY Numero1, Numero2, Numero3
HAViNG COUNT(DISTINCT(Serie))>1

/*Cuartetos*/
;WITH SEMILLA AS (Select [idserie] as Serie, Numero from [Q6].[dbo].[q6.19ago22]
UNPIVOT(Numero FOR Nros in (N1, N2, N3, N4, N5, N6)) as Num)
, SERIES4 AS (Select TOP 100 PERCENT S1.Serie, S1.Numero as Numero1, S2.Numero as Numero2, S3.Numero as Numero3, S4.Numero as Numero4
FROM SEMILLA AS S1
CROSS JOIN
SEMILLA AS S2
CROSS JOIN
SEMILLA AS S3
CROSS JOIN
SEMILLA AS S4
WHERE S1.Serie = S2.Serie AND S1.Numero <> S2.Numero AND S1.Numero < S2.Numero
AND S2.Serie = S3.Serie AND S2.Numero <> S3.Numero AND S2.Numero < S3.Numero
AND S3.Serie = S4.Serie AND S3.Numero <> S4.Numero AND S3.Numero < S4.Numero
ORDER BY S1.Numero)
INSERT INTO @tblConteos
SELECT COUNT(DISTINCT(Serie)) AS Veces, Numero1 + ',' + Numero2 + ',' + Numero3 + ',' + Numero4 as Cuartetos, 'Cuartetos'
FROM SERIES4
GROUP BY Numero1, Numero2, Numero3, Numero4
HAViNG COUNT(DISTINCT(Serie))>1

/*Quintetos*/
;WITH SEMILLA AS (Select [idserie] as Serie, Numero from [Q6].[dbo].[q6.19ago22]
UNPIVOT(Numero FOR Nros in (N1, N2, N3, N4, N5, N6)) as Num)
, SERIES5 AS (Select TOP 100 PERCENT S1.Serie, S1.Numero as Numero1, S2.Numero as Numero2, S3.Numero as Numero3, S4.Numero as Numero4, S5.Numero as Numero5
FROM SEMILLA AS S1
CROSS JOIN
SEMILLA AS S2
CROSS JOIN
SEMILLA AS S3
CROSS JOIN
SEMILLA AS S4
CROSS JOIN
SEMILLA AS S5
WHERE S1.Serie = S2.Serie AND S1.Numero <> S2.Numero AND S1.Numero < S2.Numero
AND S2.Serie = S3.Serie AND S2.Numero <> S3.Numero AND S2.Numero < S3.Numero
AND S3.Serie = S4.Serie AND S3.Numero <> S4.Numero AND S3.Numero < S4.Numero
AND S4.Serie = S5.Serie AND S4.Numero <> S5.Numero AND S4.Numero < S5.Numero
ORDER BY S1.Numero)
INSERT INTO @tblConteos
SELECT COUNT(DISTINCT(Serie)) AS Veces, Numero1 + ',' + Numero2 + ',' + Numero3 + ',' + Numero4 + ',' + Numero5 as Quintetos, 'Quintetos'
FROM SERIES5
GROUP BY Numero1, Numero2, Numero3, Numero4, Numero5
HAViNG COUNT(DISTINCT(Serie))>1

/*Sextetos*/
;WITH SEMILLA AS (Select [idserie] as Serie, Numero from [Q6].[dbo].[q6.19ago22]
UNPIVOT(Numero FOR Nros in (N1, N2, N3, N4, N5, N6)) as Num)
, SERIES6 AS (Select TOP 100 PERCENT S1.Serie, S1.Numero as Numero1, S2.Numero as Numero2, S3.Numero as Numero3, S4.Numero as Numero4, S5.Numero as Numero5, S6.Numero as Numero6
FROM SEMILLA AS S1
CROSS JOIN
SEMILLA AS S2
CROSS JOIN
SEMILLA AS S3
CROSS JOIN
SEMILLA AS S4
CROSS JOIN
SEMILLA AS S5
CROSS JOIN
SEMILLA AS S6
WHERE
S1.Serie = S2.Serie AND S1.Numero <> S2.Numero AND S1.Numero < S2.Numero
AND S2.Serie = S3.Serie AND S2.Numero <> S3.Numero AND S2.Numero < S3.Numero
AND S3.Serie = S4.Serie AND S3.Numero <> S4.Numero AND S3.Numero < S4.Numero
AND S4.Serie = S5.Serie AND S4.Numero <> S5.Numero AND S4.Numero < S5.Numero
AND S5.Serie = S6.Serie AND S5.Numero <> S6.Numero AND S5.Numero < S6.Numero
ORDER BY S1.Numero)
INSERT INTO @tblConteos
SELECT COUNT(DISTINCT(Serie)) AS Veces, Numero1 + ',' + Numero2 + ',' + Numero3 + ',' + Numero4 + ',' + Numero5 + ',' + Numero6 as SEXTETOS, 'SEXTETOS'
FROM SERIES6
GROUP BY Numero1, Numero2, Numero3, Numero4, Numero5, Numero6
HAViNG COUNT(DISTINCT(Serie))>1

SELECT TOP 20 Veces, Nros FROM @tblConteos where orden = 'PAREJAS' ORDER BY Veces DESC
SELECT TOP 20 Veces, Nros FROM @tblConteos where orden = 'TRIOS' ORDER BY Veces DESC
SELECT TOP 20 Veces, Nros FROM @tblConteos where orden = 'CUARTETOS' ORDER BY Veces DESC
SELECT TOP 20 Veces, Nros FROM @tblConteos where orden = 'QUINTETOS' ORDER BY Veces DESC
SELECT TOP 20 Veces, Nros FROM @tblConteos where orden = 'SEXTETOS' ORDER BY Veces DESC
--fin all--
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: 109
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Contar ocurrencias en SQL

Publicado por Rafael (111 intervenciones) el 09/06/2015 09:36:19
Hola:

El grado de complejidad de tu consulta es algo especial ...

Veamos para obtener las combinaciones de Dos Numeros
1
2
3
4
5
6
7
8
9
10
SELECT COUNT(*)
     , N1
     , N2
     , NULL
     , NULL
     , NULL
     , NULL
FROM NUMEROS   //<- Vaya que no se si asi se llama tu tabla
GROUP  BY N1
     , N2

Luego para 3 Numeros
1
2
3
4
5
6
7
8
9
10
11
SELECT COUNT(*)
     , N1
     , N2
     , N3
     , NULL
     , NULL
     , NULL
FROM NUMEROS   //<- Vaya que no se si asi se llama tu tabla
GROUP  BY N1
     , N2
     , N3


Y asi hasta 6
Para tenerlo todo junto pues con UNION...
1
2
3
4
5
6
7
8
9
SELECT COUNT(*) // La consulta con 2 Numeros
...
FROM NUMEROS   //<- Vaya que no se si asi se llama tu tabla
GROUP  BY ...
UNION
SELECT COUNT(*) / La consulta con 3 Numeros
...
FROM NUMEROS   //<- Vaya que no se si asi se llama tu tabla
GROUP  BY ...

OJO
Puede fallar si y solo si los numeros estuviesen desordenados...
Ejemplo
N1 N2 N3 N4 N5 N6
01 02 03 04 05 06
03 01 02 05 04 06

Espero explicarme ya me contaras-
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Contar ocurrencias en SQL

Publicado por FRANCO (18 intervenciones) el 09/06/2015 21:16:06
HOLA RAFAEL!
Muchisimas gracias, el query que me pasaste me sirvio mucho, es justo lo que necestiaba.
Asi me quedo el query:

SELECT COUNT(*) as Cantidad, N1, N2, N3, N4, N5, N6
FROM [q6].[dbo].[q6]
GROUP BY N1, N2, N3, N4, N5, N6
order by Cantidad desc

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