After grouping, one output row represents many input rows — a bare column is the question 'which of the many values?' with no answer. Strict engines refuse (the error is the lesson); MySQL's legacy mode and ANY_VALUE() answer 'whichever', the nondeterministic-latest bug in aggregation clothes. Three honest resolutions: group by it, aggregate it, or you actually wanted a window.
SELECT mill, wool, SUM(kg) FROM looms GROUP BY mill ORDER BY mill;
SELECT mill, MAX(wool) AS heaviest, SUM(kg) AS kg FROM looms GROUP BY mill ORDER BY mill;
Selecting the ungrouped 'wool' column raised a binder error — after grouping, one row stands for many looms, so a bare column has no single value; strict engines refuse, loose ones return silent garbage.
Group by it (part of the identity), aggregate it (MAX/MIN/STRING_AGG), or use a window (keep the rows) — chosen consciously.