我的一些疑问从MySQL转移到PostgreSQL和我难倒如何重写以下查询PostgreSQL中的工作: SUM(phoneid IN (1, 2, 6, 8)) AS completedcalls
MySQL到PostgreSQL查询重写使用“IN”?
我本来以为我可以只是做SUM(SELECT phoneid FROM myTable WHERE phoneid = 1 OR phoneid = 2
等等等等,但我不相信你可以在一个总和中有一个SELECT。
我也尝试使用WITH
查询,但没有运气让工作。
我花了一段时间才能找出为什么这个工作,所以可能是值得的解释: (1,2,6,8)中的phoneid计算为一个布尔值;如果它是'true',则'或'快捷键,并给出'true';如果它是'false',则你有'false或null',其结果为'null';最后'count()'只计算非空元素,即那些计算为真的元素。我从来不知道你可以用'或'来做到这一点。 – IMSoP
@IMSoP很好的解释,但我不确定'true'时的'或'快捷方式,或者它评估所有表达式并应用[真值表](http://www.postgresql.org/docs/current/static /functions-logical.html) –
这绝对是“最少键入”的解决方案。 – 2013-07-29 13:51:09