2015-12-23 3 views
1

У меня есть БД MySQL, который выглядит вроде как это ...Группа MySQL сортировкой?

id  Color Length Width map_price other_fields, etc... 
------ ----- ----- ----- -----  ----- 
1  Red  2'3"  2'6" 125.0000 ...etc 
2  Red  10'6" 12'  200.0000 ...etc 
3  Red  12'  14'  300.0000 ...etc 
4  Blue  3'  5'  135.0000 ...etc 
5  Blue  5'8"  7'6" 160.0000 ...etc 
6  Green 2'5"  3'  115.0000 ...etc 
7  Yellow 9'2"  10'  200.0000 ...etc 

Я пытаюсь построить запрос

  • GROUP BY Color
  • И «используют самые высокие значения (определяемый map_price) "для представления группы.

В настоящий момент, когда I GROUP BY Color - значение LOWEST в полях кажется по умолчанию (или это может быть только нижний ID #, хотя я не могу надежно сказать id 2> id 1 для моих целей). Например ...

Color Length Width map_price other_fields, etc... 
------ ------ ----- --------- ----- 
Red  2'3"  2'6" 125.0000 ...etc 
Blue 3'  5'  135.0000 ...etc 
Green 2'5"  3'  115.0000 ...etc 
Yellow 9'2  10'  200.0000 ...etc 

И то, что я после того, как на самом деле ...

Color Length Width map_price other_fields, etc... 
------ ------ ----- --------- ----- 
Red  12'  14'  300.0000 ...etc 
Blue 5'8"  7'6" 160.0000 ...etc 
Green 2'5"  3'  115.0000 ...etc 
Yellow 9'2  10'  200.0000 ...etc 

Проблема заключается в том, это самый краткий путь я могу думать, чтобы выразить то, что я после того, как , поэтому, к сожалению, Google и т. д. не сделали мне ничего хорошего. Мне просто нужен палец в правильном направлении.

Заранее благодарим за помощь!

+0

Вы хотите сравнить символы в длину или использовать их в качестве цифр? 'select * from (выберите '120 \' 'union select' 2 \ '') t order by 1 desc;' приведет к тому, что 2 'будет больше 120'. Для красного, если длина была наивысшей в id 3, а ширина была самой высокой в ​​id 2, а цена была самой высокой в ​​id 1, какую запись вы бы отображали? – zedfoxus

+0

Эти данные, приведенные выше, просто для иллюстрации моего примера ... на самом деле не основаны ни на чем. В моем случае, и в этом подмножестве более высокие квадратные метры всегда приведут к более высокой map_price. Таким образом, map_price, вероятно, будет наиболее полезен для использования. – SoWizardly

+0

Ах, хороший момент. Теперь я понимаю и добавил ответ. Спасибо. – zedfoxus

ответ

1

Вы могли бы написать что-то вроде этого:

select * 
from colors c 
where exists (
    select 1 
    from (select color, max(map_price) pr from colors group by color) x 
    where color = c.color and pr = c.map_price 
); 

+------+--------+--------+-------+-----------+ 
| id | color | length | width | map_price | 
+------+--------+--------+-------+-----------+ 
| 3 | Red | 12' | 14' | 300.0000 | 
| 5 | Blue | 5'8" | 7'6" | 160.0000 | 
| 6 | Green | 2'5" | 3' | 115.0000 | 
| 7 | Yellow | 9'2" | 10' | 200.0000 | 
+------+--------+--------+-------+-----------+ 
+0

Большое вам спасибо! Мне потребовался час, чтобы переписать мой запрос (более сложный, чем этот простой пример), чтобы протестировать этот метод, но он работает КРАСИВО! – SoWizardly

0

В зависимости от ваших требований здесь, я думаю, вы могли бы решить эту проблему с помощью

ORDER BY map_price DESC

, что может быть просто временное решение, но, как вы говорите, не будучи в состоянии сформулировать вопрос, Трудно ответить.

+0

Я действительно пробовал это во-первых, никогда раньше этого не делал. Он РАБОТАЛ, однако, он заказал результаты ПОСЛЕ того, как они были сгруппированы. не раньше ... чего я пытаюсь достичь. Для записи я никогда не говорил, что НЕ МОГУТ сформулировать то, что мне нужно - я просто не мог сделать это * лаконично *. – SoWizardly

1

Кажись вам нужно выбрать максимум

select color, max(length), max(width), max(map_price) 
from your_table 
group by color; 

или

select color, length, width, map_price, other_column 
from your_table 
where (color, map_price) in (select color, max(map_price) 
           from  your_table group by color) 
+0

ДА! Спасибо. Это то, что я ищу! Мне просто нужно иметь возможность выбирать все значения из строки с max (map_price) .... любые идеи?(не все значения являются числовыми, поэтому max() не будет работать) – SoWizardly

+0

Да ,,, на мгновение .. – scaisEdge

+0

У меня есть ответ. – scaisEdge

0

Попробуйте SELECT color, MAX(length), MAX(width), MAX(map_price) FROM your_table GROUP BY color;

Смежные вопросы