Está en la página 1de 13

1.1.1.

Relational Database Queries

→ Propósito: Cantidad de chats abiertos por plan. Esta información será útil para un análisis de
los planes presentes en el negocio y que deberían ofrecer o retirar con respecto a la cantidad
de chats abiertos que puede tener una persona según su plan.

select nombre, count(salasChatUniversitarios_id) as cantidad,


salas_universitarios.universitarios_id from salas_universitarios

join

(select nombre, a.id, nombre_completo, universitarios_id from universitarios

join

(select nombre, id, universitarios_id from planesUnivesitarios

join planesUniversitarios_universitarios o

on planesUnivesitarios.id = o.planes_univesitarios_id) a

on universitarios_id = universitarios.id) e

on e.universitarios_id = salas_universitarios.universitarios_id

group by nombre, salas_universitarios.universitarios_id;

→ Propósito: Conocer la cantidad de mensajes que se envían en una hora. Para conocer la
tendencia de actividad de los usuarios.

SELECT DATEPART(HOUR, hora) as tiempo, count(id) as cantidad

FROM mensajesUniversitarios

GROUP BY DATEPART(HOUR, hora)

ORDER BY count(id) desc;

→ Propósito: Conocer la cantidad de mensajes que se envían en un intervalo de tiempo. Esta


sentencia esta fuertemente ligada a la anterior, sin embargo, esta permite conocer la cantidad
dentro de un intervalo de tiempo, útil para duración de promociones.

create function mensajes_por_hora(@start_time int , @end_time int) returns int

begin

DECLARE @q int

SELECT @q = count(o.IDO)

FROM

(SELECT id as IDO

FROM mensajesUniversitarios
WHERE DATEPART(HOUR, hora) BETWEEN @start_time and @end_time) o

LEFT JOIN

(SELECT id as IDA

FROM mensajesUniversitarios

WHERE DATEPART(HOUR, hora) = @end_time) a

ON o.IDO = a.IDA

WHERE a.IDA is NULL

RETURN @q

end

print dbo.mensajes_por_hora(14,16);

→ Propósito: Conocer la cantidad de mensajes enviados por día de semana según el mes
deseado. Esta sentencia es valiosa para el equipo de negocio debido a que conoce que días los
usuarios suelen estar más activos en la plataforma según el mes en el que se encuentran.

create function mensajes_por_dia_mes() returns TABLE

AS

RETURN (SELECT DATENAME(weekday, hora) as dia, count(id) as cantidad,


DATENAME(MONTH, hora) as mes

FROM mensajesUniversitarios

GROUP BY DATENAME(weekday, hora), DATENAME(MONTH, hora)

SELECT dia, cantidad FROM dbo.mensajes_por_dia_mes() WHERE mes = 'November'

→ Propósito: Conocer la cantidad de chats abiertos por carrera universitaria. Esta información
es valiosa para el negocio debido a que le permite conocer más a fondo que segmento es más
activo y crear estrategias en base a ello.

SELECT count(nombre_sala) cantidad, carrera FROM universitarios

JOIN (

SELECT nombre_sala, universitarios_id FROM salasChatUniversitarios


join salas_universitarios su

ON salasChatUniversitarios.id = su.salasChatUniversitarios_id) as a

ON a.universitarios_id = universitarios.id

GROUP BY carrera

ORDER BY cantidad desc;

→ Propósito: Conocer la cantidad de personas suscritas en un plan, información que permitirá


a la empresa crear estrategias para potencias un plan con ofertas o ajustar los permisos de
otros planes.

create function universitarios_por_plan( @plan varchar(50)) returns int

begin

declare @q int

SELECT @q = count(universitarios_id) FROM planesUniversitarios_universitarios

JOIN planesUnivesitarios ON planes_univesitarios_id = planesUnivesitarios.id

WHERE planesUnivesitarios.nombre = @plan;

RETURN @q

end

print dbo.universitarios_por_plan('Plan A');

print dbo.universitarios_por_plan('Plan B');

→ Propósito: Conocer la cantidad de no suscritas a ningún plan con la intención de conocer el


porcentaje de personas que han decidido no suscribirse y crear estrategias de negocio para
motivarlos.

create function universitarios_no_premium() returns int

as

begin

declare @q int

SELECT @q = count(nombre_completo) FROM universitarios

left join

(SELECT nombre, id, universitarios_id FROM planesUnivesitarios

JOIN planesUniversitarios_universitarios o
ON planesUnivesitarios.id = o.planes_univesitarios_id) a

ON universitarios_id = universitarios.id where universitarios_id is null

RETURN @q

end

print dbo.universitarios_no_premium();

→ Propósito: Conocer cuántos universitarios están matriculados en un tipo de curso, esto para
poder saber si llegaron a matricularse de manera correcta.

SELECT c.id,c.nombre,COUNT(u.id) 'Cantidad de estudiantes' FROM cursos c

JOIN cursos_universidades cu ON c.id=cu.cursos_id

JOIN universitarios_cursos_universidades ucu ON


cu.cursos_id=ucu.cursos_universidades_cursos_id

JOIN universitarios u ON ucu.universitarios_id=u.id

GROUP BY c.id,c.nombre

→ Propósito: Conocer la cantidad de cursos que lleva el universitario, esto para poder saber si
está llevando la cantidad correcta de cursos.

SELECT u.id,u.nombre_completo,COUNT(ucu.cursos_universidades_cursos_id) 'Cantidad de


cursos' FROM cursos c

JOIN cursos_universidades cu ON c.id=cu.cursos_id

JOIN universitarios_cursos_universidades ucu ON


cu.cursos_id=ucu.cursos_universidades_cursos_id

JOIN universitarios u ON ucu.universitarios_id=u.id

GROUP BY u.id,u.nombre_completo

→ Propósito: Conocer la cantidad de universitarios por universidad que usa nuestra aplicación,
esto para poder promocionar más y tener más usuarios.

SELECT u.id,u.nombre,COUNT(ucu.universitarios_id) 'Cantidad de estudiantes' FROM


universidades u

JOIN cursos_universidades cu ON u.id=cu.universidades_id

JOIN universitarios_cursos_universidades ucu ON


cu.universidades_id=ucu.cursos_universidades_universidades_id
JOIN universitarios uv ON ucu.universitarios_id=uv.id

GROUP BY u.id,u.nombre

→ Propósito: Conocer la cantidad de alumnos por una universidad exacta, esto permitirá tener
una mejor organización.

SELECT u.id,u.nombre,COUNT(ucu.cursos_universidades_universidades_id)'Cantidad de
alumnos' FROM universidades u

JOIN cursos_universidades cu ON u.id=cu.universidades_id

JOIN universitarios_cursos_universidades ucu ON


cu.universidades_id=ucu.cursos_universidades_universidades_id

GROUP BY u.id,u.nombre

→ Propósito: Mostrar el nombre o id del universitario que lleve la mayor cantidad de créditos,
esto para poder tener una mejor organización en la base de datos.

CREATE view cantidad_creditos_por_alumno

AS

SELECT uv.id,uv.nombre_completo,SUM(c.creditos) cantidad_creditos FROM cursos c

JOIN cursos_universidades cu on c.id=cu.cursos_id

JOIN universitarios_cursos_universidades ucu ON


cu.cursos_id=ucu.cursos_universidades_cursos_id

JOIN universitarios uv on uv.id=ucu.universitarios_id GROUP BY uv.id,uv.nombre_completo

GO

SELECT top 1* FROM cantidad_creditos_por_alumno ORDER BY cantidad_creditos desc

→ Propósito: Cantidad de universitarios que están matriculados en una universidad privada,


para poder contabilizar de manera más rápida.

SELECT COUNT(ucu.universitarios_id)'Cantidad de universitarios' FROM universidades u

JOIN cursos_universidades cu ON cu.universidades_id=u.id

JOIN universitarios_cursos_universidades ucu ON


cu.cursos_id=ucu.cursos_universidades_cursos_id

WHERE u.privada=1


→ Propósito: Conocer el padre de familia que realizó el último mensaje, para tener un orden
de la actividad de chats.

SELECT TOP 1 hora, nombre_completo FROM padresFamilia

JOIN

(SELECT hora, padres_familia_id, mensajesPadres.id as mensajeId FROM mensajesPadres

JOIN salasChatPadres_padresFamilia

ON salasChatPadres_padresFamilia.salas_chat_padres_id =
salasChatPadres_padresFamilia_salas_chat_padres_id) a

ON a.padres_familia_id = padresFamilia.id

ORDER BY hora desc;

→ Propósito: Conocer la cantidad de chats por padre de familia, con el objetivo de conocer la
interacción en la aplicación de cada padre de familia.

SELECT nombre_completo, count(salas_chat_padres_id) as CantChats FROM padresFamilia

JOIN salasChatPadres_padresFamilia

ON salasChatPadres_padresFamilia.padres_familia_id = padresFamilia.id

GROUP BY nombre_completo;

→ Propósito: Conocer el distrito de ambos padres de familia por chat, esto para poder tener
una mejor organización.

SELECT nombre_completo, distrito, salas_chat_padres_id as idChats FROM padresFamilia

JOIN salasChatPadres_padresFamilia

ON salasChatPadres_padresFamilia.padres_familia_id = padresFamilia.id

GROUP BY nombre_completo, distrito, salas_chat_padres_id

order by idChats

→ Propósito: Mostrar cuántos mensajes realizó cada padre de familia, para tener
conocimiento de la interacción con la mensajería de la aplicación.

SELECT nombre_completo, count(mensajeId) as quantity FROM padresFamilia

JOIN

(SELECT padres_familia_id, mensajesPadres.id as mensajeId FROM mensajesPadres

JOIN salasChatPadres_padresFamilia
ON salasChatPadres_padresFamilia.salas_chat_padres_id =
salasChatPadres_padresFamilia_salas_chat_padres_id) a

ON a.padres_familia_id = padresFamilia.id

GROUP BY nombre_completo

ORDER BY quantity;

→ Propósito: Mostrar el nombre y correo del padre de familia que tiene más de 2 chats, por
motivos de organización en la base de datos.

SELECT nombre_completo, correo, quantity FROM

(SELECT nombre_completo, correo, count(salas_chat_padres_id) as quantity FROM


padresFamilia

JOIN salasChatPadres_padresFamilia

ON salasChatPadres_padresFamilia.padres_familia_id = padresFamilia.id

GROUP BY nombre_completo, correo ) a

WHERE quantity >= 2;

→ Propósito: Mostrar la cantidad de mensajes por chat. Con el fin de hacer un seguimiento del
almacenamiento en la mensajería.

SELECT nombre_sala as Chat, (count(mensajeId)) as CantMensajes FROM salasChatPadres

JOIN

(SELECT distinct(mensajesPadres.id) as mensajeId, salas_chat_padres_id FROM


mensajesPadres

JOIN salasChatPadres_padresFamilia

ON salasChatPadres_padresFamilia.salas_chat_padres_id =
salasChatPadres_padresFamilia_salas_chat_padres_id) a

ON a.salas_chat_padres_id = salasChatPadres.id

GROUP BY nombre_sala

ORDER BY CantMensajes

1.1.2. Non-Relational Database Queries

• William Riega

→ Propósito: Propósito: Conocer la cantidad de colegios por distrito y que tengan más de dos
colegios, para que el padre de familia sepa si en su distrito hay opciones de colegios para elegir

db.colegio.aggregate([

{$match: {
$expr:

{$gte: [

{$size: "$reseña"}, 2]

}},

{$group: {

_id: "$ciudad",

quantity: {$count: {}}

}},

{$project:{

ciudad: "$_id",

_id:0,

quantity: 1,

}},

{$sort: {

quantity: 1

}},

])

→ Propósito: Conocer los nombres de los colegios que tienen dos o más servicios, es decir
inicial, primaria o secundaria, y el nombre de dichos servicios.

db.colegio.aggregate([

{$match: {

$expr:

{$gte: [

{$size: "$servicio"}, 2]

}},

{$project: {

_id:0,

nombre:1,

servicio: 1
}},

{$sort: {

nombre: 1

}},

])

→ Propósito: Conocer la cantidad de reseñas que se han hecho el 2022, para un análisis anual
de actividad.

db.reseña_colegio.aggregate([

{$match:{

fecha:{"$gte": new Date("2022-01-01T00:00:00.000Z")}

}},

{$group: {

_id: "Año 2022",

cantidad_de_reseñas:{$count:{}}

}}

]) → Propósito: Conocer los nombres de los colegios que tienen más de 7 de puntaje general y
6 de infraestructura, para saber cuáles son los mejores colegios con enseñanza de alta calidad
para sus hijos.

db.colegio.aggregate([

{$match:{

"calificacion_promedio.general":{$gte:7.0},

"calificacion_promedio.infraestructura":{$gte:6.0}

}},

{$group:{

_id: "$nombre"

}},

{$project: {

nombre:"$_id",

_id:0,

nombre_colegio:1,

}},
])

→ Propósito: Listar todos los distritos y ordenarlos en orden decreciente para ver la repetición
de cada uno.

db.padre_de_familia.aggregate([

{$project:{

_id:0,

distrito:1

}},

{$sort:{ distrito : -1 }}

])

→ Propósito: Conocer la cantidad mujeres que poseen el servicio premium A o B y conocer la


tendencia en cuánto adquisición del servicio.

db.padre_de_familia.aggregate([

{$match:{

sexo:{$eq:"Femenino"},

"premium.nombre_plan":{$eq:"Plan B"}

}},

{$group:{

_id:"$nombre_completo"

}},

{$project:{

_id:0,

nombre_cliente:"$_id"

}}

])

• Alejandro Cruz

→ Propósito: Conocer cuántos padres de familia han adquirido el servicio premium en un año,
mes y día determinado para conocer en qué época del año debemos intensificar nuestra
publicidad y así, incrementar nuestras ventas.

db.padre_de_familia.aggregate([

{$match:{
"premium.fecha_inicio" : {"$gte": new Date("2020-11-01T00:00:00.000Z")}

}},

{$group:{

_id:"$nombre_completo"

}},

{$project:{

_id:0,

nombre_cliente:"$_id"

}}

])

→ Propósito: Conocer la cantidad hombres que poseen el servicio premium A o B y conocer la


tendencia en cuánto adquisición del servicio.

db.padre_de_familia.aggregate([

{$match:{

sexo:{$eq:"Masculino"},

"premium.nombre_plan":{$eq:"Plan A"}

}},

{$group:{

_id:"$nombre_completo"

}},

{$project:{

_id:0,

nombre_cliente:"$_id"

}}

])

→ Propósito: Conocer cuántos profesores enseñan en cada universidad, esto para poder hacer
una estimación de qué alumnos de qué universidad son los que crean más perfiles y son más
activos en la aplicación y hacer promociones en los sectores menos activos.

db.profesor.aggregate([

{$group: {

_id: "$nombre_universidad",
cantidad_de_profesores:{$count:{}}

}}

])

→ Propósito: Conocer la cantidad de reviews que se han hecho este año, esto para poder
hacer una estimación del tráfico de usuarios y crecimiento de estos con respecto a años
anteriores.

db.reseña_profesor.aggregate([

{$match:{

fecha:{"$gte": new Date("2022-01-01T00:00:00.000Z")}

}},

{$group: {

_id: "Año 2022",

cantidad_de_reseñas:{$count:{}}

}}

])

• Elizabeth Huaroto

→ Propósito: Conocer la cantidad de reviews por cada profesor de la base de datos, esto para
poder conocer cuales profesores tienen más popularidad y es un perfil que no necesita ser
revisado como sospechoso de ser falso.

db.profesor.aggregate([

$lookup:{

from:'reseña_profesor',

localField:'_id',

foreignField:'_id_profesor',

as:'reseña_profesor'

},

$project:{

_id:0,
nombre_profesor:1,

nombre_curso:1,

nombre_universidad:1,

total_reseñas:{$size:'$reseña_profesor'}

])

→ Propósito: Conocer cuántos profesores pertenecen a la Universidad de Lima, esto para


poder hacer un posterior análisis estadístico del crecimiento de los perfiles de profesores en
esta casa de estudio

db.profesor.aggregate([

{$match:{

nombre_universidad:{$eq:"Universidad de Lima"}

}},

{$group: {

_id: "$nombre_universidad",

cantidad_de_profesores:{$count:{}}

}}

])

También podría gustarte