Use Case
CASE
can be used in conjunction with SUM
to return a count of only those items matching a pre-defined condition. (This is similar to COUNTIF
in Excel.)
The trick is to return binary results indicating matches, so the "1"s returned for matching entries can be summed for a count of the total number of matches.
Given this table ItemSales
, let's say you want to learn the total number of items that have been categorized as "Expensive":
Id | ItemId | Price | PriceRating |
---|---|---|---|
1 | 100 | 34.5 | EXPENSIVE |
2 | 145 | 2.3 | CHEAP |
3 | 100 | 34.5 | EXPENSIVE |
4 | 100 | 34.5 | EXPENSIVE |
5 | 145 | 10 | AFFORDABLE |
Query
SELECT
COUNT(Id) AS ItemsCount,
SUM ( CASE
WHEN PriceRating = 'Expensive' THEN 1
ELSE 0
END
) AS ExpensiveItemsCount
FROM ItemSales
Results:
ItemsCount | ExpensiveItemsCount |
---|---|
5 | 3 |
Alternative:
SELECT
COUNT(Id) as ItemsCount,
SUM (
CASE PriceRating
WHEN 'Expensive' THEN 1
ELSE 0
END
) AS ExpensiveItemsCount
FROM ItemSales