Mysql 对查询中的一列求和
在我的mysql查询中,我得到了latitude、longitute和total列。使用lat和long,我做了一些计算工作,这些工作将打印在alias列中。到目前为止,这是可行的。reult看起来像这样: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
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
子句