Группировка чисел в аналогичном диапазоне

#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);