【问题标题】:SQL how to handle the empty table with 0 value?SQL如何处理值为0的空表?
【发布时间】:2017-08-30 18:42:48
【问题描述】:

大家好,我正在用一个名为 nobel have (yr,subject) 列的表来尝试这个问题

为这个问题提供的答案如下 选择显示没有授予医学奖的年数的代码

SELECT COUNT(DISTINCT yr) FROM nobel
   WHERE yr NOT IN (SELECT DISTINCT yr FROM nobel WHERE subject = 'Medicine')

但是,我的问题是,如果每年都给药,这意味着我们的查询

SELECT COUNT(DISTINCT yr) FROM nobel WHERE yr NOT IN(....)

会从一个空表中选择,然后不是返回0,而是错误,那么这种情况如何处理?

非常感谢!

【问题讨论】:

  • 请标记正确的数据库。是mysql还是sql-server?
  • 我在这里没有看到任何错误。你能显示你收到的错误信息吗?我认为它会正常返回 0。

标签: mysql sql sql-server oracle sqlite


【解决方案1】:

假设每年至少颁发一个奖项(即每年都有记录):

select distinct n.yr, (select count(*) from nobel n1 where n1.subject = 'Medicine' and n1.yr = n.yr) cnt
  from nobel n

【讨论】:

    【解决方案2】:

    如果过滤条件中使用了主题列,那么计数列可以如下所示。

    SELECT count(yr) FROM nobel WHERE 主题 'Medicine'。

    您只需运行上述查询即可获取年份计数。

    【讨论】:

      【解决方案3】:

      你可以使用mysql的IFNULL()

      SELECT IFNULL(COUNT(DISTINCT yr), 0) FROM nobel WHERE yr NOT IN(....)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-06-14
        • 1970-01-01
        • 2015-03-28
        • 2015-10-27
        • 2018-04-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多