#mysql #math #group-by
#mysql #математика #группировать по
Вопрос:
У меня есть эти записи
id| num
1 | 2.21231
2 | 2.21234
3 | 2.21228
4 | 3.452
5 | 3.45205
6 | 3.45195
Я хотел бы сгруппировать выбранные элементы, где разница составляет 0,00005 или меньше, в данном случае 1 amp; 2, 1 amp; 3, 4 amp; 5, 4 amp; 6 Или, если это невозможно (1,2,3) и (3,4,5)
Возможно ли это только с mysql?
РЕДАКТИРОВАТЬ исключенные возможности
ROUND
: ложное отрицание0.00004
и0.00005
TRUNCATE
,FLOOR
иCEIL
: ложноположительные0.00001
и0.00009
ложноотрицательные0.00009
значения и0.0011
Ответ №1:
Вы имеете в виду, вот так? :
SELECT t1.id,
t2.id
FROM the_table t1
JOIN the_table t2
ON t1.id < t2.id
AND ABS(t1.num - t2.num) <= .00005
;
Ответ №2:
вы можете использовать group by с помощью функции TRUNCATE, например:
select ..... group by TRUNCATE(num, 4);
Комментарии:
1. если я сгруппирую по округлению, то 1.00004 и 1.00006 не будут в одной группе
2. если вы усекаете, 1.00011 и 1.00009 не сгруппированы, спасибо, что не сдались : D
3. я думаю, вы не можете сделать это с помощью простой встроенной функции, что вы хотите сделать, если у вас есть 3 числа, такие как 1.00011, 1.00015 и 1.00019?
4. то, что я делаю в шкафу, что-то вроде select ….. group by TRUNCATE(число 0.00005, 4);