-- Quais os jogadores de um determinado grupo

SELECT g.nome_grupo, j.nome_jogador
FROM grupo as g, jogador as j
WHERE g.cod_grupo = j.cod_grupo

SELECT g.nome_grupo, j.nome_jogador
FROM grupo as g INNER JOIN jogador as j ON (g.cod_grupo = j.cod_grupo)

-- Quais grupos não possuem quaisquer jogadores cadastrados

SELECT g.nome_grupo, j.nome_jogador
FROM grupo as g LEFT JOIN jogador as j ON (g.cod_grupo = j.cod_grupo)
WHERE j.nome_jogador is null

-- Quantas rodadas teve ate o presente momento

SELECT count(*) as
FROM
(SELECT DISTINCT num_rodada
FROM jogo as j) as r

--- ou

SELECT count (DISTINCT num_rodada)
FROM jogo as j

-- Quais peças foram sorteadas até o presente momento

SELECT peca_esquerda as peca
FROM jogo as j
UNION
SELECT peca_direita
FROM jogo as j
WHERE peca_direita is not null
order by peca


SELECT j.peca_esquerda as peca, d.face_direita, d.face_esquerda
FROM jogo as j inner join domino as d on (j.peca_esquerda = d.cod_peca)
UNION
SELECT j.peca_direita as peca, d.face_direita, d.face_esquerda
FROM jogo as j inner join domino as d on (j.peca_direita = d.cod_peca)
order by peca

SELECT DISTINCT d.face_direita, d.face_esquerda
FROM jogo as j inner join domino as d
on (j.peca_esquerda = d.cod_peca or j.peca_direita = d.cod_peca)

-- Quais peças NÃO FORAM sorteadas até o presente momento


SELECT cod_peca, face_direita, face_esquerda
FROM domino as d
WHERE d.cod_peca not IN
(SELECT peca_esquerda as peca
FROM jogo as j
UNION
SELECT peca_direita
FROM jogo as j
WHERE peca_direita is not null
order by peca)



SELECT d.cod_peca, d.face_direita, d.face_esquerda
FROM domino as d
WHERE NOT EXISTS (
SELECT *
FROM (SELECT peca_esquerda as cod_peca
FROM jogo as j
UNION
SELECT peca_direita
FROM jogo as j
WHERE peca_direita is not null
) as s
WHERE s.cod_peca = d.cod_peca
)


SELECT d.cod_peca, d.face_direita, d.face_esquerda
FROM domino as d LEFT JOIN
(SELECT peca_esquerda as cod_peca, ordem
FROM jogo as j
UNION
SELECT peca_direita, ordem
FROM jogo as j
WHERE peca_direita is not null) as S
ON (d.cod_peca = S.cod_peca)
WHERE ordem is null

-- Quais peças foram colocadas em uma determinada rodada
-- de um grupo específico

SELECT d.face_esquerda, d.face_direita,
d2.face_esquerda, d2.face_direita
FROM jogo as j
INNER JOIN domino as d ON (j.peca_esquerda = d.cod_peca)
LEFT JOIN domino as d2 ON (j.peca_direita = d2.cod_peca)
WHERE num_rodada = 1 and cod_grupo = 12

-- Quais peças mais saíram por grupo

SELECT r.cod_grupo, r.peca, count (*) as vezes
FROM (SELECT j.cod_grupo, j.peca_esquerda as peca
FROM jogo as j
UNION ALL
SELECT j.cod_grupo, j.peca_direita
FROM jogo as j
WHERE j.peca_direita is not null
ORDER BY cod_grupo, peca) as r
GROUP BY r.cod_grupo, r.peca

-- Quantas vezes uma determinada peca saiu nas rodadas

SELECT r.num_rodada, r.peca, count (*) as vezes
FROM (SELECT j.num_rodada, j.peca_esquerda as peca
FROM jogo as j
UNION ALL
SELECT j.num_rodada, j.peca_direita
FROM jogo as j
WHERE j.peca_direita is not null
ORDER BY num_rodada, peca) as r
GROUP BY r.num_rodada, r.peca

-- Quantas vezes uma determinada peca saiu nas rodadas para um
-- grupo especifico

SELECT r.cod_grupo, r.num_rodada, r.peca, count (*) as vezes
FROM (SELECT j.cod_grupo, j.num_rodada, j.peca_esquerda as peca
FROM jogo as j
UNION ALL
SELECT j.cod_grupo, j.num_rodada, j.peca_direita
FROM jogo as j
WHERE j.peca_direita is not null
ORDER BY cod_grupo, num_rodada, peca) as r
GROUP BY cod_grupo,r.num_rodada, r.peca

-- Qual peca mais saiu e qual menos saiu nas partidas?

SELECT r.peca, count (*) as vezes
FROM (SELECT j.peca_esquerda as peca
FROM jogo as j
UNION ALL
SELECT j.peca_direita
FROM jogo as j
WHERE j.peca_direita is not null) as r
GROUP BY r.peca
ORDER BY vezes

-- Qual numero de face saiu mais vezes por grupo

SELECT fc.cod_grupo, fc.face, count (*) as vezes
FROM
(SELECT r.cod_grupo, d.face_esquerda as face
FROM
(SELECT j.cod_grupo, j.peca_esquerda as peca
FROM jogo as j
UNION ALL
SELECT j.cod_grupo, j.peca_direita
FROM jogo as j
WHERE j.peca_direita is not null
ORDER BY cod_grupo, peca) as r
INNER JOIN domino as d on (r.peca = d.cod_peca)
UNION ALL
SELECT r.cod_grupo, d.face_direita
FROM
(SELECT j.cod_grupo, j.peca_esquerda as peca
FROM jogo as j
UNION ALL
SELECT j.cod_grupo, j.peca_direita
FROM jogo as j
WHERE j.peca_direita is not null
ORDER BY cod_grupo, peca) as r
INNER JOIN domino as d on (r.peca = d.cod_peca)) as fc
GROUP BY fc.cod_grupo, fc.face
ORDER BY fc.cod_grupo, fc.face

-- Qual o total de casadinhas por grupo

SELECT g.nome_grupo, count (*) as vezes
FROM jogo as j INNER JOIN grupo as g
ON (j.cod_grupo = g.cod_grupo)
WHERE j.peca_direita is not null
GROUP by g.nome_grupo

-- Qual o total de casadinhas por rodada e grupo

SELECT g.nome_grupo, j.num_rodada, count (*) as vezes
FROM jogo as j INNER JOIN grupo as g
ON (j.cod_grupo = g.cod_grupo)
WHERE j.peca_direita is not null
GROUP by g.nome_grupo, j.num_rodada

-- Quem venceu o jogo
-- Quem foi o lanterninha

SELECT g.nome_grupo, count (*) as vezes
FROM jogo as j INNER JOIN grupo as g
ON (j.cod_grupo = g.cod_grupo)
WHERE j.peca_direita is not null
GROUP by g.nome_grupo
ORDER BY vezes DESC