MYSQL Выбрать статус Order By с помощью Group By - PullRequest
2 голосов
/ 21 мая 2010

У меня есть следующая простая инструкция SQL

SELECT id, name, value_name, value_id
FROM table
GROUP BY id
ORDER BY value_id DESC

при группировке я хотел бы получить value_name и value_id кортежа, где value_id самое большое Я получаю наименьшее значение. Например

1, name1, valuename, 3     (where i know that there is a value_id of 5)

Не могли бы вы помочь?

Ответы [ 3 ]

4 голосов
/ 21 мая 2010

изменить , value_id на , MAX(value_id) AS value_id в списке полей ...

На самом деле, теперь, когда я смотрю на это, я думаю, что вы хотите что-то вроде этого:

SELECT a.id, a.name, MAX(b.value_id) AS value_id, (SELECT b.value_name FROM table AS b WHERE b.id = a.id AND b.value_id = MAX(a.value_id)) AS value_name
FROM table AS a 
GROUP BY a.id, a.name
ORDER BY value_id DESC

Проблема в том, что таблица не полностью нормализована.Таким образом, у вас есть несколько строк с одинаковыми идентификатором и именем, но у каждой есть уникальные значения value_id и value_name.Таким образом, единственный способ получить значение value_name, связанное с value_id, это либо через подзапрос (что я там делал), либо через соединение ...

1 голос
/ 21 мая 2010
SELECT id, name, value_name, MAX(value_id )
FROM table 
GROUP BY id, name, value_name
ORDER BY value_id DESC
0 голосов
/ 21 мая 2010

Вы можете получить наибольшее значение value_id с помощью этого оператора:

SELECT id, name, value_name, value_id
FROM table
GROUP BY value_id 
HAVING max(value_id)

Если вы хотите получить другие столбцы, вы можете использовать подзапрос с ним.

...