mySQL - выбрать уникальные значения в двух столбцах - PullRequest
4 голосов
/ 03 октября 2011

Я действительно не могу найти простое или даже какое-либо решение через sql для получения уникальных данных из БД (mySQL).

Я дам образец (упрощенно):

ТАБЛИЦА t

fruit  | color  | weight
-----------------------
apple  | red    | 34
kiwi   | red    | 23
banana | yellow | 100
kiwi   | black  | 3567
apple  | yellow | 23
banana | green  | 2345
pear   | green  | 1900

А теперь я хочу вывод - что-то вроде отличного (яблоко) и отличного (цвет) вместе и упорядочить по Вес desc:

kiwi   | black  | 3567
banana | green  | 2345
apple  | red    | 34
  • груша | зеленый // не в порядке, потому что зеленый уже "используется"
  • банан | желтый // не в порядке, потому что банан уже "используется"

Так что мне нужна не только группировка по фруктам, но и цвет (все уникально).

Любой совет или решение? Спасибо!

Ответы [ 2 ]

1 голос
/ 06 октября 2011

Мне не ясно, почему банан | зеленый предпочтительнее банана | желтый (измените RIGHT JOIN на INNER JOIN для более вкусных фруктов), поэтому я надеюсь, что понял, что вы пытаетесь сделать:

SELECT t1.fruit, t1.color, t1.weight
FROM
t AS t1
RIGHT JOIN
(
SELECT fruit, color, weight
FROM t
GROUP BY 
color
) AS t2
ON
t1.fruit = t2.fruit AND t1.color = t2.color
GROUP BY fruit
ORDER BY weight DESC;

Также обратите внимание, как MySQL обрабатывает скрытые столбцы в GROUP BY .

0 голосов
/ 04 октября 2011
SELECT fruit, color, weight 
FROM t
GROUP BY fruit, color
HAVING COUNT(*) = 1
ORDER BY weight DESC
...