Вы не можете одновременно выбрать номер и номер MAX при группировании.Это потому, что функция MAX основана на совокупности вашей группировки.В вашем случае вы также выбираете сам столбец, который будет создавать строку для каждого отдельного числа ... не для каждого отдельного номера MAX.
Допустим, у вас есть 4 строки:
PET NUMBER
A 1
A 2
B 4
B 2
Вы хотите, чтобы ваш результирующий набор был:
PET MAX
A 2
B 4
Или вы хотите, чтобы он был:
PET NUM MAX
A 1 2
A 2 2
B 4 4
B 2 4
Разница в том, что один группируется и агрегируется, а другой НЕсгруппированы, но содержат агрегированный столбец.
Я предлагаю вам удалить d
. number
из вашего оператора SELECT, оставив только MAX (d.number). Это решит вашу проблему, если и только если,o
. id
и o
. email
уникальны для объединенной записи для p
. id
Попробуйте это:
SELECT `p`.`id`, `o`.`id`, `o`.`email`, MAX(d.number)
FROM `data_entries` AS `d`
JOIN `pets` `p` ON `p`.`ID` = `d`.`pet_id`
JOIN `owners` `o` ON `o`.`ID` = `p`.`owner_id`
GROUP BY `p`.`id`, `o`.`id`, `o`.`email`
ORDER BY MAX(d.number) DESC