是什么导致该联合所有功能停止工作?

时间:2018-10-14 00:47:44

标签: mysql

  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 :','。任何意见将是有益的。谢谢。

1 个答案:

答案 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)