如何使用SUM而不是UNION

时间:2015-12-14 22:17:36

标签: mysql sql select union

我有以下查询来获得两个不同的计数:

  select count(*)  
  from title_title where tv_show_id is null
union
  select count(distinct tv_show_id) 
  from title_title where tv_show_id is not null

有没有一种简单的方法可以在SQL中添加两者而不是在它之外添加?

2 个答案:

答案 0 :(得分:5)

由于两个查询都使用相同的表,因此您可以将where子句转换为聚合函数中的case表达式,然后添加结果。请注意,count与大多数聚合函数一样忽略null s,因此可以相对整齐地完成:

SELECT COUNT(CASE WHEN tv_show_id IS NULL THEN 1 END) +
       COUNT(DISTINCT tv_show_id) -- nulls are ignored anyway
FROM   title_title

答案 1 :(得分:1)

请原谅MSSQL答案,但我相信你应该能够在MySQL中做到这一点(或类似的事情):

SELECT  (COUNT(tt.*) + COUNT(tt2.tv_show_id)) AS Total
FROM    title_title tt
    JOIN title_title tt2 ON tt.tv_show_id = tt2.tv_show_id
WHERE   tt.tv_show_id IS NULL
    AND tt2.tv_show_id IS NOT NULL

执行JOIN回到表格,抓住每个(tt.*tt2.tv_show_id)的计数并将这些计数相加。