#mysql #sql #where-clause
#mysql #sql #where-предложение
Вопрос:
Я изо всех сил пытаюсь найти, как я могу поместить условие where только в 1 столбец.
Подводя итог, я хочу иметь столбец всех заявок в базе данных и другой столбец всех заявок с заданной датой.
Мой SQL-запрос :
SELECT
i.created AS creation, l.label AS activite,
COUNT(l.label) AS nbTicket, COUNT(l.label) AS nbEntree
FROM label AS l INNER JOIN
jiraissue AS i
ON (l.issue = i.id) AND i.issuetype <> 3
GROUP BY activite
Итак, здесь у меня есть все заявки из базы данных, но если бы у меня было условие where с датой :
SELECT l.label AS activite, SUM(i.timespent/3600/8) AS consomme, SUM(i.timeestimate/3600/8) AS raf, COUNT(l.label) AS nbTicket,
SUM(i.timeoriginalestimate/3600/8) AS chargeProvisoire, COUNT(l.label) AS nbEntree
FROM label AS l INNER JOIN jiraissue AS i ON (l.issue = i.id)
WHERE l.label IN ('Devis','TGC1','TGC2','TGC3','TGC4','TGC5','TGC5-Bis','TGC6','TGC7','TGC8','TGC8-Bis','TGC9','TGC10','TGC10-Bis','TGC12','TGC13','TGC13-Bis','TGC14','TGC50','TGC60')
AND i.issuetype <> 3 AND i.created LIKE "2014-01-%" GROUP BY activite
У меня есть только билет на январь 2019 года.
Является ли их решением наличие всех билетов в столбце ==> nbTicket и всех билетов с предложением ‘where’ в столбце ==> nbEntree?
Комментарии:
1.
i.created AS creation
может содержать недопустимые (несоответствующие) данные, потому что это приводит к тому, что вы используете GROUP BY недопустимым образом2. да, я вижу это, но запрос работает, я просто удаляю информацию, потому что она была слишком длинной
3. Обычно вы ГРУППИРУЕТЕСЬ ПО тем же столбцам, которые вы ВЫБИРАЕТЕ, за исключением тех, которые являются аргументами для функций set.
4. я отредактировал свой sql
5. @RaymondNijland Спасибо. Это положило начало хорошей дискуссии. Чтобы выяснить, почему я был так против этой функции, я только что протестировал ее на MySQL 5.5, MySQL 8.0, MariaDB 10.0 и MariaDB 10.3 (последняя версия). Судя по моим локальным тестам, это безопасно только в MySQL 8.0. Я предполагаю, что MySQL имеет преимущество в этом вопросе по сравнению с MariaDB.
Ответ №1:
Вы можете использовать условие SUM()
в первом запросе, как в:
SELECT
max(i.created) AS creation,
l.label AS activite,
COUNT(*) AS nbTicket,
SUM(case when i.created LIKE "2019-01-%" then 1 end) AS nbEntree
FROM label AS l INNER JOIN
jiraissue AS i
ON (l.issue = i.id) AND i.issuetype <> 3
GROUP BY activite
Комментарии:
1. Спасибо, я отлично справился с тем, что мне было нужно