Duvida mysql

xina12

Power Member
Boas.

tenho uma tabela com 18 equipas de futebol. Consigo ordenar a tabela classificativa através do seguinte código sql que me baseia a classificação diretamente no registo de cada jornada:
select team
, sum(win) as totalwin
, sum(loss) as totalloss
, sum(tie) as totaltie
, ((sum(win) * 3) + (sum(tie) * 1)) as points
, sum(golo) as golom
, sum(gol) as golos
, (sum(golo)-sum(gol)) as dif
from (
select id, equipa1 as team, golo1 as golo, golo2 as gol
, case when golo1 > golo2 then 1 else 0 end as win
,case when golo1 < golo2 then 1 else 0 end as loss
,case when golo1 = golo2 then 1 else 0 end as tie
from jornadas where campeonato = '14' and estado = '3' and epoca = '2021'
union
select id, equipa2 as team, golo2 as golo, golo1 as gol
, case when golo2 > golo1 then 1 else 0 end as win
,case when golo2 < golo1 then 1 else 0 end as loss
,case when golo2 = golo1 then 1 else 0 end as tie
from jornadas where campeonato = '14' and estado = '3' and epoca = '2021'
) as a
group by team ORDER BY points DESC, golom DESC
Que me dá um satisfatório resultado assim:

teamtotalwintotallosstotaltiepointsgolom Descendente 1golosdif
121003404
181003321
15010023-1
220011220
41003202
311003211
141003211
190011220
30011220
261003211
230011220
21010012-1
25010012-1
16010012-1
21003101
24010004-4
17010001-1
13010002-2

Até aqui nenhum problema.

No entanto eu preciso de descobri qual/quais e quantas equipas é que têm o registo mais alto de golos marcados.
No exemplo seria apenas 1 equipa ( team 12 --> 4 golom).

Como é que eu aplico o MAX e o COUNT ao código supra mencionado?
 

reise

Power Member
Assim um hack rápido e sem testar, algo deste género.
WITH stats
AS (SELECT id,
equipa1 AS team,
golo1 AS golo,
golo2 AS gol,
CASE
WHEN golo1 > golo2 THEN 1
ELSE 0
END
AS win,
CASE
WHEN golo1 < golo2 THEN 1
ELSE 0
END
AS loss,
CASE
WHEN golo1 = golo2 THEN 1
ELSE 0
END
AS tie
FROM jornadas
WHERE campeonato = '14'
AND estado = '3'
AND epoca = '2021'
UNION
SELECT id,
equipa2 AS team,
golo2 AS golo,
golo1 AS gol,
CASE
WHEN golo2 > golo1 THEN 1
ELSE 0
END
AS win,
CASE
WHEN golo2 < golo1 THEN 1
ELSE 0
END
AS loss,
CASE
WHEN golo2 = golo1 THEN 1
ELSE 0
END
AS tie
FROM jornadas
WHERE campeonato = '14'
AND estado = '3'
AND epoca = '2021'),
by_team
AS ( SELECT team,
SUM (win) AS totalwin,
SUM (loss) AS totalloss,
SUM (tie) AS totaltie,
( (SUM (win) * 3) + (SUM (tie) * 1)) AS points,
SUM (golo) AS golom,
SUM (gol) AS golos,
(SUM (golo) - SUM (gol)) AS dif
FROM stats a
GROUP BY team),
max_total_wins AS (SELECT MAX (total_win) max_total_win FROM by_team)
SELECT *
FROM by_team a, max_total_wins b
WHERE a.total_win = b.max_total_win
ORDER BY points DESC, golom DESC
 
Topo