У меня возникли проблемы с MySQL в разделе GROUP BY
моего запроса. Существует столбец, который я хотел бы использовать в GROUP BY
, но это должно использоваться только для определенного условия, которое зависит от значения в строке. Скажем, у меня есть эта таблица:GROUP BY при определенных условиях
mysql> SELECT * FROM test_table;
+---+---+---+
| a | b | c |
+---+---+---+
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 1 | 2 |
| 4 | 2 | 2 |
| 5 | 2 | 3 |
| 6 | 3 | 1 |
| 7 | 2 | 2 |
+---+---+---+
7 rows in set (0.00 sec)
Теперь я хотел бы получить все строки, где он должен использовать только GROUP BY
на колонке с, когда б === 1. Это означает, что я хотел бы получить 6 строк назад, потому что строки с номерами 2 и 3 должны быть сгруппированы. Поэтому я придумал следующий запрос, который не дает мне ожидаемого результата.
mysql> SELECT * FROM test_table GROUP BY CASE WHEN b = 1 THEN c END;
+---+---+---+
| a | b | c |
+---+---+---+
| 4 | 2 | 2 |
| 1 | 1 | 1 |
| 2 | 1 | 2 |
+---+---+---+
3 rows in set (0.00 sec)
Я, вероятно, отсутствует что-то в пределах комбинации CASE
заявления и GROUP BY
, и я надеюсь, что любой из вас может помочь мне немного.
Что такое ожидаемый результат? – axiac
«Это означает, что я хотел бы получить 5 строк назад, потому что строки с номерами 2 и 3 должны быть сгруппированы». Таким образом, строка с '| 3 | 1 | 2 | 'должно быть« отсутствует » – LaVomit
Конечно, я это увидел. Но это ничего не значит. Какие значения вы ожидаете получить от этой группы? Цель «GROUP BY» - не игнорировать строки, а вычислять агрегированные значения из групп строк. Если вы хотите игнорировать строку с 'a == 3', вы можете использовать' DISTINCT'. – axiac