简体   繁体   中英

UNION not working Teradata SQL. Syntax error: Top N option is not allowed in a query connected by set operators

When I run both queries individually, they run correctly. But when I try to combine both result sets into one table using the UNION operator, it doesn't run and I get the error message: "Syntax error: Top N option is not allowed in a query connected by set operators."

select
    top 1
    city,
    count(*)
from unicorns
where city is not null and industry = 'Edtech'
group by city
order by 2 desc

union

select
    top 1
    city,
    count(*)
from unicorns
where city is not null and industry = 'Internet software & services'
group by city
order by 2 desc

I would appreciate any help, Thanks.

Instead you can use window functions to achieve the same:

select
    city,
    count(*) ccount
from unicorns
where city is not null and industry = 'Edtech'
group by city
QUALIFY ROW_NUMBER() OVER (ORDER BY ccount DESC) = 1

union

select    
    city,
    count(*) ccount
from unicorns
where city is not null and industry = 'Internet software & services'
group by city
QUALIFY ROW_NUMBER() OVER (ORDER BY ccount DESC) = 1

This way you aren't relying on ordering/top an interim result set (outside of partition ordering) and Teradata will be ok with it.

It's probably because the optimizer doesn't know if the 2nd ORDER BY is part of the top or the final ORDER BY of the UNION.

The common workaround for this type of error is to wrap the Selects in Derived Tables/CTEs:

select *
from
 (
   select
       top 1
       city,
       count(*)
   from unicorns
   where city is not null and industry = 'Edtech'
   group by city
   order by 2 desc
 ) as dt

union

select *
from
 (
   select
       top 1
       city,
       count(*)
   from unicorns
   where city is not null and industry = 'Internet software & services'
   group by city
   order by 2 desc
 ) as dt

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM