|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Intégrateur Web Inscription : septembre 2011 Messages : 2 ![]() |
Bonjour.
Je m'excuse d'avance de vous solliciter pour un problème qui, bien que je sois persuadé qu'il est simple à résoudre, me pose bien des problèmes. J'ai une table qui contient des propositions de contrats d'employeurs à des postulants. j'ai une colonne id_entreprise, id_candidat, type de contrat (1 = CDI ou 2 = CDD principalement) et salaire annuel. Les candidats peuvent recevoir plusieurs propositions. Les candidats acceptent en priorité les CDI puis le meilleur salaire proposé. Je dois retourner, pour chaque candidat qui a reçu au moins une proposition, la meilleure. Pourriez-vous m'aider ? Merci. |
|
|
00
|
|
|
#2 | ||
![]() ![]() Alain Ingénieur d'études décisionnel Inscription : mai 2002 Messages : 4 446 ![]() |
Quelque chose comme ça ?
Code :
__________________
Modérateur Langage SQL N'oubliez pas le bouton et pensez aux balises [code]Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur ![]() |
||
|
|
00
|
|
|
#3 |
|
Membre Expert
![]() Sylvain DevidalChef de projets Générix Inscription : février 2010 Messages : 1 062 ![]() |
Je suis pas sûr que ta requête marche :
Si il y a une offre en CDI (1) de 2000 €/mois et un CDD (2) de 3000 €/mois alors tu vas tenter de trouver une ligne avec min(contrat_type) = 1 et max(salaire) = 3000 alors qu'il n'existe pas de telle ligne. |
|
|
00
|
|
|
#4 | ||
|
Membre Expert
![]() Sylvain DevidalChef de projets Générix Inscription : février 2010 Messages : 1 062 ![]() |
Ma requête (en gras) fonctionne avec ce jeu de test sous SQL Server.
En revanche, elle doit pouvoir être améliorée avec des fonctions analytiques. Je confirme que celle de al1_24 ne fonctionne pas. Code :
PS : Ceci dit, j'ai l'impression que ma requête a un trou dans la raquette aussi... J'arrive pas à filtrer à la fois sur le contrat et le salaire... je pense qu'il manque un join ou un truc du genre. Mais ça fait mal à la tête les sous-requêtes dès le matin |
||
|
|
00
|
|
|
#5 | ||
![]() ![]() |
Essaie ceci :
Code :
- le critère type de contrat prime sur le salaire ; - l'identifiant du type de contrat soit un entier ; - que ces identifiants classent dans l'ordre de préférence les différents types de contrats (1 : CDI, 2 : CDD, 3 : Freelance, 4 : Stage rémunéré, 5 : Stage non rémunéré).
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
||
|
00
|
|
|
#6 | ||||
![]() ![]() Alain Ingénieur d'études décisionnel Inscription : mai 2002 Messages : 4 446 ![]() |
Je me suis sans doute un peu précipité pour répondre
Deux réponses plus correctes, je pense : Code :
Code :
Les tenants d'un SQL hors norme trouveront aussi une réponse avec LIMIT.
__________________
Modérateur Langage SQL N'oubliez pas le bouton et pensez aux balises [code]Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur ![]() |
||||
|
|
00
|
|
|
#7 | |
![]() ![]() |
Al1_24, l'utilisation du HAVING sans GROUP BY dans la première requête me choque !
Ça fonctionne ça ? Citation:
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
|
00
|
|
|
#8 |
![]() ![]() Alain Ingénieur d'études décisionnel Inscription : mai 2002 Messages : 4 446 ![]() |
Le GROUP BY id_candidat dans la première requête est implicite puisque la sélection porte à chaque fois sur un seul candidat.
Quant à ta requête, si elle est correcte sur le principe, l'usage de la constante 100000 pour pondérer le salaire en fonction du type de contrat sera peut-être à valider en fonction des éléments de salaire pris en compte (mensuel, annuel, devise, ...). De plus, il reste à en extraire LA meilleure offre, qui est la demande exprimée par luboman
__________________
Modérateur Langage SQL N'oubliez pas le bouton et pensez aux balises [code]Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur ![]() |
|
|
00
|
|
|
#9 | ||
![]() ![]() |
Citation:
Citation:
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
||
|
00
|
|
|
#10 |
![]() ![]() Alain Ingénieur d'études décisionnel Inscription : mai 2002 Messages : 4 446 ![]() |
C'est vraiment pas mon jour
En effet, tu sélectionnes LA meilleure en fonction des critères utilisés.
__________________
Modérateur Langage SQL N'oubliez pas le bouton et pensez aux balises [code]Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur ![]() |
|
|
00
|
|
|
#11 |
|
Invité de passage
![]() Intégrateur Web Inscription : septembre 2011 Messages : 2 ![]() |
Merci tout le monde !
J'ai essayé d'appliquer la proposition de CinePhil et pour autant que je puisse en juger, j'ai bien le résultat obtenu. Finalement, c'était assez compliqué non ? Est-ce un défaut d'élaboration de la base ? |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com