SQL - mostrar porcentaje SQL Oracle

 
Vista:
sin imagen de perfil

mostrar porcentaje SQL Oracle

Publicado por Alejandro (4 intervenciones) el 02/09/2019 09:46:50
Hola,

Tengo dudas a la hora de realizar una consulta en Oracle SQL Developer. Tengo 2 tablas. Una con Emisores(Emisor_ID, Nombre, etc) y otra con Transacciones que realizan esos emisores(Emisor_ID, fechacreacion, documento, etc). En la tabla de Transacciones se graba un registro por cada transacción. Quería sacar una consulta con las cantidad de transacciones agrupadas por emisor, así como el porcentaje de que representa la cantidad de transacciones del emisor respecto al total. Y es en este punto donde tengo problemas. Saco la cantidad de transacciones agrupadadas por emisor y también la suma total de todas las transacciones pero no se como sacar el porcentaje.

La query que tengo de momento es:

1
2
3
4
5
6
7
8
9
10
11
12
13
Select
    c.emisor_id,
    c.nombre,
    count(*) as Cantidad,
    (select distinct
        count(*)
    from transacciones
    where fechacreacion > sysdate -10) as Total
From transaccciones n inner join emisor_id c
on c.emisor_id=n.emisor_id
where n.fechacreacion > sysdate -10
group by c.emisor_id, c.nombre
order by Cantidad desc

Con esto me mostraria todo menos la columna del porcentaje.

Gracias y un saludo de antemano
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 Francisco
Val: 150
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

mostrar porcentaje SQL Oracle

Publicado por Francisco (60 intervenciones) el 02/09/2019 18:00:09
Hola

Esta mal planteado tu sentencia SQL, los CTE nacieron para simplificar las cosas y hacerlas mas entendibles

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
-- Calculamos la frecuencia por cada emisor
WITH n AS (
	SELECT
		emisor_id,
		COUNT(*) AS frecuencia
    FROM transacciones
    WHERE fechacreacion > SYSDATE - 10
    GROUP BY emisor_id
)
SELECT
    c.emisor_id,
    c.nombre,
    n.frecuencia,
    n.frecuencia / (
	    	SELECT
	    		COUNT(*)
	    	FROM transacciones
	    	WHERE fechacreacion > SYSDATE - 10
    	) * 100 AS porcentaje
FROM emisores AS c
	INNER JOIN n ON n.emisor_id = c.emisor_id
ORDER BY n.frecuencia DESC

Por supuesto hay que mejorar varias cosas como que no sea divisible por cero

Saludos
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

mostrar porcentaje SQL Oracle

Publicado por Alejandro (4 intervenciones) el 05/09/2019 14:26:36
Ha funcionado correctamente

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