2014-02-11 2 views
0

Я использую следующий запрос для получения данных из базы данных mysql.MySQL query - limit function

select component,count(component) as Quantity from mfgGroup where 
period between '2013-01-01' and '2013-12-31' 

В результате я получаю почти 100 строк.

Теперь я хочу, чтобы отобразить только верхний 25 components.so я модифицировал запрос, как показано ниже

select component,count(component) as Quantity from mfgGroup where 
period between '2013-01-01' and '2013-12-31' limit 0,25 

Но я то, что мне нужно, чтобы отобразить 25 лучших элементов и остальные компоненты должны быть помечены как " Другие "с количественными числами.

Как показано ниже в результирующем наборе.

Item1 123 
Item2 112 
.... 
.... 
Item25 24 
Others 156 
+0

Что такое '156' в строке' Другие'? Это количество других строк? – Barmar

+0

Да, остальные части компонентов. – CarlJohn

ответ

3
SELECT component, COUNT(*) AS Quantity 
FROM mfgGroup 
WHERE period between '2013-01-01' and '2013-12-31' 
GROUP BY component 
ORDER BY Quantity DESC 
LIMIT 25 

UNION 

SELECT 'Others', COUNT(*) c 
FROM mfgGroup g 
LEFT JOIN (
    SELECT component, COUNT(*) AS Quantity 
    FROM mfgGroup 
    WHERE period between '2013-01-01' and '2013-12-31' 
    GROUP BY component 
    ORDER BY Quantity DESC 
    LIMIT 25 
) top25 
ON g.component = top25.component 
WHERE top25.component IS NULL 
AND period between '2013-01-01' and '2013-12-31' 
HAVING C > 0 
1

Вы можете попробовать использовать row_number также.

SELECT component,sum(quantity) FROM(
SELECT @rn:[email protected]+1 AS rank, IF(@rn>25,"Others",component) component, Quantity 
FROM (
    SELECT component, COUNT(*) AS Quantity 
    FROM mfgGroup 
    WHERE period between '2013-01-01' and '2013-12-31' 
    GROUP BY component 
    ORDER BY Quantity DESC 
) t1, (SELECT @rn:=0) t2 
) temp 
GROUP BY component