MYSQL GroupBy с Join: несовместимо с sql_mode = only_full_group_by - PullRequest
0 голосов
/ 11 мая 2019

У меня есть две таблицы.Таблица счетов-фактур:

CREATE TABLE `invoices` (
  `id` int(11) NOT NULL,
  `user_id` int(11) NOT NULL,
  `invoice_number` int(11) NOT NULL,
  `created_date` date NOT NULL,
  `expiry_date` date NOT NULL,
  `client_id` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

И услуги счетов-фактур:

CREATE TABLE `invoice_services` (
  `id` int(11) NOT NULL,
  `invoice_id` varchar(11) NOT NULL,
  `description` varchar(255) NOT NULL,
  `qty` int(11) NOT NULL,
  `value` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Я хочу видеть прибыль по каждому месяцу за каждый год:

SELECT DATE_FORMAT(i.created_date,'%Y-%m') as month, sum(profit) as profit
FROM invoices as i
JOIN (SELECT invoice_id, SUM(value) as profit FROM invoice_services isrv) isrv
ON i.id = isrv.invoice_id
GROUP BY month

Но я получаюошибка:

#1140 - In aggregated query without GROUP BY, expression #1 of SELECT list contains nonaggregated column 'isrv.invoice_id'; this is incompatible with sql_mode=only_full_group_by

Я хочу сохранить этот режим SQL, и я просто не могу обернуть его вокруг.Любая помощь приветствуется.

1 Ответ

1 голос
/ 11 мая 2019

Вам не нужны идентификаторы счета в результате, поэтому уберите их из списка SELECT.

Вам необходимо добавить GROUP BY в подзапрос.

SELECT DATE_FORMAT(i.created_date,'%Y-%m') as month, sum(profit) as profit
FROM invoices as i
JOIN (
    SELECT invoice_id, SUM(value) as profit 
    FROM invoice_services
    GROUP BY invoice_id) isrv
ON i.id = isrv.invoice_id
GROUP BY month
...