sql - СУММА (СЛУЧАЙ КОГДА) - PullRequest
0 голосов
/ 11 февраля 2020

В чем разница между двумя запросами?

1-й запрос:

SUM(CASE WHEN (condition_1) 
           OR (condition_2) 
           OR (condition_3) 
    THEN 1 ELSE 0 
    END)

2-й запрос:

SUM(CASE WHEN (condition_1) THEN 1 ELSE 0 END +
    CASE WHEN (condition_2) THEN 1 ELSE 0 END +
    CASE WHEN (condition_3) THEN 1 ELSE 0 END)

1 Ответ

2 голосов
/ 11 февраля 2020

Два выражения не эквивалентны. Первое выражение добавляет по одному для каждой записи, которая удовлетворяет любому из 3 условий. Второй добавляет один для каждой записи и условие, которое выполняется, поэтому он может добавить до 3 для записей.

Если условия не являются взаимоисключающими, результаты будут отличаться.

Рассмотрим следующие условия:

condition_1     id > 1
condition_2     id > 2
condition_3     id > 3

Для этого набора данных:

id
---
1
2
4

Первое выражение даст 2 (поскольку 3 записи из 3 удовлетворяют хотя бы одному из условий ).

Второе выражение даст 3 (поскольку третья запись удовлетворяет двум условиям, к результату добавится 2).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...