sqlite选择分组结果的最小函数值
题
我有一张桌子上有餐馆连锁店的GPS位置
SELECT *
, MIN(distance($lat, $lon, lat, lon)) as miles
FROM all_restaurants
WHERE lat between $lat1 and $lat2
AND lon between $lon1 and $lon2
AND miles < $miles
GROUP BY restaurant_id
ORDER BY miles ASC
, company_name ASC
LIMIT 500
返回错误
滥用聚合:min()
解决方案 3
Lamak有些正确,但这是我最终做的
SELECT *, distance('+lat+','+lon+', lat, lon) as minmiles
FROM all_restaurants
WHERE restaurant_id || minmiles IN
(
SELECT restaurant_id || MIN(miles) as fewmiles
FROM (
SELECT restaurant_id, distance('+lat+','+lon+', lat, lon) as miles
FROM restaurant_master_combined
WHERE lat BETWEEN $lat AND $lat2 AND lon BETWEEN $lon1 AND $lon2 AND miles < $miles
)
GROUP BY restaurant_id
)
ORDER BY ROUND(minmiles) ASC, company_name ASC
希望这对别人有帮助
其他提示
我认为您的问题是您仅分组 restaurant_id
. 。当您将聚合函数用作 MIN, MAX, SUM, AVG
, ,等等,您需要在 SELECT
不在任何聚合功能中的语句。在这种情况下,您有两个选项,要么在 SELECT
你只放 restaurant_id
如下:
SELECT restaurant_id
, MIN(distance($lat, $lon, lat, lon)) as miles
FROM all_restaurants
WHERE lat between $lat1 and $lat2
AND lon between $lon1 and $lon2
AND miles < $miles
GROUP BY restaurant_id
ORDER BY miles ASC
, company_name ASC
LIMIT 500
或者,您将“*”中包含的其他所有列放在分组中(因为您无法使用 GROUP BY *
).
我敢打赌,您在调用一个函数 distance($lat, $lon, lat, lon)
, ,不是吗?
您是否尝试过使用简单的减法 $lat
和 lat
并使用 MIN
功能?
MIN
我猜是与表字段或一些基本操作(例如减法)一起使用。这可能是遇到错误的原因。
首先,避免使用 *
在使用聚合功能时,请在查询中列出您需要的列。
也许向我们提供示例数据可能会帮助我们找到解决您的方法。
不隶属于 StackOverflow