如何使用IF搜索条件为" true"值

时间:2017-05-25 02:06:48

标签: mysql

我正在创建一个报告生成器,它允许我通过选择保存在数据库中的表和字段来构建自定义报告。每个表,字段,计算值等被视为单独的实体,与任何其他实体没有直接连接。它们都是独立的。

我有许多计数字段/列,我目前正在使用,使用类似于以下的代码:

sum(case when usasf_teams.division_levelid=7 then 1 else 0 end) as Dance

我的问题是这些列中有很多列,而且大多数值都是零。这使得很难发现非零值,这是我们想要看到的。

我知道我可以使用IF语句返回数字或空格,但我不想让服务器完成对每行中每列执行相同操作两次的工作。我想做这样的事情:

if(sum(case when usasf_teams.division_levelid=7 then 1 else 0 end),
    {{use the comparison value}}, ' ') as Dance

这样,sum / case操作只对每个字段执行一次。

这可能吗?

1 个答案:

答案 0 :(得分:1)

首先,您可以将逻辑简化为:

sum(usasf_teams.division_levelid = 7) as Dance

然后,我建议将0值更改为NULL而不是空格:

nullif(sum(usasf_teams.division_levelid = 7), 0) as Dance

如果要返回真实空间,则需要注意类型。你可以这样做;

select (case when sum(usasf_teams.division_levelid = 7) > 0
             then cast(sum(usasf_teams.division_levelid = 7) as char)
             else ' '
        end)

您无需担心两次sum()。聚合中的费用是操纵数据,而不是(通常)计算聚合函数本身。