采取以下声明:
SELECT SUM( IF( talktime > 4 AND status = 'answer' , 1, 0 ) ) as count FROM table
输出应该计算满足两个条件的行。
声明有效吗?
编辑:
我对IF中的多重条件部分感兴趣。
答案 0 :(得分:2)
如果(表达式1,表达式2,表达式3)强>
如果expr1为TRUE,则IF()返回expr2;否则返回expr3
因此,当条件满足时,上面的代码将返回1
,否则返回0
。
因此,计数将是No. of rows satisfying the condition
。
例如,
如果您想显示total no .of calls
,total no of short calls
,total 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';
我真的不明白为什么你会以任何其他方式这样做,但是,你的代码应该可以正常工作。