gpt4 book ai didi

mysql - 智能 SQL 分组依据

转载 作者:行者123 更新时间:2023-11-29 14:07:26 31 4
gpt4 key购买 nike

我有一个 SQL 表:名称、位置、体积

  • 名称为字符串类型
  • 位置是两个 float 类型的字段(纬度和经度)
  • int 类型的体积

我想运行一个 SQL 查询,该查询将对特定范围内的所有位置进行分组并对所有卷进行求和

例如,将纬度 1.001 到 2 度、经度 1.001 到 2 度的所有位置分组为一个,其所有体积总和为纬度和经度 2.001 到 3 度,依此类推。

简而言之,我想对一个地理区域内的所有体积进行求和,以便我可以确定其大小。

我不关心名称,只需要位置(可以是任何分组的位置或平均值)和体积总和。

这是一个示例表:

CREATE TABLE IF NOT EXISTS `example` (
`name` varchar(12) NOT NULL,
`lat` float NOT NULL,
`lng` float NOT NULL,
`volume` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `example` (`name`, `lat`, `lng`, `volume`) VALUES
("one", 1.005, 1.007, 2),
("two", 1.25, 1.907, 3),
("three", 2.065, 65.007, 2),
("four", 2.905, 65.1, 10),
("five", 12.3, 43.8, 5),
("six", 12.35, 43.2, 2);

对于大小为 1 度的区域的返回查询可能是:

1.005, 1.007, 5

2.065, 65.007, 12

12.3, 43.8, 7

我正在使用 JDBC、GWT(我不认为这有什么区别)和 MySQL。

最佳答案

如果您对小数点感到满意,请使用round()truncate():

select truncate(latitude, 0)as lat0, truncate(longitude, 0) as long0, sum(vaolume)
from t
group by truncate(latitude, 0), truncate(longitude, 0)

更通用的解决方案定义了两个精度变量:

set @LatPrecision = 0.25, @LatPrecision = 0.25

select floor(latitude/@LatPrecision)*@LatPrecision,
floor(longitude/@LongPrecision)*@LongPrecision,
sum(value)
from t
group by floor(latitude/@LatPrecision),
floor(longitude/@LongPrecision)*@LongPrecision

关于mysql - 智能 SQL 分组依据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14142708/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com