4 votes

mySQL - sélectionner des valeurs uniques dans deux colonnes

Je n'arrive vraiment pas à trouver une solution simple ou même une solution via sql pour obtenir des données uniques à partir de la base de données (mySQL).

Je vais donner un exemple (simplifié) :

TABLEAU 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

Et maintenant je veux un résultat - quelque chose comme distinct(apple) et distinct(color) ensemble et ordonné par poids desc :

kiwi   | black  | 3567
banana | green  | 2345
apple  | red    | 34
  • poire | vert // n'est pas acceptable, car le vert est déjà "utilisé".
  • banane | jaune // ce n'est pas bon, car la banane est déjà "utilisée".

Je dois donc non seulement regrouper les fruits, mais aussi les couleurs (toutes uniques).

Un conseil ou une solution ? Merci !

1voto

agtb Points 353

Je ne comprends pas bien pourquoi la banane|verte est préférée à la banane|jaune (changement RIGHT JOIN a INNER JOIN pour des fruits plus savoureux) donc j'espère avoir compris ce que vous essayez de faire :

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;

Veuillez également tenir compte de la façon dont MySQL traite colonnes cachées dans GROUP BY .

0voto

Johan Points 34755
SELECT fruit, color, weight 
FROM t
GROUP BY fruit, color
HAVING COUNT(*) = 1
ORDER BY weight DESC

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X