blob: cae018203a8f4a0b6b80eabbac1abba17b9b60a9 [file] [view]
---
layout: global
title: QUALIFY Clause
displayTitle: QUALIFY Clause
license: |
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
---
### Description
The `QUALIFY` clause filters rows after window functions have been evaluated.
It can refer to window functions in the `SELECT` list by alias, or define window
functions directly in the `QUALIFY` condition. When an alias in the `SELECT` list
has the same name as an input column, the input column takes precedence.
### Syntax
```sql
QUALIFY boolean_expression
```
### Parameters
* **boolean_expression**
Specifies any expression that evaluates to a result type `boolean`. Two or
more expressions may be combined together using the logical
operators ( `AND`, `OR` ).
**Note**
The current query's `SELECT` list or the `QUALIFY` condition must contain at least
one window function. Aggregate functions are not allowed in the `QUALIFY` condition.
### Examples
```sql
CREATE TABLE dealer (id INT, city STRING, car_model STRING, quantity INT);
INSERT INTO dealer VALUES
(100, 'Fremont', 'Honda Civic', 10),
(100, 'Fremont', 'Honda Accord', 15),
(100, 'Fremont', 'Honda CRV', 7),
(200, 'Dublin', 'Honda Civic', 20),
(200, 'Dublin', 'Honda Accord', 10),
(200, 'Dublin', 'Honda CRV', 3),
(300, 'San Jose', 'Honda Civic', 5),
(300, 'San Jose', 'Honda Accord', 8);
-- `QUALIFY` clause referring to a window function in the `SELECT` list by alias.
SELECT city, car_model, RANK() OVER (PARTITION BY car_model ORDER BY quantity) AS rank
FROM dealer
QUALIFY rank = 1;
+--------+------------+----+
| city| car_model|rank|
+--------+------------+----+
|San Jose|Honda Accord| 1|
| Dublin| Honda CRV| 1|
|San Jose| Honda Civic| 1|
+--------+------------+----+
-- `QUALIFY` clause with a window function directly in the predicate.
SELECT city, car_model
FROM dealer
QUALIFY RANK() OVER (PARTITION BY car_model ORDER BY quantity) = 1;
+--------+------------+
| city| car_model|
+--------+------------+
|San Jose|Honda Accord|
| Dublin| Honda CRV|
|San Jose| Honda Civic|
+--------+------------+
```
### Related Statements
* [SELECT Main](sql-ref-syntax-qry-select.html)
* [WHERE Clause](sql-ref-syntax-qry-select-where.html)
* [GROUP BY Clause](sql-ref-syntax-qry-select-groupby.html)
* [HAVING Clause](sql-ref-syntax-qry-select-having.html)
* [WINDOW Clause](sql-ref-syntax-qry-select-window.html)
* [ORDER BY Clause](sql-ref-syntax-qry-select-orderby.html)
* [SORT BY Clause](sql-ref-syntax-qry-select-sortby.html)
* [CLUSTER BY Clause](sql-ref-syntax-qry-select-clusterby.html)
* [DISTRIBUTE BY Clause](sql-ref-syntax-qry-select-distribute-by.html)
* [LIMIT Clause](sql-ref-syntax-qry-select-limit.html)
* [OFFSET Clause](sql-ref-syntax-qry-select-offset.html)