按名称和范围分组mysql

时间:2014-12-10 04:28:27

标签: mysql

我有一个areas表,如下所示:

name | lat | lng

有许多重复的区域。 latlngdouble类型

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`

但我想要做的是这是一组进一步基于latlng

的一系列值

+/- 2是可以接受的,可以将它们分组为一个区域:

所以我应该得到以下结果:

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

提前非常感谢你。

2 个答案:

答案 0 :(得分:1)

您可以简单地使用distinct和floor功能。如果你想按2分组,你需要将数字置于最低值并从最低值中减去%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 |
+-------+------+------+

答案 1 :(得分:0)

+/- 2表示逐步,因此您可以将latlng除以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)