Как выбрать строки, в которых значения больше, на основе значений другого столбца в SQL

#sql

Вопрос:

Допустим, у вас есть следующая таблица:

ID Дата регион Случаи
1 2013-06-01 Северная Каролина 3
2 2013-06-01 NA 5
3 2013-06-02 Северная Каролина 7
4 2013-06-02 NA 2

Я хочу выбрать (дату, регион, случаи) только тогда, когда случаи NC больше, чем случаи NA в данный день. Например, строки 3 и 4 удовлетворяют этому условию.

Желаемый результат:

ID Дата регион Случаи
3 2013-06-02 Северная Каролина 7
4 2013-06-02 NA 2

Комментарии:

1. Пожалуйста, добавьте желаемый результат …

Ответ №1:

Вы можете получить Date s, которые удовлетворяют вашему условию, с помощью условной агрегации:

 SELECT Date
FROM tablename
GROUP BY Date
HAVING MAX(CASE WHEN region = 'NC' THEN Cases END) >
       MAX(CASE WHEN region = 'NA' THEN Cases END)
 

Используйте приведенный выше запрос в качестве подзапроса:

 SELECT *
FROM tablename
WHERE Date IN (
  SELECT Date
  FROM tablename
  GROUP BY Date
  HAVING MAX(CASE WHEN region = 'NC' THEN Cases END) >
         MAX(CASE WHEN region = 'NA' THEN Cases END) 
)
 

Смотрите демонстрацию.