SQL如何处理0值的空表?

时间:2017-04-05 08:50:35

标签: mysql sql sql-server oracle sqlite

嗨,大家好我用一张名为诺贝尔的表(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,而是会出错,那么如何处理这种情况呢?

非常感谢!

3 个答案:

答案 0 :(得分:0)

您可以使用mys {的IFNULL()

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

答案 1 :(得分:0)

如果在过滤条件中使用了主题列,则可以按如下方式获取计数列。

SELECT count(yr)FROM nobel WHERE subject<> '药'。

您可以运行上述查询来获取年份数。

答案 2 :(得分:0)

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

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