[SQL] GROUP BY ordonné par une autre colonne
choy
-
Christounet Messages postés 1266 Statut Membre -
Christounet Messages postés 1266 Statut Membre -
Bonjour à tous ! Alors voilà je bataille depuis un bon moment sur un problème de listing. Avant de rentrer dans la syntaxe sql je vais tenter d'expliquer ce que je doit faire.
Alors voilà, j'ai une liste d'hôtels pour lesquels j'ai une liste de prix associés à une période de temps. Sur le même shéma j'ai une liste de tarifs pour les vols aérien eux aussi liés à une date (entre autres). Avec ça, je doit créer une liste de "séjours" (hôtel+vol). Jusqu'ici pas de problème je liste les tarifs de chambres et je chope le vol le moins cher correspondant aux dates afin d'afficher un prix "à partir de" que j'utilise pour ranger mes séjours à l'aide d'order by. Mais pour pas que ça soit trop le bordel j'aimerai que seul le prix (chambre+vol) le moins cher par hôtel soit affiché. je fait donc un group by des id de mes hotels mais le problème et que du coup mon order se fait apres le group by... en gros je n'ai pas forcément le prix le moins cher.
Voilà ma requete :
ce qui me donne :
(J'ai fait de mon mieux pour que ça soit lisible :))
Donc en gras les deux lignes que j'aimerai faire ressortir malheureusement quand j'ajoute mon group by hotels_id ça ne sont pas celle là qui ressortent... quelqu'un a une solution ? une piste ?
un grand merci à tout ceux qui tenteront de m'aider :)
Alors voilà, j'ai une liste d'hôtels pour lesquels j'ai une liste de prix associés à une période de temps. Sur le même shéma j'ai une liste de tarifs pour les vols aérien eux aussi liés à une date (entre autres). Avec ça, je doit créer une liste de "séjours" (hôtel+vol). Jusqu'ici pas de problème je liste les tarifs de chambres et je chope le vol le moins cher correspondant aux dates afin d'afficher un prix "à partir de" que j'utilise pour ranger mes séjours à l'aide d'order by. Mais pour pas que ça soit trop le bordel j'aimerai que seul le prix (chambre+vol) le moins cher par hôtel soit affiché. je fait donc un group by des id de mes hotels mais le problème et que du coup mon order se fait apres le group by... en gros je n'ai pas forcément le prix le moins cher.
Voilà ma requete :
SELECT hotels_id, tarifs_vols_prix, tarifs_chambres_prix, ( tarifs_chambres_prix + tarifs_vols_prix ) AS prix_total FROM `tarifs_chambres` LEFT JOIN `types_chambres` ON tarifs_chambres_type = types_chambres_id LEFT JOIN `hotels` ON types_chambres_hotel = hotels_id LEFT JOIN `tarifs_vols` ON ( ( tarifs_vols_debut <= tarifs_chambres_debut AND tarifs_vols_fin >= tarifs_chambres_debut ) OR ( tarifs_vols_fin >= tarifs_chambres_fin AND tarifs_vols_debut <= tarifs_chambres_fin ) OR ( tarifs_vols_debut >= tarifs_chambres_debut AND tarifs_vols_fin <= tarifs_chambres_fin ) ) ORDER BY prix_total ASC
ce qui me donne :
hotels_id tarifs_vols_prix tarifs_chambres_prix prix_total 1 8.00 8.00 16.00 1 10.00 8.00 18.00 1 8.00 13.00 21.00 1 15.00 8.00 23.00 1 10.00 13.00 23.00 1 15.00 13.00 28.00 2 8.00 36.00 44.00 2 10.00 36.00 46.00 2 15.00 36.00 51.00
(J'ai fait de mon mieux pour que ça soit lisible :))
Donc en gras les deux lignes que j'aimerai faire ressortir malheureusement quand j'ajoute mon group by hotels_id ça ne sont pas celle là qui ressortent... quelqu'un a une solution ? une piste ?
un grand merci à tout ceux qui tenteront de m'aider :)
A voir également:
- [SQL] GROUP BY ordonné par une autre colonne
- Déplacer une colonne excel - Guide
- Trier une colonne excel - Guide
- Creer un groupe whatsapp a partir d'un autre groupe - Guide
- Colonne word - Guide
- Formule somme excel colonne - Guide
3 réponses
Bonjour choy,
As-tu déjà essayé d'ajouter la commande DISTINCT, comme ci-dessous (j'ai pas testé)
A plus
As-tu déjà essayé d'ajouter la commande DISTINCT, comme ci-dessous (j'ai pas testé)
SELECT distinct hotels_id, tarifs_vols_prix, tarifs_chambres_prix, ( tarifs_chambres_prix + tarifs_vols_prix ) AS prix_total FROM `tarifs_chambres` LEFT JOIN `types_chambres` ON tarifs_chambres_type = types_chambres_id LEFT JOIN `hotels` ON types_chambres_hotel = hotels_id LEFT JOIN `tarifs_vols` ON ( ( tarifs_vols_debut <= tarifs_chambres_debut AND tarifs_vols_fin >= tarifs_chambres_debut ) OR ( tarifs_vols_fin >= tarifs_chambres_fin AND tarifs_vols_debut <= tarifs_chambres_fin ) OR ( tarifs_vols_debut >= tarifs_chambres_debut AND tarifs_vols_fin <= tarifs_chambres_fin ) ) ORDER BY prix_total ASC
A plus
Oui mais ça ne change rien, j'ai bien mon des hotels uniques mais pas forcément au meilleur prix.
Mais je viens de réussir ma manip (pour ceux qui penserai que j'ai posté directement je précise que je cherche depuis hier.). Donc en fait il fallait ajouter un MIN sur mon total couplé au group by hotels_id.
Merci à toi christounet pour ta réponse !
Mais je viens de réussir ma manip (pour ceux qui penserai que j'ai posté directement je précise que je cherche depuis hier.). Donc en fait il fallait ajouter un MIN sur mon total couplé au group by hotels_id.
SELECT hotels_id, tarifs_vols_prix, tarifs_chambres_prix, MIN( tarifs_chambres_prix + tarifs_vols_prix ) AS prix_total FROM `tarifs_chambres` LEFT JOIN `types_chambres` ON tarifs_chambres_type = types_chambres_id LEFT JOIN `hotels` ON types_chambres_hotel = hotels_id LEFT JOIN `tarifs_vols` ON ( ( tarifs_vols_debut <= tarifs_chambres_debut AND tarifs_vols_fin >= tarifs_chambres_debut ) OR ( tarifs_vols_fin >= tarifs_chambres_fin AND tarifs_vols_debut <= tarifs_chambres_fin ) OR ( tarifs_vols_debut >= tarifs_chambres_debut AND tarifs_vols_fin <= tarifs_chambres_fin ) ) GROUP BY hotels_id ORDER BY prix_total ASC
Merci à toi christounet pour ta réponse !