2009-12-02 9 views
1

J'essaie d'écrire une instruction SQL qui doit parcourir une liste de départements, un peu comme un pour chaque.Aide SQL (pour chaque)

Voici ce que j'ai jusqu'à présent.

SELECT DISTINCT AVG(salary),assigned->name 
FROM edu_ucla_cs241_termproj_schema.InstructorImpl 
WHERE assigned->name = 'Anthropology' 

Cela me donnera une table de Salaire moyen Département 90,15 Anthropologie

Cependant, je veux faire une boucle à travers chaque département. Puis-je faire en sorte que cette requête prenne une variable et fasse une boucle sur le nom de chaque département?

+0

Quelle base de données utilisez-vous? –

+2

Vous ne faites pas de boucle dans SQL. Le bouclage est un concept procédural, mais SQL est déclaratif. –

+0

@Tom: Vous pouvez parcourir les résultats du curseur, entre autres choses. Ce n'est pas recommandé, mais c'est disponible. –

Répondre

3

Pouvez-vous pas utiliser

SELECT AVG(salary), 
     assigned->name 
FROM edu_ucla_cs241_termproj_schema.InstructorImpl 
GROUP BY assigned->name 
+0

'Pouvez-vous pas utiliser' !! : o –

+0

Merci! Le groupe a totalement aidé. – Bernie

3
SELECT assigned->name, AVG(salary) 
FROM edu_ucla_cs241_termproj_schema.InstructorImpl 
GROUP BY assigned->name 

Vous pouvez également obtenir un peu plus d'informations que dans

SELECT assigned->name, COUNT(*) AS NbEmployees, AVG(salary) AS AvSalary, 
     MIN(salary) AS MinSalary, MAX(salary) AS MaxSalary 
FROM edu_ucla_cs241_termproj_schema.InstructorImpl 
GROUP BY assigned->name 

Votre demande/suggestion pour une "variablesboucle à travers les départements] "indique votre en pensant en termes de langages de programmation procéduraux (impératifs). Bien que SQL ou extensions SQL prennent en charge ce paradigme de programmation, vous trouverez que SQL est beaucoup plus puissant lorsqu'il est utilisé de façon déclarative (comme les requêtes ci-dessus: vous « déclarer » ce que vous voulez, et laissez vous inquiétez pas SQL au sujet faire la « boucle » et d'autres mesures nécessaires pour répondre à la demande)

0

Si vous voulez que le salaire moyen pour tous les dossiers et une liste de la colonne de nom pour chaque enregistrement, vous devez utiliser 2 requêtes distinctes

0

boudeurs grâce aux résultats de la requête est effectuée dans la plupart des bases de données grâce à l'utilisation de curseurs dans une procédure stockée. Sans connaître les détails de la question et la base de données en cours d'utilisation, il est difficile de vous conseiller sur la façon dont vous pourriez implémenter ce que vous voulez.

0

Si vous souhaitez obtenir le salaire moyen des tous assigned->name [J'espère que cela est le nom du département], essayez la solution donnée par Astander

SELECT assigned->name,AVG(salary) 
FROM edu_ucla_cs241_termproj_schema.InstructorImpl  
GROUP BY assigned->name 

autrement, si vous wantlto obtenir le salaire moyen pour certains départements alors vous devrez créer la requête dynamiquement, comme ceci:

SELECT assigned->name,AVG(salary) 
FROM edu_ucla_cs241_termproj_schema.InstructorImpl 
WHERE assigned->name in ('name1', 'name2' ...) 
GROUP BY assigned->name