Sélectionnons conditionnelle L'objectif:MySQL requête avec deux inline
- Il y a deux tables, une table des anciens et une table des contributions - chaque contribution est liée par ID
- Obtenir une liste des anciens élèves des anciens qui ont contribué 2-3000 dans la gamme de 2002-10-10 et 2003-10-10.
- Résultat doit afficher le nom de anciens, ID, chaque total de anciens donné pour tous les temps, et chaque total des anciens donné pour la plage de dates spécifiée
La tentative:
SELECT alumni.alumni_id, alumni.alumni_name,
(SELECT SUM(contributed_amt) FROM contribution WHERE contribution.alumni_id = alumni.alumni_id) AS contrib_alltime_total,
(SELECT SUM(contributed_amt) FROM contribution WHERE contribution.alumni_id = alumni.alumni_id AND contribution.date >= 2002-10-10 AND contribution.date <= 2003-10-10) AS contrib_range_total
FROM alumni
WHERE hold_code IS NULL
ORDER BY lname ASC
HAVING contrib_range_total >= 2000
HAVING contrib_range_total <= 3000
Je reçois une erreur de syntaxe, très probablement parce que j'essaie d'utiliser deux
Je réalise également que vous voulez utiliser un HAVING avec GROUP BY, mais je n'ai pas besoin de d o tout groupement
Je pourrais probablement le faire de cette façon, mais je pense que son inefficacité et pourrait prendre beaucoup de temps
SELECT alumni.alumni_id, alumni.alumni_name,
(SELECT SUM(contributed_amt) FROM contribution WHERE contribution.alumni_id = alumni.alumni_id) AS contrib_alltime_total,
(SELECT SUM(contributed_amt) FROM contribution WHERE contribution.alumni_id = alumni.alumni_id AND contribution.date >= 2002-10-10 AND contribution.date <= 2003-10-10) AS contrib_range_total
FROM alumni
WHERE hold_code IS NULL
AND (SELECT SUM(contributed_amt) FROM contribution WHERE contribution.alumni_id = alumni.alumni_id AND contribution.date >= 2002-10-10 AND contribution.date <= 2003-10-10) >= 2000
AND (SELECT SUM(contributed_amt) FROM contribution WHERE contribution.alumni_id = alumni.alumni_id AND contribution.date >= 2002-10-10 AND contribution.date <= 2003-10-10) <= 3000
ORDER BY lname ASC
Quelle serait la façon la plus rapide et la plus efficace d'y parvenir? Tout conseil est le bienvenu, merci pour votre temps
Votre suggestion n'a pas fonctionné, donc je l'ai modifiée, mais j'obtiens une erreur "Utilisation invalide de la fonction de groupe" SELECT a.alumni_id, (SÉLECTIONNER LA SOMME (contribute_amt) FROM contribution WHERE contribution.alu mni_id = a.alumni_id) AS contrib_alltime_total, SUM (c.contributed_amt) AS contrib_range_total DE anciens a, contribution c OÙ EST a.hold_code NULL ET c.alumni_id = a.alumni_id ET ENTRE c.contribution_date ' 2002-10-10 'ET' 2003-10-10 ' ET SUM (c.contributed_amt) ENTRE 2000 ET 3000 GROUPE PAR a.alumni_id ORDER BY a.lname ASC – samJL