MySQL used to allow selecting a column that is neither grouped nor aggregated, returning an arbitrary row’s value for it. 5.7 turns that off by default, and every report written against the old behaviour stops running.
-- allowed before, rejected now: which name?
SELECT customer_id, name, SUM(total)
FROM orders GROUP BY customer_id;
-- say what you mean
SELECT customer_id, ANY_VALUE(name), SUM(total)
FROM orders GROUP BY customer_id;
-- or group by it, which is usually what was intended
SELECT customer_id, name, SUM(total)
FROM orders GROUP BY customer_id, name;
ANY_VALUE() is the escape hatch and it is an assertion: you are telling the optimiser the value is the same for every row in the group. When that is true — a customer name alongside a customer id — it is honest and cheap. When it is not, the old query was returning an arbitrary value and nobody had noticed, which is the more common case.