繁体   English   中英

同一查询中的分组依据和Haveing子句

[英]Group by and Having clause in the same query

架构:

地点(pid,名称,类型,经纬度,lng,已删除)


我想选择地点数量,按地点类型分组,并且距特定经纬度<10 KM

查询:

SELECT count(p.type) as count
FROM (place as p)
where p.deleted != 1
 and p.pid in
    (
    select p2.pid,
            IFNULL(acos(sin((18.5236 *pi()/180)) * sin((p2.lat*pi()/180))+cos((18.5236 *pi()/180)) * cos((p2.lat *pi()/180)) * cos(((73.8478 - p2.lng)*pi()/180))) * 6371.009, 0) AS distance
    from place p2
    having `distance` < 10
    )
group by p.type;

错误:

操作数应包含1列

那是因为我要在子选择查询中选择2列,即piddistance 但是,如果不使用第二选择列,该如何计算距离。

像这样重写脚本

SELECT  count(p.type) AS count,
        -- remove this if not necessary
        SUM(IFNULL(acos(sin((18.5236 *pi()/180)) * sin((p.lat*pi()/180))+cos((18.5236 *pi()/180)) * cos((p.lat *pi()/180)) * cos(((73.8478 - p.lng)*pi()/180))) * 6371.009, 0)) AS distance

FROM place AS p
WHERE p.deleted != 1
GROUP BY p.type
HAVING SUM(IFNULL(acos(sin((18.5236 *pi()/180)) * sin((p.lat*pi()/180))+cos((18.5236 *pi()/180)) * cos((p.lat *pi()/180)) * cos(((73.8478 - p.lng)*pi()/180))) * 6371.009, 0)) < 10

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM