【问题标题】:sql query - how to count values in a row separately?sql查询 - 如何分别计算一行中的值?
【发布时间】:2010-03-29 00:31:43
【问题描述】:

我有一个看起来像这样的表:

id | firstperson | secondperson
1 | jane doe |
2 | bob smith | margie smith
3 | master shifu | madame shifu
4 | max maxwell | 

我正在尝试计算所有第一人称 + 所有第二人称,如果 secondpersons 字段不为空...有没有办法做到这一点?

【问题讨论】:

    标签: sql postgresql count


    【解决方案1】:
    SELECT SUM(CASE WHEN secondperson='' THEN 1 ELSE 2 END) FROM thetable;
    

    【讨论】:

      【解决方案2】:
      select sum(1 + case when secondperson <> '' then 1 else 0 end)
      from MyTable
      

      【讨论】:

        【解决方案3】:

        我不确定这是否适用于 Postgres,但在大多数数据库中,如果我们认为可能存在 NULLS 并且问题确实是“如果第二人称字段不是 NULL”,那么您必须明确包含 NULLS在条件而不是空白值中。

        【讨论】:

          【解决方案4】:

          SELECT SUM(CASE WHEN secondperson = '' OR secondperson IS NULL THEN 0 ELSE 2 END) FROM thetable;

          【讨论】:

            【解决方案5】:

            假设空白表示 NULL,那么在 postgres 中,就像在其他系统中一样,count(field) 将计算字段如果它不为 null 并且

            SELECT count(*)+count(secondperson) FROM thetable;
            

            会给出想要的结果。 (SQL 语法比缺失数据的自定义值更好地尊重 NULL。此外,离题,任何名称中包含数字的字段都是设计修订的候选者)

            【讨论】:

              猜你喜欢
              • 2021-10-17
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多