#mysql
Вопрос:
Я придумал следующий запрос (с отключенным режимом mysql ONLY_FULL_GROUP_BY)
SELECT
sum(case when B.value1 = 3 then 1 else 0 end) AS totalCount,
case when B.value1 = 3 AND C.value2 = 28 then A.value3 else 0 end AS infoField
FROM node as A
JOIN node_2 as B ON B.entity_id = A.nid AND A.type = 'feed_likes'
JOIN node_3 as C ON C.nid = A.nid
Что мне нужно, так это количество строк, когда B. значение 1 = 3, и значение A. значение 3, ЕСЛИ есть строка, в которой B. значение 1 = 3 И C. значение 2 = 28 (в противном случае установите его равным 0).
То, что он возвращает, — это именно то, что я хочу:
В случае B. значение 1 = 3 И C. значение 2 = 28
Итого | Инфополе |
---|---|
10 | «xyz» |
В случае B. значение 1 = 3 И C. значение 2 != 28
Итого | Инфополе |
---|---|
10 | 0 |
Однако, когда включен режим ONLY_FULL_GROUP_BY, мне нужно добавить a Group By
со всеми полями, которые я использую в запросе, что уничтожает результат, который я изначально хотел. Есть идеи, как получить необходимый результат с GROUP BY
помощью ?
Показаны следующие ошибки:
Syntax error or access violation: 1140 Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
и
Syntax error or access violation: 1055 'db.A...' isn't in GROUP BY
Комментарии:
1. повторите выражение case в предложении group by
2. вот так просто
GROUP BY case when B.value1 = 3 AND C.value2 = 28 then A.value3 else 0 end
?3. да, именно это я и имел в виду