在同一个表上执行并集

rm5edbpk  于 2021-07-26  发布在  Java
关注(0)|答案(3)|浏览(237)

关闭。这个问题需要细节或清晰。它目前不接受答案。
**想改进这个问题吗?**通过编辑这个帖子来添加细节并澄清问题。

11个月前关门了。
改进这个问题
我想在同一个表上执行并集,将两个不同的结果合并在一起。期望的结果是有6条记录,代表每个地区的前3个最常访问的目的地(在本例中是两个地区ewr、lga)。我标记了sqlserver和mysql,因为我希望查询在这两个rdbms上运行。

sqougxex

sqougxex1#

在你的评论之后编辑这个。

SELECT * 
 FROM (SELECT TOP 3 COUNT(*) AS numberofflights, origin, dest
       FROM flights
       WHERE origin = 'EWR'
       GROUP BY origin, dest
       UNION
       SELECT TOP 3 COUNT(*) AS numberofflights, origin, dest
       FROM flights
       WHERE origin = 'LGA'
       GROUP BY origin, dest
       ) A
 ORDER BY 2,1 desc
bhmjp9jg

bhmjp9jg2#

有两个相同的查询通过 union . 因为 union 删除重复项,这相当于:

select count(*) as numberofflights, origin
from flights
where destination = 'EWR'
group by origin
order by numberofflights desc;

union 是必要的。你的版本只是增加了很多不必要的开销。

bqjvbblv

bqjvbblv3#

对于mysql:
将每个查询都用括号括起来:

(
  select count(flight) as numberOfFlights, origin, dest
  from flights
  where origin = 'EWR'
  group by origin, dest
  order by numberOfFlights desc limit 3
)
union all
(
  select count(flight) as numberOfFlights, origin, dest
  from flights
  where origin = 'LGA'
  group by origin, dest
  order by numberOfFlights desc limit 3
)

对于sql server:

select * from 
(
  select top 3 count(flight) as numberOfFlights, origin, dest
  from flights
  where origin = 'EWR'
  group by origin, dest
  order by numberOfFlights desc
) t1
union all
select * from  
(
  select top 3 count(flight) as numberOfFlights, origin, dest
  from flights
  where origin = 'LGA'
  group by origin, dest
  order by numberOfFlights desc
) t2

相关问题