我要用MySQL数据绘制一个饼图。我需要检索前n行并将其余的分组。
问题在于第一个查询已被分组。
SELECT name AS especie, SUM(superficie) AS superficie
FROM ciclos
JOIN cultivos ON id_cultivo = idcultivo
JOIN tbl_especies ON id_especie = idespecie
WHERE fecha_cierre IS NULL
GROUP BY id_especie
ORDER BY superficie DESC
这是我得到的:
+------------+------------+
| Especie | Superficie |
+------------+------------+
| Avena | 50.0000 |
| Centeno | 32.4000 |
| Trigo | 18.0000 |
| Almendros | 5.1100 |
| Olivos | 4.7000 |
| Vid | 1.8300 |
| Nogal | 0.3500 |
| Cerezo | 0.2500 |
+------------+------------+
这就是我需要的:
+------------+------------+
| Especie | Superficie |
+------------+------------+
| Avena | 50.0000 |
| Centeno | 32.4000 |
| Trigo | 18.0000 |
| Almendros | 5.1100 |
| Rest | 7.1300 |
+------------+------------+
在这种情况下,我需要检索前4行并将其余行分组。
有什么办法可以解决一个查询吗?
最佳答案
解决了:
我采用了@Gordon Linoff的概念,并将其与this混合。
@Gordon Linoff解决方案的问题在于,在订单期间添加了行号。
SELECT @rn := @rn + 1 AS rn, SUM(superficie) AS superficie, (CASE WHEN @rn <= 4 THEN name ELSE "Other" END) AS especie
FROM (
SELECT name, SUM(superficie) AS superficie
FROM ciclos
JOIN cultivos ON id_cultivo = idcultivo
JOIN tbl_especies ON id_especie = idespecie
WHERE fecha_cierre IS NULL
GROUP BY id_especie
ORDER BY superficie DESC
) AS temp
CROSS JOIN (SELECT @rn := 0) AS const
GROUP BY (CASE WHEN @rn <= 4 THEN name ELSE "Other" END)
ORDER BY superficie DESC
希望这对某人有帮助。谢谢您的帮助。
关于mysql - MySQL返回前n行并将其余行分组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16409905/