2016-01-19 4 views
0

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

SELECT d.department, m.mo_number, m.part_number, c.category, 
COUNT(CASE WHEN c.category = 'QA ISSUE' THEN category END) as qa_issue, 
SUM(CASE WHEN c.category = 'QA ISSUE' THEN time_spent END) as time_spent 
FROM  master as m 
INNER JOIN category as c ON c.cat_id = m.cat_id 
INNER JOIN department as d ON d.dept_id = m.dept_id 
WHERE m.date_created >= DATE_SUB(now(), INTERVAL 50 DAY) AND 
d.department = 'Electronics' 
GROUP BY m.mo_number 
ORDER BY 1 
+0

Можете ли вы предоставить некоторые исходные данные образца, ожидаемый результат и вывод, который вы получите при запуске запроса? – Shadow

+0

почему бы вам не поставить 'c.category = 'QA ISSUE'' в' WHERE' вместо 'COUNT' и' SUM'? –

+0

Я хочу подсчитать все найденные записи QA ISSUE, а также сумму всех значений QA ISSUE как time_spent для каждого отдела. – Brume007

ответ

0

Для фильтрации результатов по агрегатам используется предложение HAVING, которое возникает после предложения GROUP BY. Обратите внимание, что это не заменяет предложение WHERE (которое выбирает агрегированные строки).

SELECT 
     d.department 
    , m.mo_number 
    , m.part_number 
    , c.category 
    , COUNT(*) AS qa_issue 
    , SUM(time_spent) AS time_spent 
FROM master AS m 
     INNER JOIN category AS c ON c.cat_id = m.cat_id 
     INNER JOIN department AS d ON d.dept_id = m.dept_id 
WHERE m.date_created >= DATE_SUB(now(), INTERVAL 50 DAY) 
     AND d.department = 'Electronics' 
     AND c.category = 'QA ISSUE' 
GROUP BY 
     d.department 
    , m.mo_number 
    , m.part_number 
    , c.category 

HAVING COUNT(*) = 1 

ORDER BY 
     d.department 

Я также добавил условие к где п и добавлен всем необобщенные столбцы в GROUP BY предложения - который я рекомендую вам делать всегда.

+0

Благодарим вас за ответ. Мое извинение, если я не понял свой вопрос. Ваш запрос работает до некоторой степени, что он извлекает 2 записи, но сумма должна быть суммой записи 1 + запись 2 (sum (time_spent) = record1 + record2, которая имеет значение в столбце time_spent. В настоящий момент результирующий набор является просто списком а не сумма значений 2. Граф должен дать мне значение 2 в тот момент, когда я просто получаю список из 2 записей. Это то, что я изначально получал. Я не знаю, как это сделать. – Brume007

+0

Сделайте это с помощью DATA. не пытайтесь описать потребность в словах. Используйте ** пример ** и добавьте его в свой вопрос, чтобы его было легко читать. Прочитайте ранее введенные URL-адреса, вы получите решение быстрее, если ваш вопрос будет хорошо подготовлен. –

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