J'ai une table avec des colonnes comme celles-ci:requête SQL: SUM sur trois colonnes avec des critères
idx | amount | usercol1 | usercol2 | usercol3 | percentage1 | percentage2 | percentage3
Les données sont généralement comme ceci:
0 | 1500 | 1 | null | null | 100 | null | null
1 | 3000 | 2 | 3 | null | 50 | 50 | null
Je voudrais faire une SOMME() du montant de chaque utilisateur.
Exemple:
- user1 = 1500 * 100/100 (quantité * usercol1/100)
- user2 = 3000 * 50/100 (quantité * usercol1/100)
- user3 = 3000 * 50/100 (quantité * usercol2/100)
j'ai essayé en vain UNION (ne pas totaliser les sUM).
Existe-t-il un moyen de le faire? Le problème étant qu'il devrait GROUP BY le nom d'utilisateur (que je reçois avec un nom d'utilisateur LEFT OUTER JOIN sur exampletable.usercol1 = usernames.idx). Je sais que c'est non standard et serait mieux avec les relations d'une autre table. Mais je ne suis pas autorisé à changer la structure de la table.
Beaucoup de beaucoup de mercis! : =)
Par la présente, un exemple qui donne un mauvais résultat (semble donner uniquement les résultats de la requête au milieu)
(
SELECT SUM(projects.amount * (projects.percentage1/100)) as totalproj,
entities.idx as idx,
COUNT(projects.idx) as numproj,
entities.name
FROM projects
INNER JOIN entities ON projects.usercol1=entities.idx
WHERE projects.usercol1=entities.idx
GROUP BY name ORDER BY totalproj DESC
)
UNION ALL
(
SELECT SUM(projects.amount * (projects.percentage2/100)) as totalproj,
entities.idx as idx,
COUNT(projects.idx) as numproj,
entities.name
FROM projects
INNER JOIN entities ON projects.usercol2=entities.idx
WHERE projects.usercol2=entities.idx
GROUP BY name ORDER BY totalproj DESC
)
UNION ALL
(
SELECT SUM(projects.amount * (projects.percentage3/100)) as totalproj,
entities.idx as idx,
COUNT(projects.idx) as numproj,
entities.name
FROM projects
INNER JOIN entities ON projects.usercol3=entities.idx
WHERE projects.usercol3=entities.idx
GROUP BY name ORDER BY totalproj DESC
)
ORDER BY totalproj DESC
LIMIT 10
Impossible de comprendre la question: Je ne comprends pas le travail donné sous "Exemple". usercol1 est diversement 1 ou 2, jamais 100. Aussi, comment usercol1 correspond à l'utilisateur 1 et à l'utilisateur 2, mais usercol2 correspond à l'utilisateur 3? – Hammerite