gpt4 book ai didi

mysql - 如何确保 HAVING 发生在 GROUP BY 之前

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

我正在抓取距某个点一定距离的银行列表

ICBC                        6805    119.86727673154
Bank of Shanghai 7693 372.999006839511
Bank of Ningbo 7626 379.19406334356
ICBC 6790 399.580754911156
Minsheng Bank 8102 485.904900718796
Standard Chartered Bank 8205 551.038506011767
Guangdong Development Bank 8048 563.713291030103
Bank of Shanghai 7688 575.327270234431
Bank of Nanjing 7622 622.249663674778

但是我只想抢占每个链式店的 1 个 field 。

目前的查询

SELECT name, id , (
GLength( LineStringFromWKB( LineString( `lnglat` , POINT( 121.437478728836, 31.182877821277 ) ) ) )
) *95000 AS `distance`
FROM `banks`
WHERE (
lnglat != ""
)
AND (
published =1
)
HAVING (
distance <700
)
ORDER BY `distance` ASC

按名称分组是行不通的,因为它计算的距离不在范围内。换句话说,如果在 700 m 之外有一个 id 较低的 ICBC,那么即使在 700 m 以内有两个 ICBC,ICBC 也不会出现在结果中。所以我怀疑发生这种情况是因为 group by 发生在 having
之前或者可能有不同的解决方案?

我无法将距离检查移动到 where,因为它不是真正的列 #1054 - 'where clause' 中的未知列 'distance'

最佳答案

将整个查询选择为一个表,然后对其进行分组。

例如

Select * FROM 
(SELECT name, id , (
GLength( LineStringFromWKB( LineString( `lnglat` , POINT( 121.437478728836, 31.182877821277 ) ) ) )
) *95000 AS `distance`
FROM `banks`
WHERE (
lnglat != ""
)
AND (
published =1
)
HAVING (
distance <700
)
ORDER BY `distance` ASC) t
GROUP BY t.name

关于mysql - 如何确保 HAVING 发生在 GROUP BY 之前,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7019174/

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