@daMage

Как составить запрос?

Добрый день. Есть бд:
CREATE TABLE test (
  `name` VARCHAR(255) NULL,
  `value` INT NULL,
  `param1` INT NULL,
  `param2` INT NULL,
  `param3` INT NULL);

и данные:
INSERT INTO test(name, value, param1, param2, param3) VALUES
  ('name1', 10, 1, 2, 3),
  ('name2', 20, 4, 5, 6),
  ('name3', 30, 7, 8, 9),
  ('name1', 40, 10, 11, 12),
  ('name2', 50, 13, 14, 15)

На выходе нужно получить все уникальные значения name с найбольшим значением value а также прилегающие параметры. Получившаяся таблица должна быть отсортирована по value. Output:
('name2', 50, 13, 14, 15)
('name1', 40, 10, 11, 12)
('name3', 30, 7, 8, 9)

Помогите с запросом, пожалуйста.
  • Вопрос задан
  • 2288 просмотров
Решения вопроса 1
Melkij
@Melkij
PostgreSQL DBA
name & value обязан быть уникальным индексом.

select * from test join (
select name, max(value) as value from test 
group by name
) using(name, value)
order by value
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
ivankomolin
@ivankomolin
SELECT 
name, 
SUBSTRING(GROUP_CONCAT(CONCAT(value, ',', param1, ',', param2, ',', param3, ';') ORDER BY value DESC), 1, LOCATE(';', GROUP_CONCAT(CONCAT(value, ',', param1, ',', param2, ',', param3, ';') ORDER BY value DESC))) as value
FROM test
GROUP BY name


А вообще лучше сделать так
SELECT 
name, 
GROUP_CONCAT(CONCAT(value, ',', param1, ',', param2, ',', param3) ORDER BY value DESC SEPARATOR ';') as value
FROM test
GROUP BY name


А уже потом отформатировать средствами языка программирования
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы