MYSQL计数 - 如果为null则返回0

时间:2012-11-12 23:59:10

标签: mysql sql null

这是我的疑问:

select COUNT(*) as total, COUNT(distinct user) as unique 
FROM table 
WHERE uristem in ('/example/', '/example/', '/example/', '/example/') 
      and time > DATE_SUB(NOW(), INTERVAL 24 HOUR)' 
group by uristem;

应该是这样的

100 50
25  50
0   0
100 35

但如果没有计数,它看起来像这样(缺少)

100 50
40  50
100 35

如何填写0代替?

2 个答案:

答案 0 :(得分:1)

如果你没有带有uri词干的表,那么就像

那样难看
Select
  u.uristem,
  count(t.uristem),
  count(distinct t.user) as unique
From (
    Select '/example1/' As uristem
    Union All Select '/example2/'
    Union All Select '/example3/'
    Union All Select '/example4/'
  ) u
    Left Outer Join
  table t
    On u.uristem = t.uristem And
    t.time > Date_Sub(Now(), Interval 24 Hour)
 Group By
   u.uristem

应该这样做

答案 1 :(得分:1)

试试这个(未经测试):

select COUNT(t.uristem) as total
, COUNT(distinct t.user) as unique 
FROM 
    (
        select uristem, user
        from table
        where time > DATE_SUB(NOW(), INTERVAL 24 HOUR) 
    ) t
right outer join 
(
    select '/example/' x
    union select '/example/'
    union select '/example/'
    union select '/example/'
) y
on t.uristem = y.x
group by y.x;