Вы используете нестандартное MySQL
расширение до GROUP BY
.
Этот запрос фактически читается как "для каждого отдельного значения col3
, выберите минимальное значение col4
вместе со значениями col1
и col2
из одной строки table
, имеющей это значение col3
без определенного порядка "
Например, если у нас есть следующие данные:
col1 col2 col3 col4
---- --- --- ----
A A 1 1
B B 1 2
C C 2 3
D D 2 4
, этот запрос:
SELECT col1, col2, col3, MIN(col4)
FROM mytable
GROUP BY
col3
вернет одно из следующих значений:
col1 col2 col3 col4
---- --- --- ----
A A 1 1
C C 2 3
col1 col2 col3 col4
---- --- --- ----
B B 1 1
C C 2 3
col1 col2 col3 col4
---- --- --- ----
A A 1 1
D D 2 3
col1 col2 col3 col4
---- --- --- ----
B B 1 1
D D 2 3
я. е. он может вернуть любое значение col1
и col2
, найденное в строках, которые вносят вклад в соответствующую группу.
Это эквивалентно FIRST_VALUE
аналитической функции, но в произвольном порядке.
Обновление:
Чтобы выбрать значения col1
и col2
, соответствующие минимальному значению col4
в каждой группе, используйте это:
SELECT col1, co2, col3, col4
FROM (
SELECT col1, col2, col3, col4,
COALESCE(@col3 = col3, FALSE) AS grp,
@col3 := col3 AS nv
FROM (
SELECT @col3 := NULL
) vars, table
WHERE col2 = 'xxx'
ORDER BY
col3, col4
) q
WHERE NOT grp