提问者:小点点

如何在派生表概念中转换此查询


更新:

如何在派生表中引入以下查询

(3959*acos(cos(弧度(36.247137) )*cos(弧度(cm)。lat ) ) * cos(弧度(cmlng)-弧度(-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个结果。.


共2个答案

匿名用户

是在生成查询行之后应用的子句。由于您在查询中有聚合函数,但没有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;

没有拥有,没有分组依据(除非我遗漏了什么)。