ORDER BY句を使用したいのですが、上部に特定のエントリが1つあります。これでうまくいくかもしれないと思いましたが、Verticaは2番目のクエリのORDERBY句を無視しています。
(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)
その結果
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は
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;
クエリには、サブクエリではなく、最後にORDER BY
が必要です(少なくとも標準SQLでは、括弧はオプションであり、Verticaで必要かどうかはわかりません)。
( 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
とサブクエリは必要ありません。
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 ;