одна запись из каждой группы? - PullRequest
1 голос
/ 23 января 2010

Скажем, у меня есть такая таблица:

x1 | y1 | x2 | y2 | area | color 

 5 |  0 |  5 |  0 |    1 | r
 5 |  0 |  6 |  0 |    2 | g
 5 |  1 |  5 |  0 |    2 | b
 5 |  1 |  5 |  1 |    2 | r
 5 |  2 |  5 |  0 |    3 | g
 5 |  2 |  5 |  1 |    3 | b

Как я могу построить SQL-запрос так, чтобы полученная таблица имела один из r, g, b (каждый имеет максимальную площадь), но также сохраняя координаты запись? Я пробовал цвета MAX (AREA) и GROUP BY, но это дает мне записи с максимальной площадью для r, g, b, но не вместе с их координатами.

Я использую пример вывода PostgreSQL (для вышеприведенного), должно быть что-то вроде:

 5 |  1 |  5 |  1 |    2 | r
 5 |  2 |  5 |  0 |    3 | g
 5 |  2 |  5 |  1 |    3 | b

По сути, он должен возвращать 4-ю, 5-ю и 6-ю записи.

Ответы [ 2 ]

3 голосов
/ 23 января 2010

Ваш вопрос немного неясен, но я думаю, вы хотите это:

SELECT T2.* FROM (
    SELECT color, max(area) AS area
    FROM table1
    GROUP BY color) AS T1
JOIN table1 AS T2
ON T1.area = T2.area AND T1.color = T2.color

Обратите внимание, что предполагается, что максимальная площадь уникальна, в противном случае вы получите несколько строк.

Вывод для ваших данных:

x1 | x2 | y1 | y2 | area | color
 5 |  1 |  5 |  1 |    2 |     r
 5 |  2 |  5 |  0 |    3 |     g
 5 |  2 |  5 |  1 |    3 |     b

Если вы хотите получить лучший ответ, пожалуйста, уточните все вопросы, которые я отправил в виде комментариев (некоторые из них скрыты).

0 голосов
/ 23 января 2010
select *, max(area), color from T group by color;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...