2016-10-24 4 views
0

Я пытаюсь выполнить общую функцию подсчета по набору данных с несколькими условиями, но у меня возникают проблемы с этим. Я новичок и пробовал использовать простую функцию подсчета, но мне не повезло. Я изучил случай, когда у меня возникли проблемы с этим. Кто-нибудь знает, как я должен использовать этот код?Функция подсчета с несколькими условиями

Вот пример моего стола:

Name | Date  | Status | Candy | Soda | Water 
Nancy | 10/19/16 | active | 2 | 0 | 1 
Lindsy| 10/20/15 | active | 0 | 1 | 0 
Erica | 10/20/13 | active | 0 | 2 | 3 
Lane | 10/19/14 | active | 0 | 0 | 4 
Alexa | 10/19/16 | notactive | 0 | 5 | 1 
Jenn | 10/19/16 | active | 0 | 0 | 0 

Я ищу, чтобы сделать общий подсчет имен при условии, что: либо конфеты, газированная вода, или вода ничего, кроме нуля (Безразлично «В какой колонке или сколько, только если один из этих трех не равен нулю), учетная запись активна, а также когда дата приходится на последние два года, 10/2014 - 10/2016.

Я хотел бы запрос, чтобы сказать мне, что подсчет общего числа было 3, а также показать мне:

Name | Date  | Status | Candy | Soda | Water 
    Nancy | 10/19/16 | active | 2 | 0 | 1 
    Lindsy| 10/20/15 | active | 0 | 1 | 0 
    Lane | 10/19/14 | active | 0 | 0 | 4 
+0

Вам нужны записи, в которых один _ и только один из трех столбцов не равен нулю, или если столбец _any_ не равен нулю? –

+0

, если какой-либо из столбцов является ненулевым –

+1

MySQL или Oracle? Я сомневаюсь, что это так. – sstan

ответ

0
SELECT * 
FROM yourTable 
WHERE (Candy > 0 OR Soda > 0 OR Water > 0) AND 
     Status = 'active' AND 
     Date BETWEEN '2014-10-01' AND SYSDATE 
0

Это два разных вопроса. Основная идея, чтобы получить строки является:

select t.* 
from t 
where greatest(candy, soda, water) > 0 and 
     status = 'active' and 
     date >= curdate() - interval 2 year; 

(В Oracle, вы могли бы использовать sysdate вместо curdate().)

Чтобы получить счет, вы будете использовать count(*), а не * в select. SQL-запросы возвращают только один набор результатов. , , поэтому вы либо получаете все строки , либо за один счет.

Смежные вопросы