首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Vertica联合与订购

问Vertica联合与订购
EN

Database Administration用户
提问于 2016-09-22 15:07:12
回答 1查看 462关注 0票数 1

我想使用ORDER子句,但仍然有一个特定的条目在顶部。我认为这样可以做到,但是Vertica忽略了第二个查询中的ORDER子句:

代码语言:javascript
复制
(SELECT country_id, country_name 
FROM country_dim 
WHERE country_dim.iso_country_code LIKE 'US')
UNION 
(SELECT country_id, country_name 
FROM country_dim 
WHERE country_dim.iso_country_code NOT LIKE 'US' 
ORDER BY country_name ASC)

导致

代码语言:javascript
复制
12  United States of America
10  Germany
5   Brazil
6   Canada
7   China
8   France
4   Algeria
3   Aland Islands
2   Albania
8   Denmark
11  United Arab Emirates
13  Central African Republic
-1  Unknown
14  Svalbard and Jan Mayen

DDL是

代码语言:javascript
复制
CREATE TABLE country_dim
(
    country_id int NOT NULL,
    iso_country_code char(2) NOT NULL,
    country_name varchar(512) NOT NULL,
    create_ts timestamptz,
    update_ts timestamptz
);

ALTER TABLE country_dim ADD CONSTRAINT country_dim_pk PRIMARY KEY (country_id) DISABLED;
EN

回答 1

Database Administration用户

回答已采纳

发布于 2016-09-22 15:51:13

查询最后需要ORDER BY,而不是子查询(注意括号是可选的,至少在标准SQL中是可选的,不确定Vertica是否需要它们):

代码语言:javascript
复制
( SELECT country_id, country_name 
  FROM country_dim 
  WHERE iso_country_code LIKE 'US')
UNION 
( SELECT country_id, country_name 
  FROM country_dim 
  WHERE iso_country_code NOT LIKE 'US')     -- without ORDER BY
ORDER BY 
    CASE WHEN iso_country_code LIKE 'US' THEN 0 ELSE 1 END ASC,
    country_name ASC ; 

但是,由于您从同一个表中获取所有数据,所以不需要UNION和子查询:

代码语言:javascript
复制
SELECT country_id, country_name 
FROM country_dim 
ORDER BY 
    CASE WHEN iso_country_code LIKE 'US' THEN 0 ELSE 1 END ASC,
    country_name ASC ; 
票数 4
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/150416

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档