分组和聚合

时间:2018-05-01 19:45:15

标签: sql sql-server

我正在努力确定谁是世界杯组中最大的得分手(这是个人项目) 我有数据,但我很难使用计数,分组和拥有,以完成我需要的。

enter image description here

我需要计算梅西的进球数(最高得分手)和每个小组的分组数,这样我才能获得每组的最高分。

现在我只有加入:

select * from zonas
left join goles_zonas on (zonas.id = goles_zonas.Id_zona)
inner join goles on (goles.id = goles_zonas.id_gol)
inner join jugadores on (goles.id_jugador = jugadores.id)

1 个答案:

答案 0 :(得分:0)

而是显示所有列(通过使用SELECT *),为了对数据进行分组,我发现有必要只选择某些列,这些列被认为是确定每组数据集的差异以获得每个数据集组的聚合(在本例中为COUNT)

SELECT Id_zona, id_gol, id_jugador, COUNT(1) as number_of_goal
FROM zonas
left join goles_zonas on (zonas.id = goles_zonas.Id_zona)
inner join goles on (goles.id = goles_zonas.id_gol)
inner join jugadores on (goles.id_jugador = jugadores.id)
GROUP BY Id_zona, id_gol, id_jugador

必须按包含未聚合的select语句的所有列进行分组。

但是如果你希望显示其他列也不属于分组键,你可以这样做

SELECT goles_zonas.* , x.* FROM (
SELECT Id_zona, id_gol, id_jugador, COUNT(1) as number_of_goal
FROM zonas
left join goles_zonas on (zonas.id = goles_zonas.Id_zona)
inner join goles on (goles.id = goles_zonas.id_gol)
inner join jugadores on (goles.id_jugador = jugadores.id)
GROUP BY Id_zona, id_gol, id_jugador ) X 
LEFT JOIN goles_zonas on (x.id = goles_zonas.Id_zona)