mysql加入虚拟表

时间:2013-01-22 20:03:44

标签: mysql join

好的,我有一个评级表。为每个留下评级的用户创建一个新行。我正在尝试做的是创建一个查询,该查询将返回现在和7天前存在的每个特定行的评级值。

广义的观点是,我想计算总平均评分与7天前总平均评分的差异。

我有这个,我认为这是正确的道路,但我正在

Unknown column 'start_ratings.menu_item_id' in 'on clause'

SELECT *
FROM ratings end_ratings
JOIN (
SELECT menu_item_id as end_menu_item_id, AVG(value) AS end_rating
    FROM ratings
    WHERE  
        created_at > current_date - 7
        AND menu_item_id IS NOT NULL
        AND location_id IS NOT NULL
    GROUP BY menu_item_id
) start_ratings ON (end_ratings.menu_item_id = start_ratings.menu_item_id)
WHERE menu_item_id IS NOT NULL
AND location_id IS NOT NULL;

1 个答案:

答案 0 :(得分:3)

您为列as end_menu_item_id设置了别名。只需使用它,因为只有在()子句ON子句中的派生表SELECT之外知道别名,等等......

因此:

SELECT menu_item_id as end_menu_item_id, 
/*-----------------^^^^^^^^^^^^^^^^^^^^^^ */

使用此:

...) start_ratings ON (end_ratings.menu_item_id = start_ratings.end_menu_item_id)
/*----------------------------------------------------------^^^^^^^^^^^^^^^^^^^^^^^ */