Como mostrar resultado de varias consultas en una fila de un SELECT
Publicado por Manuel (1 intervención) el 13/10/2018 22:54:34
Hola buenas tardes,
Planteo el siguiente problema:
Requiero de una consulta que muestre los siguientes datos:
Categoria | 20 Ultimos | 80 Ultimos | Todos
A 30% 60% 85%
B 10% 40% 60%
Se basa que cada columna esta limitada por la cantidad de registro analizar para determinar el porcentaje de aciertos. Por Ejemplo, la fila 1, muestra que la categoria A, tiene un 30% de aciertos en el conteo de los primeros 20 registros, seguidamente tiene un 60% de aciertos en el conteo de los 80 primeros registros, y finalmente la ultima columna refleja la efectividad de aciertos en todos los registros encontrados.
Este es un ejemplo del código utilizado que me trae la CATEGORIA, y el Porcentaje de Aciertos encontrados en los primeros 20 registros. Pense utilizar la sentencia UNION para hacer un SELECT que me traiga la evaluación de los 20 primeros, otro SELECT que traiga la evaluación de los 80 primeros, y otro SELECT para todos los registros, pero no me funciona porque eso mostraría cada ocurrencia por fila.
select category_name as cat_name, ((sum(is_correct) * 100) / COUNT(*)) as efectividad
from view_eudp_stats_answers as v1
INNER JOIN (select answer_id as answer_id
from view_eudp_stats_answers as v3
INNER JOIN (SELECT distinct(category_id)
from view_eudp_stats_answers
WHERE exam_id = 16 and
user_id = 1) as v4
WHERE v3.category_id = v4.category_id AND exam_id = 16 AND user_id = 1
order by answer_id desc
limit 20 OFFSET 0) as v2
ON v1.answer_id = v2.answer_id
group by category_id
order by category_name asc
UNION
select category_name as cat_name, ((sum(is_correct) * 100) / COUNT(*)) as efectividad
from view_eudp_stats_answers as v1
INNER JOIN (select answer_id as answer_id
from view_eudp_stats_answers as v3
INNER JOIN (SELECT distinct(category_id)
from view_eudp_stats_answers
WHERE exam_id = 16 and
user_id = 1) as v4
WHERE v3.category_id = v4.category_id AND exam_id = 16 AND user_id = 1
order by answer_id desc
limit 80 OFFSET 0) as v2
ON v1.answer_id = v2.answer_id
group by category_id
order by category_name asc
UNION
select category_name as cat_name, ((sum(is_correct) * 100) / COUNT(*)) as efectividad
from view_eudp_stats_answers as v1
INNER JOIN (select answer_id as answer_id
from view_eudp_stats_answers as v3
INNER JOIN (SELECT distinct(category_id)
from view_eudp_stats_answers
WHERE exam_id = 16 and
user_id = 1) as v4
WHERE v3.category_id = v4.category_id AND exam_id = 16 AND user_id = 1
order by answer_id desc) as v2
ON v1.answer_id = v2.answer_id
group by category_id
order by category_name asc
Que solución me podría aconsejar? De antemano gracias por su ayuda.
Planteo el siguiente problema:
Requiero de una consulta que muestre los siguientes datos:
Categoria | 20 Ultimos | 80 Ultimos | Todos
A 30% 60% 85%
B 10% 40% 60%
Se basa que cada columna esta limitada por la cantidad de registro analizar para determinar el porcentaje de aciertos. Por Ejemplo, la fila 1, muestra que la categoria A, tiene un 30% de aciertos en el conteo de los primeros 20 registros, seguidamente tiene un 60% de aciertos en el conteo de los 80 primeros registros, y finalmente la ultima columna refleja la efectividad de aciertos en todos los registros encontrados.
Este es un ejemplo del código utilizado que me trae la CATEGORIA, y el Porcentaje de Aciertos encontrados en los primeros 20 registros. Pense utilizar la sentencia UNION para hacer un SELECT que me traiga la evaluación de los 20 primeros, otro SELECT que traiga la evaluación de los 80 primeros, y otro SELECT para todos los registros, pero no me funciona porque eso mostraría cada ocurrencia por fila.
select category_name as cat_name, ((sum(is_correct) * 100) / COUNT(*)) as efectividad
from view_eudp_stats_answers as v1
INNER JOIN (select answer_id as answer_id
from view_eudp_stats_answers as v3
INNER JOIN (SELECT distinct(category_id)
from view_eudp_stats_answers
WHERE exam_id = 16 and
user_id = 1) as v4
WHERE v3.category_id = v4.category_id AND exam_id = 16 AND user_id = 1
order by answer_id desc
limit 20 OFFSET 0) as v2
ON v1.answer_id = v2.answer_id
group by category_id
order by category_name asc
UNION
select category_name as cat_name, ((sum(is_correct) * 100) / COUNT(*)) as efectividad
from view_eudp_stats_answers as v1
INNER JOIN (select answer_id as answer_id
from view_eudp_stats_answers as v3
INNER JOIN (SELECT distinct(category_id)
from view_eudp_stats_answers
WHERE exam_id = 16 and
user_id = 1) as v4
WHERE v3.category_id = v4.category_id AND exam_id = 16 AND user_id = 1
order by answer_id desc
limit 80 OFFSET 0) as v2
ON v1.answer_id = v2.answer_id
group by category_id
order by category_name asc
UNION
select category_name as cat_name, ((sum(is_correct) * 100) / COUNT(*)) as efectividad
from view_eudp_stats_answers as v1
INNER JOIN (select answer_id as answer_id
from view_eudp_stats_answers as v3
INNER JOIN (SELECT distinct(category_id)
from view_eudp_stats_answers
WHERE exam_id = 16 and
user_id = 1) as v4
WHERE v3.category_id = v4.category_id AND exam_id = 16 AND user_id = 1
order by answer_id desc) as v2
ON v1.answer_id = v2.answer_id
group by category_id
order by category_name asc
Que solución me podría aconsejar? De antemano gracias por su ayuda.
Valora esta pregunta
0