J'ai trouvé la fonction IF () de MySQL très utile pour me donner un moyen efficace d'effectuer des fonctions agrégées conditionnelles, comme ceci:
SELECT SUM(IF(`something`='a', `something_weight`, 0)) AS `A`, SUM(`something_weight`) AS `All` FROM...
Je comprends que cette fonction est une caractéristique de MySQL, et n'est généralement pas disponible dans les bases de données qui utilisent SQL.
Existe-t-il une méthode plus standard pour réaliser cette fonctionnalité du côté de la database?
Dans MSSQL, vous pouvez faire ceci:
SELECT SUM(CASE something WHEN 'a' THEN something_weight ELSE 0 END) as [a], SUM(something_weight) as [All] FROM ...
Je ne suis pas un gourou sql mais une déclaration de cas
http://dev.mysql.com/doc/refman/5.0/fr/case-statement.html
pourrait être standard ansi.
Je crois que l'utilisation d'une déclaration CASE serait plus standard.
SELECT SUM(CASE `something` WHEN 'a' THEN `something_weight` ELSE 0 END) AS `A`, SUM(`something_weight`) AS `All` FROM...
CASE est la command générale que vous pouvez utiliser pour effectuer des fonctions d'agrégat conditionnelles. Pour plus d'informations, voir http://www.1keydata.com/sql/sql-case.html
regardez en utilisant CASE: CASE (Transact-SQL)
SELECT SUM (CAS QUAND quelque chose = 'a' ALORS XXX QUAND quelque chose = 'b' ALORS YYY ELSE 0 END) AS ColumnName