2016-03-07 61 views
2

我不太确定如何扩展此查询,以便我也可以有一个AVG(price_current)列...而不必在查询返回时在PHP中计算此值。SELECT列,但也添加AVG列

SELECT 
    listing_subtype, bedrooms, total_baths, tot_sqft_finished, price_current, latitude, longitude, (
    3959 * acos (
     cos (radians(48.639)) 
     * cos(radians(latitude)) 
     * cos(radians(longitude) - radians(-123.404)) 
     + sin (radians(48.639)) 
     * sin(radians(latitude)) 
    ) 
) AS distance 
FROM rets_property_resi 
WHERE listing_subtype = 'Single Family Detached' AND 
bedrooms >= 2 AND bedrooms <= 3 AND 
total_baths >= 1 AND total_baths <= 2 AND 
tot_sqft_finished >= 2000 AND tot_sqft_finished <= 2500 
HAVING distance < 5 
ORDER BY distance 
LIMIT 0, 25; 
+0

是否要平均所有返回的结果,并且所有返回的行都具有相同的值,或者是否希望平均选择某些值,例如浴室等? –

回答

0

我要在这里作出一些假设:

  1. 您在周围请求一个给定半径寻找类似的房子/家。这些家庭中的每一个在您查询的表格中都有一个主键。我们在这里打电话给primKey

  2. 此外,您希望所有返回的房屋的平均价格限制为0,25,而不是表中与您的WHERE子句匹配的所有记录的AVG。

所有返回的行将因此具有平均价格的额外字段,并且对于每一行都是相同的。

您将不得不再次运行与子查询相同的查询。但是,由于您想限制AVG,因此必须在子查询中运行该值才能计算出正确的AVG。 这实在是笨拙:

SELECT 
    rets_property_resi.listing_subtype, rets_property_resi.bedrooms, rets_property_resi.total_baths, rets_property_resi.tot_sqft_finished, rets_property_resi.price_current, rets_property_resi.latitude, rets_property_resi.longitude, (
    3959 * acos (
     cos (radians(48.639)) 
     * cos(radians(latitude)) 
     * cos(radians(longitude) - radians(-123.404)) 
     + sin (radians(48.639)) 
     * sin(radians(latitude)) 
    ) 
) AS distance, outerSubQuery.averagePrice 
FROM rets_property_resi 
LEFT JOIN 
(
    SELECT innerSubQuery.primKey AS primKey, AVG(innerSubQuery.price_current) AS averagePrice 
    FROM 
     (SELECT 
      primKey, price_current, (
      3959 * acos (
       cos (radians(48.639)) 
       * cos(radians(latitude)) 
       * cos(radians(longitude) - radians(-123.404)) 
       + sin (radians(48.639)) 
       * sin(radians(latitude)) 
      ) 
     ) AS distance 
     FROM rets_property_resi 
     WHERE listing_subtype = 'Single Family Detached' AND 
     bedrooms >= 2 AND bedrooms <= 3 AND 
     total_baths >= 1 AND total_baths <= 2 AND 
     tot_sqft_finished >= 2000 AND tot_sqft_finished <= 2500 
     HAVING distance < 5 
     ORDER BY distance 
     LIMIT 0, 25) AS innerSubQuery 
    GROUP BY innerSubQuery.primKey 
) AS outerSubQuery ON (outerSubQuery.primKey = rets_property_resi.primKey) 

WHERE listing_subtype = 'Single Family Detached' AND 
bedrooms >= 2 AND bedrooms <= 3 AND 
total_baths >= 1 AND total_baths <= 2 AND 
tot_sqft_finished >= 2000 AND tot_sqft_finished <= 2500 
HAVING distance < 5 
ORDER BY distance 
LIMIT 0, 25; 

我敢打赌,就是一个更优雅的版本,虽然。你可能在这里使用临时表格更好,或者继续在代码中计算。