Невозможно использовать агрегат или подзапрос в выражении, используемом для списка group by предложения GROUP BY

в приведенной ниже инструкции sql я получаю следующую ошибку

невозможно использовать агрегат или подзапрос в выражении, используемом для group by список предложения GROUP BY.

Как я могу обойти это?

SELECT
    T.Post,
    COUNT(*) AS ClientCount,
    Client = CASE COUNT(*) WHEN '1' THEN T.Client ELSE '[Clients]' END
FROM
    MyTable T
GROUP BY
    T.Post,
    CASE COUNT(*) WHEN '1' THEN T.Client ELSE '[Clients]' END

2 ответов


если вы не включаете T.Client в своем GROUP BY, вы можете включить это поле только в агрегатную функцию. В вашем случае группировка по этому полю изменяет логику, так что это исключено (и связано с вашей попыткой группировать по оператору CASE). Вместо этого, оберните T.Client в агрегатной функции.

таким образом, ваши группы по-прежнему одинаковы, и когда есть только одна строка, в соответствии с тестом вашего оператора CASE, вы знаете, к какому результату приведет агрегатная функция дать.

SELECT
  T.Post,
  ClientCount = COUNT(*) AS ClientCount,
  Client      = CASE COUNT(*) WHEN 1 THEN MAX(T.Client) ELSE '[Clients]' END
FROM
  MyTable T
GROUP BY
  T.Post

вам не нужно группировать по этому выражению CASE.

SELECT
    T.Post,
    COUNT(*) AS ClientCount,
    CASE COUNT(*) WHEN '1' THEN MIN(T.Client) ELSE '[Clients]' END Client
FROM
    MyTable T
GROUP BY
    T.Post