如何使用不为空的连接选择过滤楼层计算值?

时间:2016-10-30 15:11:14

标签: sql magento

我有连接查询(在magento中):

    SELECT FLOOR(rating.rating_summary/20) AS `rating_value`,
           COUNT(*) AS `count`
    FROM `catalog_product_flat_3` AS `e`
    INNER JOIN `catalogsearch_result` AS `search_result` ON search_result.product_id=e.entity_id
    AND search_result.query_id='218'
    INNER JOIN `catalog_product_index_price` AS `price_index` ON price_index.entity_id = e.entity_id
    AND price_index.website_id = '1'
    AND price_index.customer_group_id = 0
    INNER JOIN `review_entity_summary` AS `rating` ON rating.entity_pk_value = e.entity_id
    AND rating.store_id = 0;

需要在rating_valuecount < 1

中过滤掉包含NULL的行
    +--------------+-------+
    | rating_value | count |
    +--------------+-------+
    |         NULL |     0 |
    +--------------+-------+
    1 row in set (0,00 sec)

但由于某些原因,我尝试WHERE count > 0rating_value IS NOT NULL它表示主题栏rating_valuecount不存在,我该怎么办?

谢谢!

1 个答案:

答案 0 :(得分:1)

正确。 SELECT中定义的列别名无法在WHERE中使用。您需要子查询或重复表达式:

WHERE FLOOR(rating.rating_summary/20) IS NOT NULL

这相当于:

WHERE rating.rating_summary IS NOT NULL

count需要进入HAVING子句,我写作:

HAVING count = 0 OR rating_value IS NOT NULL

我还希望你的查询有一个GROUP BY子句,它似乎缺失了。

所以我怀疑你想要:

SELECT FLOOR(rating.rating_summary/20) AS `rating_value`,
       COUNT(*) AS `count`
FROM `catalog_product_flat_3` pf INNER JOIN
     `catalogsearch_result` sr
      ON sr.product_id = pf.entity_id AND
         sr.query_id = 218 INNER JOIN
      `catalog_product_index_price` pip
      ON pip.entity_id = pf.entity_id AND
        pip.website_id = 1 AND
        pip.customer_group_id = 0 INNER JOIN
      `review_entity_summary` r
     ON r.entity_pk_value = pf.entity_id AND r.store_id = 0
GROUP BY FLOOR(r.rating_summary/20)
HAVING `count` = 0 OR rating_value IS NULL;