--Quais os jogadores de um determinado grupo?
SELECT G.NOME_GRUPO, J.NOME_JOGADOR
FROM JOGADOR AS J INNER JOIN GRUPO AS G
ON (J.COD_GRUPO = G.COD_GRUPO)
ORDER BY G.COD_GRUPO

--Quais grupos não possuem quaisquer jogadores cadastrados?
SELECT *
FROM GRUPO
WHERE COD_GRUPO NOT IN
(SELECT COD_GRUPO
FROM JOGADOR)

--Quantas rodadas teve até o presente momento?

SELECT COUNT (DISTINCT NUM_RODADA)
FROM JOGO

--Quais peças NÃO FORAM sorteadas até o presente momento?
SELECT COD_PECA
FROM DOMINO
WHERE COD_PECA NOT IN (
SELECT PECA_ESQUERDA AS PECA_JOGO
FROM JOGO
UNION ALL
SELECT PECA_DIREITA
FROM JOGO
WHERE PECA_DIREITA IS NOT NULL)

--Quais peças foram sorteadas até o presente momento?
SELECT COD_PECA
FROM DOMINO
WHERE COD_PECA IN (
SELECT PECA_ESQUERDA AS PECA_JOGO
FROM JOGO
UNION ALL
SELECT PECA_DIREITA
FROM JOGO
WHERE PECA_DIREITA IS NOT NULL)

--Quais peças foram colocadas em uma determinada rodada de um grupo específico ?
SELECT ORDEM, PECA, D.FACE_ESQUERDA, D.FACE_DIREITA
FROM
(SELECT NUM_RODADA, COD_GRUPO, ORDEM, PECA_ESQUERDA AS PECA
FROM JOGO
UNION ALL
SELECT NUM_RODADA, COD_GRUPO, ORDEM, PECA_DIREITA
FROM JOGO
WHERE PECA_DIREITA IS NOT NULL) AS TAB
INNER JOIN DOMINO AS D
ON (TAB.PECA = D.COD_PECA)
WHERE NUM_RODADA = 1 AND COD_GRUPO = 2
ORDER BY ORDEM

--Quais peças mais sairam por grupo?
SELECT *
FROM
(SELECT COD_GRUPO, PECA, COUNT (*) AS QTDE
FROM
(SELECT COD_GRUPO, PECA_ESQUERDA AS PECA
FROM JOGO
UNION ALL
SELECT COD_GRUPO, PECA_DIREITA
FROM JOGO
WHERE PECA_DIREITA IS NOT NULL) AS TAB
GROUP BY COD_GRUPO, PECA) AS TAB3
WHERE (COD_GRUPO, QTDE) IN
(SELECT COD_GRUPO, MAX (QTDE) AS QTDE
FROM
(SELECT COD_GRUPO, PECA, COUNT (*) AS QTDE
FROM
(SELECT COD_GRUPO, PECA_ESQUERDA AS PECA
FROM JOGO
UNION ALL
SELECT COD_GRUPO, PECA_DIREITA
FROM JOGO
WHERE PECA_DIREITA IS NOT NULL) AS TAB
GROUP BY COD_GRUPO, PECA) AS TAB2
GROUP BY COD_GRUPO)
ORDER BY COD_GRUPO

--Quantas vezes uma determinada peça saiu nas rodadas?
SELECT PECA, COUNT (*) AS QTDE
FROM
(SELECT PECA_ESQUERDA AS PECA
FROM JOGO
UNION ALL
SELECT PECA_DIREITA
FROM JOGO
WHERE PECA_DIREITA IS NOT NULL) AS TAB
GROUP BY PECA
ORDER BY QTDE DESC

--Quantas vezes uma determinada peça saiu nas rodadas para um grupo específico?

SELECT PECA, COUNT (*) AS QTDE
FROM
(SELECT COD_GRUPO, PECA_ESQUERDA AS PECA
FROM JOGO
UNION ALL
SELECT COD_GRUPO, PECA_DIREITA
FROM JOGO
WHERE PECA_DIREITA IS NOT NULL) AS TAB
WHERE COD_GRUPO = 7
GROUP BY PECA
ORDER BY QTDE DESC

--Qual peça mais saiu e qual menos saiu nas partidas?
SELECT PECA, QTDE
FROM
(SELECT PECA, COUNT (*) AS QTDE
FROM
(SELECT PECA_ESQUERDA AS PECA
FROM JOGO
UNION ALL
SELECT PECA_DIREITA
FROM JOGO
WHERE PECA_DIREITA IS NOT NULL) AS TAB
GROUP BY PECA) AS TAB3

INNER JOIN

(SELECT MAX (QTDE) AS QMAX , MIN (QTDE) AS QMIN
FROM
(SELECT PECA, COUNT (*) AS QTDE
FROM
(SELECT PECA_ESQUERDA AS PECA
FROM JOGO
UNION ALL
SELECT PECA_DIREITA
FROM JOGO
WHERE PECA_DIREITA IS NOT NULL) AS TAB
GROUP BY PECA) AS TAB2) AS TAB4

ON (TAB3.QTDE = TAB4.QMAX OR TAB3.QTDE = TAB4.QMIN)
ORDER BY QTDE

--Que número de face saiu mais vezes?
SELECT FACE, COUNT (*) AS QTDE
FROM
(SELECT FACE_ESQUERDA AS FACE
FROM
(SELECT PECA_ESQUERDA AS PECA
FROM JOGO
UNION ALL
SELECT PECA_DIREITA
FROM JOGO
WHERE PECA_DIREITA IS NOT NULL) AS TAB
INNER JOIN DOMINO AS D
ON (TAB.PECA = D.COD_PECA)
UNION ALL
SELECT FACE_DIREITA
FROM
(SELECT PECA_ESQUERDA AS PECA
FROM JOGO
UNION ALL
SELECT PECA_DIREITA
FROM JOGO
WHERE PECA_DIREITA IS NOT NULL) AS TAB
INNER JOIN DOMINO AS D
ON (TAB.PECA = D.COD_PECA)) AS TAB2
GROUP BY FACE
ORDER BY QTDE DESC


--Que número de face saiu mais vezes, por grupo
Qual o total de casadinhas por grupo?
SELECT G.NOME_GRUPO, QTDE
FROM
(SELECT COD_GRUPO, COUNT(*) AS QTDE
FROM JOGO
WHERE PECA_DIREITA IS NOT NULL
GROUP BY COD_GRUPO
) AS TAB
INNER JOIN GRUPO AS G
ON (TAB.COD_GRUPO = G.COD_GRUPO)
ORDER BY QTDE DESC

--Qual o total de casadinhas por rodada e grupo ?
SELECT NUM_RODADA, COD_GRUPO, COUNT(*) AS QTDE
FROM JOGO
WHERE PECA_DIREITA IS NOT NULL
GROUP BY NUM_RODADA, COD_GRUPO
ORDER BY NUM_RODADA, COD_GRUPO

Quem venceu o jogo ?
SELECT *
FROM
(SELECT COD_GRUPO, COUNT(*) AS QTDE
FROM JOGO
WHERE PECA_DIREITA IS NOT NULL
GROUP BY COD_GRUPO
) AS TAB
WHERE QTDE IN (

SELECT MAX (QTDE)
FROM
(SELECT COD_GRUPO, COUNT(*) AS QTDE
FROM JOGO
WHERE PECA_DIREITA IS NOT NULL
GROUP BY COD_GRUPO
) AS TAB
)