Musisz użyć FUNKCJI AGREGACJI :
Funkcje agregujące obliczają pojedynczy wynik ze zbioru wartości wejściowych.
SELECT col2, MIN(col3) AS col3, MIN(col1) AS col1
FROM the_table
GROUP BY col2;
W standardowym języku SQL zapytanie zawierające klauzulę GROUP BY nie może odwoływać się do niezagregowanych kolumn na liście wyboru, które nie są wymienione w klauzuli GROUP BY
i:
MySQL rozszerza użycie GROUP BY, dzięki czemu lista wyboru może odwoływać się do niezagregowanych kolumn, których nie wymieniono w klauzuli GROUP BY. Oznacza to, że poprzednie zapytanie jest legalne w MySQL. Możesz użyć tej funkcji, aby uzyskać lepszą wydajność, unikając niepotrzebnego sortowania i grupowania kolumn. Jest to jednak przydatne przede wszystkim wtedy, gdy wszystkie wartości w każdej niezagregowanej kolumnie nienazwanej w grupie GROUP BY są takie same dla każdej grupy. Serwer może wybrać dowolną wartość z każdej grupy, więc jeśli nie są takie same, wybrane wartości są nieokreślone
Tak więc z wersją MySQL bez jawnej funkcji agregującej możesz skończyć z niedeterministycznymi wartościami. Zdecydowanie sugeruję użycie określonej funkcji agregującej.
EDYTUJ:
Od Obsługa MySQL dla grupy GROUP BY :
SQL92 i wcześniejsze nie zezwalają na zapytania, dla których lista wyboru, warunek HAVING lub lista ORDER BY odnoszą się do kolumn niezagregowanych, które nie są wymienione w klauzuli GROUP BY.
SQL99 i nowsze zezwalają na takie nieagregaty na opcjonalną funkcję T301 jeśli są one funkcjonalnie zależne od kolumn GROUP BY: Jeśli taki związek istnieje między nazwą a cusid, zapytanie jest poprawne. Tak by było na przykład, gdyby cusid był głównym kluczem klientów.
Przykład:
SELECT o.custid, c.name, MAX(o.payment)
FROM orders AS o
JOIN customers AS c
ON o.custid = c.custid
GROUP BY o.custid;