8768 sujets

Développement web côté serveur, CMS

Bonjour à tous
Je cherche à faire marcher une requête en apparence très simple

SELECT c.code, c.name, COUNT(
    SELECT a.authorID
    	FROM Authors AS a 
    	WHERE a.countryCode = c.code) AS aNum
 FROM Countries AS c
ORDER BY aNum DESC, c.code

Résultat

#1064 - Erreur de syntaxe près de 'SELECT a.authorID
        FROM Authors AS a
        WHERE a.countryCode = c.code) A' à la ligne 2

Une idée sur ce qui cloche ?
Modifié par PapyJP (12 May 2024 - 18:08)
Bonsoir,

La fonction count est une fonction d'agrégat. Elle attend une colonne ou * en paramètre, pas une sous-requête.
Tu ne peux pas l'utiliser de cette façon, ou en tout cas pas en standard.

Si je comprends bien, tu veux récupérer une liste de pays classée en ordre décroissant par le nombre d'auteurs provenant du dit pays. C'est plutôt quelque chose comme ceci qu'il faut essayer d'après moi:


select t.code, t.name, t.aNum from (
select c.code as code, c.name as name, count(*) as aNum
from countries c
join authors a on a.countryCode = c.code
group by c.code
) t
order by t.aNum desc, t.code


Je n'ai pas essayé ce code, donc il y a peut-être une petite erreur, mais c'est l'intention qui compte.
Salut

Je rejoins Quentin,

j'aurais fait comme cela :

SELECT c.code, c.name, 
    (SELECT COUNT(a.authorID)
     FROM Authors AS a 
     WHERE a.countryCode = c.code) AS aNum
FROM Countries AS c
ORDER BY aNum DESC, c.code;
Meilleure solution