2013-08-19 5 views
0

Вот вопрос. позволяет предположить, что у меня есть таблица, как этотMySQL как «группировать» по математическому выражению

id | MF_SONUC 
----------  
1 | 5 
2 | 8 
3 | 15 
4 | 12 
5 | 18 
6 | 3 
7 | 40 

, что я хочу добиться, чтобы сгруппировать путем деления значения на некоторую величину (позволяет принимать 8). поэтому результат должен быть что-то вроде этого

count| step 
----------- 
3 | 1 
2 | 2 
1 | 3 
1 | 5 

до сих пор я получил это

SELECT COUNT(CEILING(MF_SONUC /8)) AS counter , MF_SONUC 
FROM `mytable` 
ORDER BY CONVERT(REPLACE(MF_SONUC, ',', '') , DECIMAL(10, 2)) ASC 
GROUP BY CEILING(MF_SONUC /8) 

здесь положение группы поднимает ошибку. может ли кто-нибудь помочь мне с этим? Спасибо

ответ

4

Прежде всего, ваш заказ несколько неправильный: предложение ORDER BY должно быть после оговорки GROUP BY.

Во-вторых, расчет внутри COUNT() не нужен, просто снимите его.

И наконец, я предполагаю, что CEILING операция также должна быть частью результирующем, так что вы можете использовать его в GROUP BY, как показано ниже:

SELECT COUNT(*) AS counter , CEILING(MF_SONUC /8) AS `step` 
FROM `mytable` 
GROUP BY step 
ORDER BY CONVERT(REPLACE(MF_SONUC, ',', '') , DECIMAL(10, 2)) ASC 

Example Fiddle

+0

спасибо, она работала отлично –