Как выбрать переменную, которая дает выход такой же, как функция первенствовать:Как сделать СЧЕТЕСЛИ() в Oracle
COUNTIFS(A1:D1,"<25", A1:D1, ">16")?
И.Э. чтобы подсчитать количество раз значения в моих четырех полей между 16 и 25.
Как выбрать переменную, которая дает выход такой же, как функция первенствовать:Как сделать СЧЕТЕСЛИ() в Oracle
COUNTIFS(A1:D1,"<25", A1:D1, ">16")?
И.Э. чтобы подсчитать количество раз значения в моих четырех полей между 16 и 25.
Вы можете сделать это с помощью count()
и case
выражений. Примечание: case
имеет необязательное предложение else
; если он не используется, то значение else
по умолчанию - null
. Count подсчитывает только ненулевые значения, поэтому вы можете комбинировать эти наблюдения для написания компактного кода. ЧТО подсчитано не имеет значения; поэтому выражение case
может возвращать число (1 является обычным, но 0 является таким же правильным и даст тот же результат, поскольку значения COUNTED, а не SUMMED), но вы также можете иметь строку типа «x» или дату в выражении случая. Чтобы проиллюстрировать это, я буду использовать строку.
select count(case when col > 16 and col < 25 then 'x' end) as ct from your_table;
Здесь your_table
это имя вашей таблицы, col
это имя столбца, содержащего значения, и ct
это имя результирующего столбца (метка для подсчета значений, которые удовлетворяют условию).
Конечно, в базе данных вы можете получить тот же результат более легко:
select count(*) as ct from your_table where col > 16 and col < 25;
Заметим, однако, что значения в одном столбце.
Если вместо этого у вас есть таблица с четырьмя столбцами и многими строками, а все значения во всех столбцах - это числа, и вы хотите добавить столбец, показывающий, сколько значений строго находится между 16 и 25 в каждом канале, решение отличается (но он использует одни и те же идеи):
select col1, col2, col3, col4,
case when col1 > 16 and col1 < 25 then 1 else 0 end +
case when col2 > 16 and col2 < 25 then 1 else 0 end +
case when col3 > 16 and col3 < 25 then 1 else 0 end +
case when col4 > 16 and col4 < 25 then 1 else 0 end as ct
from my_table;
Вы бы сделать это в запросе SQL с помощью case
:
select sum(case when col between 16 and 25 then 1 else 0 end)
from t;
Обратите внимание, что between
это включено в SQL, а не эксклюзив , поэтому на основе вашей логики кода:
select sum(case when col > 16 and col < 25 then 1 else 0 end)
from t;
Думают, у вас есть 'user_table'
, где некоторые из пользователя «статус» являются active (code-11)
и другие inactive (code-22)
. Вы можете считать активным и неактивным с помощью этого sql
ниже.
select count(case when status = 11 then 1 end) u_active, count(case when status = 22 then 1 end) u_inactive, from user_table;