Mysql 对查询中的一列求和

Mysql 对查询中的一列求和,mysql,Mysql,在我的mysql查询中,我得到了latitude、longitute和total列。使用lat和long,我做了一些计算工作,这些工作将打印在alias列中。到目前为止,这是可行的。reult看起来像这样: Lat long length total ----------------------------------------- 49.236000 11.637500 3100 0.401500 49.178900 11.731900 3

在我的mysql查询中,我得到了latitude、longitute和total列。使用lat和long,我做了一些计算工作,这些工作将打印在alias列中。到目前为止,这是可行的。reult看起来像这样:

Lat         long        length  total
-----------------------------------------
49.236000   11.637500   3100    0.401500
49.178900   11.731900   3100    0.553000
49.582100   10.988300   3600    0.593800
Lat         long        length  total
-----------------------------------------
49.236000   11.637500   3100    0.401500
49.178900   11.731900   3100    0.553000
49.582100   10.988300   3600    0.593800
----------------------------------------
                        9800
SELECT latitude, longitude, length, (ABS( latitude - 49.439810 ) + ABS( longitude - 11.439810 )) as total 
FROM records ORDER BY total LIMIT 20
UNION
SELECT NULL, NULL, SUM(length), NULL 
FROM records
LIMIT 20
现在我想对长度列中的所有值求和,得到一个值
total\u length

这是我的sql语句:

SELECT latitude, longitude, length, (ABS( latitude - 49.439810 ) + ABS( longitude - 11.439810 )) as total FROM records ORDER BY total LIMIT 20
甚至可以只总结一列吗

我需要的是这样的东西:

Lat         long        length  total
-----------------------------------------
49.236000   11.637500   3100    0.401500
49.178900   11.731900   3100    0.553000
49.582100   10.988300   3600    0.593800
Lat         long        length  total
-----------------------------------------
49.236000   11.637500   3100    0.401500
49.178900   11.731900   3100    0.553000
49.582100   10.988300   3600    0.593800
----------------------------------------
                        9800
SELECT latitude, longitude, length, (ABS( latitude - 49.439810 ) + ABS( longitude - 11.439810 )) as total 
FROM records ORDER BY total LIMIT 20
UNION
SELECT NULL, NULL, SUM(length), NULL 
FROM records
LIMIT 20
将有一个给定值,如
20000
。如果总长度小于
20000
则应将
限值
相加10,然后再次计算总长度。直到总长度达到20000或以上时,才进行此操作


对SQL DB的请求将来自node.js后端。

我会将问题一分为二,并使用不同的查询计算总和

SELECT SUM(length) 
FROM records
为了得到你想要的确切结果,你可能需要做一些像这样的魔术:

Lat         long        length  total
-----------------------------------------
49.236000   11.637500   3100    0.401500
49.178900   11.731900   3100    0.553000
49.582100   10.988300   3600    0.593800
Lat         long        length  total
-----------------------------------------
49.236000   11.637500   3100    0.401500
49.178900   11.731900   3100    0.553000
49.582100   10.988300   3600    0.593800
----------------------------------------
                        9800
SELECT latitude, longitude, length, (ABS( latitude - 49.439810 ) + ABS( longitude - 11.439810 )) as total 
FROM records ORDER BY total LIMIT 20
UNION
SELECT NULL, NULL, SUM(length), NULL 
FROM records
LIMIT 20

这是可行的,但拥有一个“定制”行并不是我所说的干净方法。

如果您确实需要一个查询,您可以在这里使用汇总技巧:

SELECT
    latitude,
    longitude,
    ABS(latitude - 49.439810) + ABS(longitude - 11.439810) AS total,
    SUM(length)
FROM records
GROUP BY
    latitude,
    longitude,
    ABS(latitude - 49.439810) + ABS(longitude - 11.439810)
WITH ROLLUP 
HAVING
    (longitude IS NOT NULL AND total IS NOT NULL) OR latitude IS NULL;


输出应该是什么还不是很清楚,您能得到示例的预期结果吗?您如何“使用”查询结果?(PHP?C#?、Java?…)在产品中执行此操作可能比在MySQL中执行此操作更简单、更高效,尤其是当您使用表示分页的限制时。是的,但它只会传递一行,或重复多行具有相同值。@Jens I添加了预期的result@Used_By_Already请求将来自node.js后端,因此将是JavaScriptRead,并始终将其放在您的后口袋中:我使用phpmyadmin来管理我的数据库。但是它看起来好像不知道键
汇总
@WeSt。上面的查询应该直接从MySQL工作台运行。我不能担保其他事情。
total
不是表中的一列<代码>总计
是计算出的value@WeSt我更新了我的查询,但这并没有改变我给出的基本答案。这里的问题是
SUM(length)…FROM records
将汇总表记录中的所有条目,但这太多了。我只想对第一个查询结果中的值求和,只需添加
LIMIT
子句