PostgreSQL - SOME Operator
Last Updated :
01 Aug, 2024
The PostgreSQL SOME operator is used to compare a scalar value with a set of values returned by a subquery. This operator is useful for performing conditional checks against multiple values, providing a flexible way to filter query results.
Let us better understand the SOME Operator in PostgreSQL from this article.
Syntax
expression operator SOME(subquery)
Rules for Using the SOME Operator
The below rules must be followed while using the PostgreSQL SOME operator:
- Subquery Return: The subquery must return exactly one column.
- Comparison Operators: The SOME operator must be preceded by one of the following comparison operators =, <=, >, <, >, and <>.
- Return Value: The SOME operator returns true if any value of the subquery meets the condition, otherwise, it returns false.
PostgreSQL SOME Operator Examples
For the sake of this article we will be using the sample DVD rental database, which is explained here and can be downloaded by clicking on this link in our examples.
Example 1: Find Films with Length Greater Than or Equal to the Maximum Length by Category
Here we will query for the maximum length of film grouped by film category from the "film" table of our sample database.
Query:
SELECT title
FROM film
WHERE length >= SOME(
SELECT MAX( length )
FROM film
INNER JOIN film_category USING(film_id)
GROUP BY category_id );
Output:

Explanation: This query selects the 'title' of films whose 'length' is greater than or equal to the maximum length of films in any category. The subquery calculates the maximum length for each category, and the 'SOME' operator checks if the film's length is greater than or equal to any of these maximum values.
Example 2: Find Films in Specific Categories
Here we will query for the films whose category is either Action('category_id = 1') or Drama('category_id = 7') from the "category" table of our sample database.
Query:
SELECT
title,
category_id
FROM
film
INNER JOIN film_category
USING(film_id)
WHERE
category_id = SOME(
SELECT
category_id
FROM
category
WHERE
NAME = 'Action'
OR NAME = 'Drama'
);
Output:

Explanation: This query retrieves the 'title' and 'category_id' of films that belong to either the Action or Drama categories. The subquery selects the 'category_id' for these categories, and the 'SOME' operator filters the films based on these category IDs.
Important Points About PostgreSQL SOME Operator
- SOME is equivalent to ANY. Both operators function in the same way.
- The subquery must return a single column, and the outer query compares the column to the values returned by this subquery.
- SOME Operator used in a WHERE clause to compare a value against a set of values returned by a subquery.