-
Notifications
You must be signed in to change notification settings - Fork 2
/
int9.sql
49 lines (44 loc) · 1.19 KB
/
int9.sql
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
44
45
46
47
48
49
.mode columns
.headers on
.nullvalue NULL
/*
Esta interrogação destina-se a retornar os Géneros
de Conteúdo e a respetiva frequência que cada Utilizador (com vários perfis)
mais visualizou.
Notas:
- No caso de haver mais que um máximo, retorna todos com valor máximo
- No caso de um Utilizador não ter histórico, surge com o Género a NULL e frequencia = 0
*/
DROP VIEW IF EXISTS GeneroFrequencias;
CREATE VIEW GeneroFrequencias AS
SELECT email, tipo, count(*) AS frequencia
FROM (
Utilizador INNER JOIN Perfil ON (Utilizador.email = Perfil.emailUtilizador)
INNER JOIN Historico ON (Historico.idPerfil = Perfil.id)
INNER JOIN GeneroConteudo ON (GeneroConteudo.idConteudo = Historico.idConteudo)
)
GROUP BY Utilizador.email, tipo;
SELECT email, tipo, frequencia
FROM (
GeneroFrequencias AS FrequenciasMax
INNER JOIN
(
SELECT email, max(frequencia) AS maxFrequenciaUtilizador
FROM GeneroFrequencias
GROUP BY email
)
USING (email)
)
WHERE (
frequencia = maxFrequenciaUtilizador
)
UNION
SELECT DISTINCT email, NULL, 0
FROM (
Utilizador INNER JOIN Perfil ON (Utilizador.email = Perfil.emailUtilizador)
)
WHERE (
Perfil.id NOT IN (
SELECT DISTINCT idPerfil FROM Historico
)
)