liuyuan19931217
晚灯下的烟火
2016-12-08 06:31
采纳率: 66.7%
浏览 1.5k

关于一个数据库sql语句的问题,我想显示出所有记录,但是数据库会把为空的数据剔除。

这是我的sql语句:select user.id,user.mobile, user.name, sum(actionType=1) 键盘,sum(actionType in(2,3,4)) app,sum(actionType in(1,2,3,4)) 合计 from user LEFT JOIN userecord on user.id=userecord.userId where userecord.actionTime between '2016-12-01 00:00:00' and '2016-12-01 23:59:59' and userecord.userId between 226 and 244 group by user.id; 我的原意是统计出266到244之间所有用户的操作记录,但是有些用户在这个时间段没有操作,所以查询结果就没有显示出来,下面是结果。
图片说明

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

7条回答 默认 最新

  • bdmh
    bdmh 2016-12-08 06:49

    不知道你所谓的空数据是啥东西,你还是仔细查查你的where条件是不是不完善

    点赞 评论
  • liuyuan19931217
    晚灯下的烟火 2016-12-08 06:54

    这是用户228在同条件查询的
    图片说明

    点赞 评论
  • u012934325
    墨笙弘一 2016-12-08 07:44

    你是啥数据库 如果是oracle 你可以利用decode(user.name,'',0,user.name) 每个字段都这样查 表示如果user.name为空 则显示0 如果不为空则显示user.name的值

    点赞 评论
  • jayhkw
    花村大地主 2016-12-08 07:56

    糟糕的提问代码。。。。。。。。。。。

    点赞 评论
  • Tiger_Zhao
    Tiger_Zhao 2016-12-08 09:37

    把时间过滤条件改做连接条件,userId过滤条件改用user表字段。

            select user.id,user.mobile,
                   user.name,
                   sum(actionType=1) 键盘,
                   sum(actionType in(2,3,4)) app,
                   sum(actionType in(1,2,3,4)) 合计
              from user
         LEFT JOIN userecord
                on user.id=userecord.userId
               and userecord.actionTime between '2016-12-01 00:00:00' and '2016-12-01 23:59:59'
             where user.userId between 226 and 244
          group by user.id;
    
    点赞 评论
  • csdn9_14
    陈 俊 刚 2016-12-08 10:27

    你就查找两个表的所有id相同的数据不可以嘛?

    点赞 评论
  • allen_zs
    allen_zs 2016-12-09 06:09

    你的join条件有点问题

    select user.id,user.mobile, user.name, sum(actionType=1) 键盘,sum(actionType in(2,3,4)) app,sum(actionType in(1,2,3,4)) 合计 from user LEFT JOIN userecord on user.id=userecord.userId and userecord.actionTime between '2016-12-01 00:00:00' and '2016-12-01 23:59:59' where userecord.userId between 226 and 244 group by user.id; 
    
    
    点赞 评论

相关推荐