2016-09-15 1 views
0

je une tableMysql jointure réflexive données

distributor_id | product_id | price 
1    | 1   | 10.00 
1    | 2   | 11.00 
1    | 3   | 12.00 
1    | 1   | 14.00 
4    | 1   | 9.00 
4    | 2   | 32.00 
4    | 5   | 17.00 

Je veux comparer les prix des produits de distributeurs iE je veux obtenir une sortie comme:

distributor1|distributor2|product_id|distributor1_price|distributor2_price 
1   | 4   | 1  |12.00    |9.00 
1   | 4   | 2  |11.00    |32.00 
1   | 4   | 3  |12.00    |null 

distributor1_price, distributor2_price sera le prix moyen par le product_id. product_id doit être tous les produits du distributeur1. Si le distributeur2 n'a pas ce produit, il devrait être nul.

Je l'ai essayé avec l'auto-jointure sans aucun succès. Merci.

+0

Vous avez pas de clé primaire. À l'heure actuelle, ce problème est insoluble - à moins que la 4ème ligne est une erreur – Strawberry

Répondre

1

ai pas testé, mais je pense que cela devrait fonctionner:

SELECT a.distributor_id 
    ,b.distributor_id 
    ,a.product_id 
    ,AVG(a.price) 
    ,AVG(b.price) 
FROM mytable AS a 
LEFT JOIN mytable AS b ON a.product_id = b.product_id 
GROUP BY a.product_id 
+0

Merci pour votre réponse, mais dans la ligne numéro 3 de sortie, je reçois distributeur2 id null, car il n'y a pas d'enregistrement pour distributeur_id 4 et product_id 3. –

+0

Oui c'est résultat attendu, que voudriez-vous avoir à la place? – apomene