几个有用的MySQL SUM问题

时间:2015-11-01 03:14:51

标签: mysql

如果我要使用某些MySQL,例如:

        $stmt = $conn->prepare("SELECT SUM(`num1`) + SUM(`num2`) FROM database.table WHERE `id` = :id");
        $stmt->bindParam(':id', $ident, PDO::PARAM_INT, 11);
        $stmt->execute();
        $sum2 = $stmt->fetchAll();

并假设num1的相应值为20且num2为空,我应该期望收到$ sum2 [0] [0]值为20还是null?

同样在使用SUM时,准备好的选择是否应显示为:

        $stmt = $conn->prepare("SELECT SUM(`num1` + `num2`) FROM database.table WHERE `id` = :id");

或者这不是特别重要吗?

2 个答案:

答案 0 :(得分:1)

NULL会忽略NULL个值。因此,当所有值为NULL时,它只返回NULL

另一方面,当您添加两个数字时,如果NLLLNULL,则结果为sum(num2)

因此,在第一个查询中,如果您只有一行,则结果为NULL,因为NULLNULL且添加的结果为NULL

在第二种情况下 - 有一行 - 那么该值也将是<div class="jumbotron" style="background-image: url('http://image.url/he.png');"> <h2>Hello Heading Here</h2> <p>Some Paragraph Stuff Here</p> </div> 。但是,对于多行,最终会忽略其中任何一列具有{{1}}值的行。

答案 1 :(得分:1)

使用MySQL <localhost> REMOTE_MODULE mysql_db name=test_db state=present <localhost> EXEC ['/bin/sh', '-c', 'mkdir -p $HOME/.ansible/tmp/ansible-tmp-1446497958.1-90296161052037 && chmod a+rx $HOME/.ansible/tmp/ansible-tmp-1446497958.1-90296161052037 && echo $HOME/.ansible/tmp/ansible-tmp-1446497958.1-90296161052037'] <localhost> PUT /var/folders/nw/2vnhg_gj77v_cyfv0p1vdfj80000gn/T/tmpK3DT_j TO /Users/techraf/.ansible/tmp/ansible-tmp-1446497958.1-90296161052037/mysql_db <localhost> EXEC ['/bin/sh', '-c', u'LANG=en_US.UTF-8 LC_CTYPE=en_US.UTF-8 /usr/bin/python /Users/techraf/.ansible/tmp/ansible-tmp-1446497958.1-90296161052037/mysql_db; rm -rf /Users/techraf/.ansible/tmp/ansible-tmp-1446497958.1-90296161052037/ >/dev/null 2>&1'] failed: [localhost] => {"failed": true} msg: the python mysqldb module is required ,因为if + SUM(any) = NULL

NULL

或使用那样: -

IF(num1 IS NULL,0,num1)
IF(num2 IS NULL,0,num2)

或使用SELECT IFNULL(SUM(num1), 0)

IFNULL

或使用IFNULL(SUM(num1), 0)

COALESCE