Стандартный метод для функции MySQL IF()

Я обнаружил, что функция IF() MySQL очень полезна, поскольку дает эффективный способ выполнения функций условного агрегата, например:

SELECT SUM(IF(`something`='a', `something_weight`, 0)) AS `A`, SUM(`something_weight`) AS `All` FROM...

Насколько я понимаю, эта функция является функцией MySQL и, как правило, недоступна в базах данных, использующих SQL.

Есть ли более стандартный метод для достижения этой функциональности на стороне базы данных?

5 ответов

Решение

В MSSQL вы можете сделать это:

SELECT SUM(CASE something WHEN 'a' THEN something_weight ELSE 0 END) as [a],
       SUM(something_weight) as [All]
FROM ...

Я не гуру sql но заявление случая

http://dev.mysql.com/doc/refman/5.0/en/case-statement.html

может быть стандартным ANSI.

CASE - это общая команда, которую вы можете использовать для выполнения условных агрегатных функций. Для получения дополнительной информации см. http://www.1keydata.com/sql/sql-case.html

Я считаю, что использование оператора CASE будет более стандартным.

SELECT SUM(CASE `something` WHEN 'a' THEN `something_weight` ELSE 0 END) AS `A`, 
       SUM(`something_weight`) AS `All` 
    FROM...

Рассмотрим использование CASE: CASE (Transact-SQL)

ВЫБЕРИТЕ СУММУ (СЛУЧАЙ КОГДА-ЛИБО ='a', ТОГДА XXX, КОГДА-ЛИБО ='b', ТОГДА YYY, ДАЛЕЕ 0 КОНЕЦ) AS ColumnName

Другие вопросы по тегам