Fonction count (SQL) sous acces
EMPLOYE (Numemp, Nomemp, Salemp,#Numfonction, #Numserv)
FONCTION(Numfonction, Libfonction)
SERVICE (Numserv, Nomserv, Nombatiment)
Ma requette consiste a effectuer le nombre d'employés dans chaque service (en utilisant la fonction count)
SELECT SERVICE.Nomserv, nbemp count(*)
FROM SERVICE
WHERE EMPLOYE.#Numfonction = FONCTION.Numfonction;
Mais j'ai une erreur de sytaxe, et j'aimerai avoir de l'aide svp, merci.
Configuration: Windows 7 Firefox 3.6
26 réponses
Problème de requête SQL sous Access visant à compter les employés par service à partir des tables EMPLOYE, FONCTION et SERVICE, avec une syntaxe invalide et des erreurs d’agrégation. Plusieurs réponses proposent des jointures explicites et une agrégation correcte, par exemple SELECT SERVICE.Nomserv, COUNT(*) AS nbemp FROM EMPLOYE INNER JOIN SERVICE ON SERVICE.Numserv = EMPLOYE.Numserv GROUP BY SERVICE.Nomserv. D’autres messages suggèrent d'utiliser HAVING pour filtrer les résultats, ou de corriger les fautes de syntaxe par alias et noms de colonnes, afin d'éviter les erreurs d'expression dans GROUP BY. En pratique, l’expression agrégée doit correspondre à toutes les colonnes non agrégées dans GROUP BY, et les erreurs d’agrégation proviennent souvent de jointures ambiguës ou de colonnes non incluses dans le regroupement.
-
avec plaisir, je sait pas si t'as réussi la requette Fonction non utilisées mais j'ai posté sujet ici https://forums.commentcamarche.net/forum/affich-16626728-requette-sql#9 vas y voir si ca peut t'aider
a bientot -
Bonjour, j'ai réussi a terminer mon projet access hier soir (tu m'a fait comprendre que que je fessais beaucoup de faute de débutant, et qu'il fallait que je me concentre un peu plus), Merci de ton aide.
-
par contre pour la requette : Fonction non utilisé, ca fait deux heures que je cherche et j'y arrive pas
je vais poster un sujet et je te redis ca -
ok alors pour la requette services ayant plus de 2 employés
SELECT SERVICE.Numserv, SERVICE.Nomserv
FROM SERVICE, EMPLOYE
WHERE SERVICE.Numserv=EMPLOYE.Numserv
GROUP BY SERVICE.Numserv, SERVICE.Nomserv
HAVING Count(Numemp)>2; -
Ceci est valable pour les autres requêtes, car les champ Nbemp, ont été inventés afin de tomber sur un calcul juste après avoir effectuer toutes les requêtes.
-
SELECT Numfonction, Libfonction
FROM FONCTION
WHERE Nbemp=0;
la tu n'as besoin que de la table FONCTION car il y a la Propriété Nbemp qui t'indique si la fonction est utilisé ou pas
Re : le champ Nbemp n'existe pas en théorie, je l'ai créer pour regarder ce que donnerais ma requette afin de ne faire d'erreur. Mais a tu une solution pour effectuer ce champ sans ce champ, merci d'avance. -
Bonjour, oui je vais tester çà tout de suite, je te remercie par avance de l'aide que tu m'a apporter.
-
J'espere que tout a bien fonctionné, confirme moi,
merci -
Si tu veut tous les infographiste par ordre de salaire décroissant, c'est :
SELECT Nomemp, Salemp
FROM EMPLOYE, FONCTION
WHERE EMPLOYE.Numfonction=FONCTION.Numfonction
AND Libfonction="INFORGRAPHISTE"
ORDER BY Salemp DESC; -
L'infographiste le mieu payé
SELECT Nomemp, Salemp
FROM EMPLOYE, FONCTION
WHERE EMPLOYE.Numfonction=FONCTION.Numfonction
AND Libfonction="INFORGRAPHISTE"
AND Salemp=(SELECT MAX(Salemp) FROM EMPLOYE);
-Dans ta base de donné tu as fais une faute, tu as marqué INFORGRAPHISTE donc dans la requette il faut aussi marqué INFORGRAPHISTE
-le MAX doit etre une condition donc dans SELECT tu ne mais que Salemp pour qu'il affiche le salaire et en condition AND tu fais une sous selection : salaire = salaire max de la table EMPLOYE qui se traduit par Salemp=(SELECT MAX(Salemp) FROM EMPLOYE) -
Somme des salaires par service
SELECT SERVICE.Nomserv, SUM(EMPLOYE.salemp) AS "Total Salaires"
FROM EMPLOYE, SERVICE
WHERE SERVICE.Numserv=EMPLOYE.Numserv
GROUP BY SERVICE.Nomserv;
C'est quasiment pareil que les salaires du service compta sauf que tu ne précise pas dans WHERE :
AND SERVICE.Nomserv="COMPTABILITE"
PS: Le AS dans la clause SELECT permet de renommé la colonne résultat SUM(EMPLOYE.salemp (soucis de présentation) -
Liste des fonctions qui ne sont pas utilisées
SELECT Numfonction, Libfonction
FROM FONCTION
WHERE Nbemp=0;
la tu n'as besoin que de la table FONCTION car il y a la Propriété Nbemp qui t'indique si la fonction est utilisé ou pas -
la requette Noms des employés INFOGRAPHISTES dont le salaire est le plus élevé est contradictoire :
ESt ce que tu veut l'infographite qui a le salaire le plus élevé ou les infongraphiste classé par ordre décroissant de salaire? -
Libellé des services dans lequel travaillent plus de 2 employés
SELECT SERVICE.Nomserv
FROM SERVICE, EMPLOYE
WHERE SERVICE.Numserv=EMPLOYE.Numserv
GROUP BY SERVICE.Nomserv
HAVING Count(Numemp)>2;
la ca te metrat le nom des services, si tu veut les numéros, remplace SERVICE.Nomserv par SERVICE.Numserv dans SELECT et GROUP BY -
Somme des salaires du service compta
SELECT SERVICE.Nomserv, SUM(EMPLOYE.salemp) AS "Total Salaires"
FROM EMPLOYE, SERVICE
WHERE SERVICE.Numserv=EMPLOYE.Numserv
AND SERVICE.Nomserv="COMPTABILITE"
GROUP BY SERVICE.Nomserv;
la Somme c'est SUM et t'as oublié la jointure
normalement ca doit etre ca -
le x en minuscule bien sur
-
xsure@live.fr
-
Bonjour, oui je peux t'envoyer cela mais est ce que je dois créer un compte sur le site pour t'envoyer mon projet access ou sinon peux tu me dire ton adresse internet? Merci d'avance.
-
pourrez tu m'envoyer le fichier access pour que je fasse plus alaise (s'il ne contient pas de données confidentielle bien sur) par message privé?
-
Fonction pour laquelle il y a plus d'1 employé :
SELECT FONCTION.Numfonction, FONCTION.Libfonction
FROM FONCTION, EMPLOYE
WHERE FONCTION.Numfonction=EMPLOYE.Numfonction
GROUP BY FONCTION.Numfonction, FONCTION.Libfonction
HAVING Count(Numemp)>1
;
erreur :
-tu as oublier la jointure WHERE
-GROUP BY doit reprendre les mêmes propriété que SELECT
-Count(*) compte toutes les lignes de la table, il vaut mieux mettre une propriété car cela va compter dans la table EMPLOYE grace à la propriété Numemp
- 1
- 2