2010-01-23 1 views
1

Скажет, у меня есть таблица вроде этого:одна запись из каждой группы?

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 color, но это дает мне записи с максимальной площадью для 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-й рекорд.

+4

Вы можете показать образец вывода, который хотите? –

+1

Можете ли вы предоставить образец вывода из этого запроса? У меня проблемы с пониманием. – llamaoo7

+0

Не понятно, что вам нужно. Под «максимальной площадью» вы подразумеваете максимальную площадь для всех цветов или для одного конкретного цвета? – John

ответ

3

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

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

Это правильный ответ, описанный в таблице, но лучше всего использовать присоединенную производную таблицу на уникальном первичном ключе. Что происходит, когда несколько строк «r» имеют одну и ту же область, но разные данные в другом месте строки? –

+0

@ Майкл, ты, конечно, прав, что должен использовать ПК. Я спросил в комментарии, если у него даже есть первичный ключ, но он еще не ответил. Поэтому я предполагаю, что у него нет ПК, пока не будет сказано иначе.К сожалению, многие из моих комментариев, просящих разъяснений, были спрятаны :( –

+0

Не стоит беспокоиться. Мой комментарий больше посвящен OP, и любой, кто его просмотрит в будущем. –