2015-09-22 3 views
1

Я хотел бы получить сумму всех апельсинов в строке за конкретный год и конкретный месяц и конкретного пользователя. Я попробовал пару вариантов с AND & ИЛИ. Я не уверен, как пользователю и в более чем трех условиях. Ниже приведен пример сетки, для которых, например, желаемый результат 2 для первого ряда
прикрепленного примера в формате ПОС и один из запроса я пытаюсь с этоРасчет строк с более чем двумя условиями

Запрос

SELECT count(*) FROM `usr_fruit` 
where (d1="orange" or d2=" orange " or d3=" orange " or d4=" orange ") 
and year=115 and usrNo= 1 and month=2 

таблица выглядит это

usrNo d1  d2  d3  d4  month year 

1  orange apple apple orange 2  115 
1  apple apple apple apple 3  114 
2  apple apple apple orange 2  115 
2  apple apple apple apple 3  114 
+0

так что же такое вопрос? Ошибка запроса? Возврат неверных результатов? – Mureinik

+0

, когда я использую месяц = ​​2, тогда он показывает только 1, но если я удалю месяц = ​​1, тогда он даст результат как 2 .. – kpt

+0

У вас есть две строки с апельсинами в них. Почему это не так? – Mureinik

ответ

1

Как нужно 'orange' граф в d1, ... d4 столбцы, попробуйте этот запрос:

SELECT (d1='orange') + (d2='orange') + (d3='orange') + (d4='orange') AS count_in_row 
FROM `usr_fruit` 
WHERE year=115 AND usrNo= 1 AND month=2 

Здесь (d1='orange') имеет значение 1, если условие истинно , и 0 в противном случае. См: MySQL Equal operator

+0

это сработало..thanks – kpt

+0

Я не уверен спросить ответьте на вопрос в этой цепочке или нет ... но предложите мне как им новое для SO .... какой будет запрос показывать только максимальное значение с тем же запросом ... значит, в моей таблице я хотел бы выбрать счетчик от максимального значения года. Желаемый ответ - 2 для usrNo = 1 и месяц = ​​2 с max (год) и не хотите получать данные, связанные с годом 114 – kpt

+0

Максимальное значение может быть рассчитано в [подзапросе] (https://dev.mysql.com/doc/refman/5.7/en/subqueries.html): '(SELECT MAX (год) FROM usr_fruit WHERE usrNo = 1 AND month = 2)', и вы можете поместить этот подзапрос вместо '115 ' – Rimas

0

Вы можете изменить свой запрос, как показано ниже, используя OR условие вероятно

SELECT count(*) 
FROM `usr_fruit` 
where 'orange' IN (d1,d2,d3,d4) 
and (year=115 
or usrNo= 1 
or month=2); 
+0

работает только с строкой 1, данные строки восхода некорректны – kpt

0

альтернатива Вашему запросу может быть как:

SELECT COUNT(*) FROM `usr_fruit` where 'orange' IN (`usr_fruit`.`d1`,`usr_fruit`.`d2`,`usr_fruit`.`d3`,`usr_fruit`.`d4`) and 
(year=115 or usrNo= 1 or month=2); 
+0

этот запрос работает с usrNo = 1, но если я пытаюсь использовать usrNo = 2, то это неверно – kpt

0

На основе осветления комментарий:

количество апельсинов в ряд с usrNo = 1 месяц = ​​2 года = 115

Вы можете использовать способ MySQL интерпретирует логическое значение «истина» выражение как 1 и «ложный» в качестве 0 если положить в числовом контексте:

SELECT (d1 == 'orange') + (d2 == 'orange') + (d3 == 'orange') + (d4 == 'orange') 
FROM usr_fruit 
WHERE usrNo = 1 AND month = 2 AND year = 115 
Смежные вопросы