2014-12-10 3 views
2

У меня есть areas стола, как так:Группы по имени и диапазон MySQL

name | lat | lng

Есть много повторяющихся областей. lat и lng являются double типы

atown | 80.66 | 40.1 atown | 80.51 | 40.53 atown | 81.0 | 41.0 atown | 10.0 | 20.0 btown | 70.0 | 30.0

В настоящее время я делаю это:

SELECT * FROM `areas` GROUP BY `name`, `lat`, `lng`

Но то, что я хочу сделать, это это группа далее на основе диапазона значений lat и lng

+/- 2 приемлемо, и они могут быть сгруппированы в одной области:

Так что я должен получить следующий результат:

atown | 80.66 | 40.1 atown | 10.0 | 20.0 btown | 70.0 | 30.0

Большое спасибо заранее.

ответ

1

Вы можете просто использовать различные функции пола и пола. Если вы хотите группировать по 2, вам нужно заполнить номер и вычесть половину% от значения пола.

mysql> select distinct 
-> name, 
-> floor(lat) - floor(lat)%2 lat, 
-> floor(lng) - floor(lng)%2 lng 
-> from areas 
-> ; 
+-------+------+------+ 
| name | lat | lng | 
+-------+------+------+ 
| atown | 80 | 40 | 
| atown | 10 | 20 | 
| btown | 70 | 30 | 
+-------+------+------+ 
+0

Я думаю, вы близки, но я не хочу, чтобы мои данные округлялись. Я просто хотел, чтобы это было сгруппировано по имени и диапазону. Я обновил свой вопрос, чтобы он стал более понятным. –

0

+/- 2 означает шаг за 4, чтобы вы могли разделите lat или lng на 4, как групповые ценности.

SELECT 
    name, 
    floor(lat/4), 
    floor(lng/4), 
    lat,    --or max(lat) or min(lat) 
    lng    --or max(lng) or min(lng) 
FROM 
    areas 
GROUP BY 
    name, 
    floor(lat/4), 
    floor(lng/4) 
Смежные вопросы