1

Тема: запит MySQL (GROUP BY з умовою)

Всім добрий день! Є БД електродвигунів. Запит повинен "витягнути" з БД двигуни згруповані по фірмах (виробник) та порахувати їх кількість. Пишу запит:

SELECT seriesMotor, COUNT(*) AS кількість
FROM main
GROUP BY seriesMotor 
ORDER BY кількість DESC

Все добре, але з'являється умова: "якщо кількість двигунів якоїсь фірми менше 10 штук, то цю фірму не показувати" + "кількість цих двигунів зплюсувати і записати їх, як решта "
Наприклад:
Wilo 760
Grundfos 250
АИР 120
решта 47
Умову поставити не проблема (HAVING кількість>10), а ось, як рахувати решту і записати її в кінці не знаю. Підкажіть будь-ласка, як можна вирішити дану проблему!

2

Re: запит MySQL (GROUP BY з умовою)

Думаю краще розбити на 2 запити. Перший буде витягувати фірми, де кількість двигунів більше 10.
А другий буде брати решту.

Такий код і читати простіше буде.

3

Re: запит MySQL (GROUP BY з умовою)

Хм...

(SELECT seriesMotor, COUNT(*) AS кількість
FROM main
GROUP BY seriesMotor
HAVING кількість>10
ORDER BY кількість DESC)
UNION(???)

4

Re: запит MySQL (GROUP BY з умовою)

Ну можна так:
[code=sql]... UNION
SELECT SUM(c1) as c, 'Other' as seriesMotor FROM (
SELECT COUNT(*) as c1, seriesMotor
FROM main as m1
GROUP BY seriesMotor
HAVING (c1 < 4)
) as m2[/code]

Подякували: fed_lviv1

5 Востаннє редагувалося fed_lviv (07.09.2014 17:15:50)

Re: запит MySQL (GROUP BY з умовою)

Вельми вдячний. Ось, що вийшло:

(SELECT seriesMotor, COUNT(*) AS кількість
FROM main
GROUP BY seriesMotor 
HAVING кількість >= 10)
UNION
(SELECT 'інші' AS seriesMotor, SUM(кількість) AS кількість 
FROM (
SELECT seriesMotor, COUNT(*) AS кількість
FROM main 
GROUP BY seriesMotor
HAVING (кількість < 10)
) AS table2)
ORDER BY кількість DESC