更新:
如何在派生表中引入以下查询
(3959*acos(cos(弧度(36.247137) )*cos(弧度(cm
)。lat
) ) * cos(弧度(cm
。lng
)-弧度(-115.221032) )sin(弧度(36.247137) )*sin(弧度(cm
.lat
) ) ) ) AS距离
在此MySql查询中:
MySql查询:
SELECT ( 3959 * acos( cos( radians(36.247137) ) * cos( radians( `cm`.`lat` ) ) * cos( radians(`cm`.`lng` ) - radians(-115.221032) ) + sin( radians(36.247137) ) * sin( radians( `cm`.`lat` ) ) ) ) AS distance, min(pl.price_pure) as minPrice, max(pl.price_pure) as maxPrice, min(pl.`squarefeet_pure`) as minSquare, max(pl.`squarefeet_pure`) as maxsquare FROM `plans` pl INNER JOIN property pr ON pr.id = pl.property_id INNER JOIN communities cm ON cm.id = pr.community_id Having distance < 20 order by pl.price_pure, pl.squarefeet_pure
..............................................................................
上一个查询标题是:为什么在MySql查询中应用最大、最小价格公式时没有结果
详细问题:
http://pastebin.com/UR48mbtq这是我的mysql查询。。我想得到20英里以内的房屋的最高和最低价格。。但结果是空的。示例中的距离是20英里,但我的数据库中也显示了20英里和20英里以下的距离
MySql查询:
SELECT ( 3959 * acos( cos( radians(36.247137) ) * cos( radians( `cm`.`lat` ) ) * cos( radians(`cm`.`lng` ) - radians(-115.221032) ) + sin( radians(36.247137) ) * sin( radians( `cm`.`lat` ) ) ) ) AS distance, min(pl.price_pure) as minPrice, max(pl.price_pure) as maxPrice, min(pl.`squarefeet_pure`) as minSquare, max(pl.`squarefeet_pure`) as maxsquare FROM `plans` pl INNER JOIN property pr ON pr.id = pl.property_id INNER JOIN communities cm ON cm.id = pr.community_id Having distance < 20 order by pl.price_pure, pl.squarefeet_pure
因此:
distance minPrice maxPrice minSquare maxsquare
1754.3401139613718 0 21000003 0 8607
但当我添加Having子句时,下面的查询结果为空
SELECT ( 3959 * acos( cos( radians(36.247137) ) * cos( radians( `cm`.`lat` ) ) * cos( radians(`cm`.`lng` ) - radians(-115.221032) ) + sin( radians(36.247137) ) * sin( radians( `cm`.`lat` ) ) ) ) AS distance, (pl.price_pure) as minPrice, (pl.price_pure) as maxPrice, (pl.`squarefeet_pure`) as minSquare, (pl.`squarefeet_pure`) as maxsquare FROM `plans` pl INNER JOIN property pr ON pr.id = pl.property_id INNER JOIN communities cm ON cm.id = pr.community_id Having distance < 20 order by pl.price_pure, pl.squarefeet_pure
更新:如果我从查询中删除最大,最小公式,那么它也给我400个结果。.
有
是在生成查询行之后应用的子句。由于您在查询中有聚合函数,但没有GROUP BY
,mysql为您提供了单个(示例)距离
结果,然后是整个数据集的最小值和最大值。
之后,应用了having
子句,正如@krishnpatel所指出的,1754年
在您的选择中添加一个分组依据
,相当于您的距离
计算,以返回您要查找的结果。
首先收集20英里内物业的ID。
然后将其用作子查询,并将连接到主表以执行其余操作:
SELECT MIN(...), ...
FROM ( SELECT id FROM tbl WHERE ... < 20 ) AS x
JOIN tbl ON x.id = tbl.id;
没有拥有
,没有分组依据
(除非我遗漏了什么)。