Вы используете нестандартную MySQL
extension к 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
, но ни в каком конкретном порядке.
Update:
Для выбора значения 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
Это действительный запрос в MySQL? У меня нет MySQL, но SQL Server отказывается от этого, поскольку вы ссылаетесь на столбцы в 'select', но не в вашей' group by'. Во всяком случае, можете ли вы разместить образцы данных, чтобы мы знали, что такое «правильный»? – Eric
@ Эрик: это расширение 'MySQL', которое позволяет вам выбрать негрупповое значение из одной строки для каждой группы в определенном порядке. – Quassnoi
@Ben: Не могли бы вы предоставить некоторые примеры данных и результаты, которые вы хотели бы получить? – Quassnoi