我要用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/

10-11 03:56