gpt4 book ai didi

mysql - 如何在 MySQL 中选择每组多行?

转载 作者:可可西里 更新时间:2023-11-01 09:05:12 25 4
gpt4 key购买 nike

这是我的 table “puntos”:

  Equipo      Liga  Puntos
---------------------------
At. Madrid 1 68
Espanyol 1 64
Barcelona 1 63
Real Madrid 1 61
Castellón 1 48
Murcia 2 78
Elche 2 70
Sevilla 2 60
Valladolid 2 57

我只想为属性“Liga”的每个不同值获取两行,其中两行具有按“Liga”分组的“Puntos”的最大值。

所以它应该返回类似的东西:

 Equipo      Liga  Puntos
---------------------------
At. Madrid 1 68
Espanyol 1 64
Murcia 2 78
Elche 2 70

我得到了那个查询的结果:

SELECT * FROM puntos GROUP BY Liga HAVING max(puntos) 
UNION
SELECT p1.Equipo, p1.Liga, max(p1.puntos) FROM puntos p1, (SELECT * FROM puntos GROUP BY Liga HAVING max(puntos) ORDER BY Liga,puntos DESC) p2
WHERE p1.Liga=p2.Liga AND p1.puntos<p2.puntos GROUP BY Liga
ORDER BY Liga,puntos DESC

但如果“puntos”列的选择值相等,则该解决方案不起作用。

对于任何值,是否有任何其他方法可以做到这一点?

最佳答案

另一种选择是使用 9.4 User-Defined Variables :

SELECT
`der`.`Equipo`,
`der`.`Liga`,
`der`.`Puntos`
FROM (
SELECT
`p`.`Equipo`,
`p`.`Liga`,
`p`.`Puntos`,
IF(@`prev_liga` != `p`.`Liga`,
@`rownum` := 1,
@`rownum` := @`rownum` + 1
) `rank`,
@`prev_liga` := `p`.`Liga`
FROM (
SELECT
`Equipo`,
`Liga`,
`Puntos`
FROM `puntos`
GROUP BY `Liga`, `Puntos`
ORDER BY `Liga`, `Puntos` DESC
) `p`, (SELECT
@`rownum` := NULL,
@`prev_liga` := 0) `r`
) `der`
WHERE `der`.`rank` <= 2
ORDER BY `der`.`Liga`, `der`.`rank`;

SQL Fiddle demo

来自同一“Liga”的两支球队等于“Puntos”:

SELECT
`der`.`Equipo`,
`der`.`Liga`,
`der`.`Puntos`
FROM (
SELECT
`p`.`Equipo`,
`p`.`Liga`,
`p`.`Puntos`,
IF(@`prev_liga` != `p`.`Liga`,
@`rownum` := 1,
@`rownum` := @`rownum` + 1
) `rank`,
@`prev_liga` := `p`.`Liga`
FROM (
SELECT
`Equipo`,
`Liga`,
`Puntos`
FROM `puntos`
ORDER BY `Liga`, `Puntos` DESC
) `p`, (SELECT
@`rownum` := NULL,
@`prev_liga` := 0) `r`
) `der`
WHERE `der`.`rank` <= 2
ORDER BY `der`.`Liga`, `der`.`rank`;

SQL Fiddle demo

关于mysql - 如何在 MySQL 中选择每组多行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32290650/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com