SELECT distinct RESTAURANT, RANK,
(select avg(SCORE)
from TRIPADVISOR
where rank<=10 and rank>=0) as top10
FROM TRIPADVISOR
ORDER BY RANK LIMIT 10
union all
SELECT distinct RESTAURANT, RANK,
(select avg(SCORE)
from TRIPADVISOR
where rank<=249 and rank>=57) as bottom10
FROM TRIPADVISOR
ORDER BY RANK DESC LIMIT 10
我想问一个简单的问题。如您在上面看到的,我要合并所有同一个表中的两个查询。我是sql的新手,所以大多数功能和聚合我都不熟悉。这是两难选择。我有一个TRIPADVISOR表,该表包含饭店列(即饭店名称),等级列(即旅行顾问排名)和得分列。对于第一个查询,我能够成功获得TripAdvisor排名前10位的平均得分。对于底部,其底部10位排名。我遇到的问题是将这两个平均结果合并到一个查询中。我有第一个查询选项卡,第二个有另一个查询选项卡。我只是将第二个查询复制到第一个查询中,然后插入全部并集。我正在使用mysqlworkbench。它给我的错误是:工会在此职位上无效,期望:EOF :','。任何意见将是有益的。谢谢。
答案 0 :(得分:1)
如果您想使用()
或ORDER BY
子句来应用于LIMIT
中的各个查询,则需要将查询括在UNION
中(请参阅{{3 }}):
(SELECT distinct RESTAURANT, RANK,
(select avg(SCORE)
from TRIPADVISOR
where rank<=10 and rank>=0) as top10
FROM TRIPADVISOR
ORDER BY RANK LIMIT 10)
union all
(SELECT distinct RESTAURANT, RANK,
(select avg(SCORE)
from TRIPADVISOR
where rank<=249 and rank>=57) as bottom10
FROM TRIPADVISOR
ORDER BY RANK DESC LIMIT 10)