SELECT中的IF中的多个条件

时间:2015-11-17 13:19:36

标签: mysql sql

采取以下声明:

SELECT SUM( IF( talktime > 4 AND status = 'answer' , 1, 0 ) ) as count FROM table

输出应该计算满足两个条件的行。

声明有效吗?

编辑:

我对IF中的多重条件部分感兴趣。

4 个答案:

答案 0 :(得分:2)

  

如果(表达式1,表达式2,表达式3)

     

如果expr1为TRUE,则IF()返回expr2;否则返回expr3

因此,当条件满足时,上面的代码将返回1,否则返回0。 因此,计数将是No. of rows satisfying the condition

例如,

如果您想显示total no .of callstotal no of short callstotal no of long calls(假设呼叫持续时间talktime长度)。

SELECT SUM( IF( talktime > 4 , 1, 0 ) ) as No_of_Long_Calls,
           SUM( IF( talktime < 4 , 1, 0 ) ) as No_of_Short_Calls,
           COUNT(*) AS Total_Calls
    FROM table_name
    WHERE status = 'answer'

是的,这是一个有效的Select语句, 100%它会起作用。

希望这有帮助。

答案 1 :(得分:2)

为什么不

SELECT COUNT(*) FROM table WHERE talktime > 4 AND status = 'answer'

答案 2 :(得分:1)

本声明:

SELECT SUM( IF( talktime > 4 AND status = 'answer' , 1, 0 ) ) as count
FROM table

是正确的,有警告:

  • table不允许作为表名,因为它是保留字。它需要逃脱。
  • count是列名的不佳选择,因为它是内置函数名称

您还可以简化查询,因为MySQL中不需要if()

SELECT SUM(talktime > 4 AND status = 'answer') as cnt
FROM `table`;

当然,您可以将比较逻辑移动到WHERE子句,但这与原始查询保持相同的结构。

答案 3 :(得分:0)

你可以这样做:

SELECT COUNT(id) count FROM table WHERE talktime > 4 AND status = 'answer';

我真的不明白为什么你会以任何其他方式这样做,但是,你的代码应该可以正常工作。