begin process at 2012 02 12 00:48:14
  Trouver un code source :
 
dans
 
Accueil > Forum > 

SQL

 > 

SQL Server, MSDE, SQL Express

 > 

Débutant(s)

 > 

comment résoudre cette requete ?


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

comment résoudre cette requete ?

dimanche 25 mai 2008 à 12:41:08 | comment résoudre cette requete ?

sikove

salut tout le monde,

je suis vraiment coincé avec cette requete :

- afficher le nom, salaire, departement et le salaire moyen du departement, pour tout les employés qui ont un salaire moyen>= sal moyen de leurs departements

ce que j'ai essayé de faire :

select avg(sal)
from emp as e
group by job
having avg(sal)>=all(select avg(sal)
                            from emp as r
                            group by depn)
and e.depn=(select depn
                   from emp as r
                   where e.depn=r.depn)

mais ça donne des erreurs, et en plus impossible d'ajouter le nom des employés dans la premiere selection ...

une idée svp ?

merci

dimanche 25 mai 2008 à 18:54:07 | Re : comment résoudre cette requete ?

yann_lo_san

Salut,

il ne faut pas imbriquer les group by !
Il faut passer par une sous-requete de référence ,
Voici le test en Transact-SQL (sql-server)  :

-- Exemple de table avec quelques données

declare  @employe table(nom varchar(35), dept varchar(10), salaire money)
insert into  @employe values('nom1', '13', 1000)
insert into  @employe values('nom2', '13', 1500)
insert into  @employe values('nom3', '27', 2000)
insert into  @employe values('nom4', '10', 1200)
insert into  @employe values('nom5', '75', 900)
insert into  @employe values('nom6', '75', 2500)

-- Requete avec une reference à une sous-requete (appelée ref)

select 
    t1.nom as  'NOM',
    t1.salaire as  'SALAIRE',
    ref.dept as  'DEPT',
    ref.avgSalaire as  'SALAIRE MOYEN DU DEPT'
from
    @employe t1,
    (select  t2.dept,
                avg(t2.salaire) as 'avgSalaire'
    from  @employe t2
    group by  t2.dept) as  ref
where
    t1.dept = ref.dept
    and t1.salaire >= ref.avgSalaire
order by t1.dept

-- Le résultat est :

NOM   SALAIRE    DEPT   SALAIRE MOYEN DU DEPT
-----------------------------------------------------------------
nom4     1200.0000   10       1200.0000
nom2     1500.0000   13       1250.0000
nom3     2000.0000   27       2000.0000
nom6     2500.0000   75       1700.0000

 

dimanche 25 mai 2008 à 22:06:59 | Re : comment résoudre cette requete ?

sikove

ah ok je savais pas qu'on pouvait faire ce truc ^^

j'ai d'autres requetes auquel je n'ai pas trouvé la réponse :

- obliger la majuscule, et doit contenir au moins 2 caratéres  (nom char)
- la premiere caractere s'elle est renseigné, doit etre comprios entre a et z (titre char)
- sexe s'il est renseigné, ne doit accepter que les valeurs m et f  (sexe char)

tu pourrais m'aider stp ?

merci



lundi 26 mai 2008 à 20:35:08 | Re : comment résoudre cette requete ?

yann_lo_san

Rebonjour,

Ben va falloir commencer à bosser un peu non ?

Bon voilà pour tes problèmes :

-- la fonction upper pour les majuscules, la fonction len pour la taille d'une chaine :
-- et un pattern like pour avoir la première lettre entre a et z

selectupper(nom), titre from @employe
wherelen(nom) >= 2
 and titre like'[a-z]%'

-- Concernant la contrainte sur le sexe
-- voilà la solution facile et plutot bète car elle rejette tous les champs qui n'ont pas les caracteres m ou f

and sexein('m', 'f')

-- voilà une solution plutot technique :
--Création d' une règle de base de donnée liée à la colonne voulue.


USE  master

CREATE  RULE
 rule_sexe
AS
@valeursin('m', 'f') or @valeur  is  null


EXEC  sp_bindrule  'rule_sexe' ,  'employe.sexe'


-- A chaque INSERT dans la colonne sexe, la contrainte s'active

lundi 26 mai 2008 à 22:52:41 | Re : comment résoudre cette requete ?

sikove

merci, y'a des trucs que je savais pas ^^

enfaite dans la question 1 c'etait en realité une constrainte à faire : il faut obliger que le champ soit majuscule, j'ai essayé ça

constraint test check( (upper(champ)=champ))

mais cela n'a rien donné.... tu sais comment faire stp ?

merci encore


mardi 27 mai 2008 à 13:36:18 | Re : comment résoudre cette requete ?

yann_lo_san

Salut,

Je peux t'aider même si cela est assez facile à déduire :

Les chaine non unicode (varchar) sont des suites de nombres (ASCII),
le a est different du A dans la suite ascii.

On en déduit donc ceci :

create table bidule
(
   c1 varchar(35)check(ascii(c1)=ascii(upper(c1)))
);



Cette discussion est classée dans : moyen, requete, salaire, sal, depn


Répondre à ce message

Sujets en rapport avec ce message

aide requete [ par kamikaz666 ] Bonjour,Je voudrais avoir la réponse de la requête suivante:"les 3 meilleurs salaires de la table employés"j'ai essayé la requête suivante mais ça ne Probleme requete avec LIKE [ par Bigbangss ] Bonjour,Voila je n'arrive pas à exprimer ma requete.Je souhaiterai afficher tout les éléments d'un enregistrement présents dans une table où une des c Requete de classement avec plusieurs tables [ par slider04 ] Bonjour, j'ai deux tables, une table client et une table temps. je souhaiterais en ressortir le classement de temps selon le niveau et le sexe pour le base de donnée géolocalisation [ par pascb423 ] Bonjour, j'ai une base de donnée qui contient les adresses ip d'après les pays. mon problème c'est que la requete que je fait me donne un résultat fau requete MySQL [ par xactise ] Bonjour et d'avance merci a ceux qui lisent mon post.j'ai un petit souci avec une requete SQL.j'explique ce que je souhaite faire : admetons qu'on est jointure triple [ par petitnounoursjoyeux ] Bonjour tout le monde, je galère depuis un bon moment, j'ai été voir divers forums et tuto, mais pas moyen de faire cette requete de #&#$!#% en gros : requete [ par MANURELAIS ] Salut à tous,Voilà j'ai besoin de vous car je n'arrive pas a faire:Une bd 2 tables (la base n'est pas de moi) Produit ( N°, NOM,) et Categorie(N°categ besoin d'aide pour une requete sql [ par elfifie ] J'ai une table Facture qui contient les champs ID_Facture et Montant.Une autre table Achat qui contient les champs Nom et ID_Facture.Sachant que chaqu appeler un état avec 2 parametres [ par elfifie ] J'arrive bien à ouvrir un état en lui envoyant 1 parametre en faisant :DoCmd.OpenReport stDocName, acPreview, , requeteoù requete = "[Champ] = 'MonCri [curseur] insérer 3 premiers meilleurs salaires [ par sikove ] Salut, voila ça fait un moment que je cherche comment faire cette requete : " inserer dans une table temporaire les 3 meilleurs salaires d'une table d


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 5,413 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales