【笔记】SQL点滴 2017-08-21

来源:互联网 发布:jpa mysql dialect 编辑:程序博客网 时间:2024/06/03 18:55

  • 每次记录SQL的点滴
    • 数据
    • 想要得到的数据在5月份这个时间段的访问次数
    • 写完的SQL结构
    • 我遇到的问题

每次记录SQL的点滴

项目中遇到SQL, 尤其是跟分组有关, 或者count, sum相关, 写的不是很好.有时间就记录点吧, 没时间就算了..

例如有一个关于统计的需求,要求主表不管有无从表的统计数据,都要显示出来:

数据

用户名称 访问记录 访问时间 用户1 访问url 5-18 用户2 访问url 3-18 用户1 访问url 5-16 用户3 NULL NULL

用户列来自主表, 其他两列均来自从表, 两者之间通过用户id进行关联

想要得到的数据(在5月份这个时间段的访问次数):

用户名称 访问次数 用户1 2 用户2 0 用户3 0

写完的SQL结构

SELECT 用户名, count(统计某字段) 访问次数 FROM (    -- 子查询1(查询某些条件的用户表)    -- 当然实际业务要复杂的多, 可能是多表关联出来的结果集) t1-- t1 相当于一张表, 不管里面的查询关联了多少表LEFT JOIN (    -- 子查询2(查询某些条件的另一张表)    WHERE time = 5月份) t2 ON t1.id = t2.id -- t2 是从表, 数据的主要来源记录GROUP BY t1.id

我遇到的问题

  • 如果LEFT JOIN t2 , 不通过子查询会怎么样?
SELECT 用户名, count(统计某字段) 访问次数 FROM (    -- 子查询1(查询某些条件的用户表)) t1LEFT JOIN t2表名 ON t1.id = t2.id WHERE time = 5月份GROUP BY t1.id

最开始我是这样写的, 但是出现的数据会变成这样:

用户名称 访问次数 用户1 2

发现用户2, 用户3 不见了….

原因: 关联表时 , 没有用子查询, 那么关联的所有访问记录的数据, 但是如果现在需要查某个时间段的数据, 再最后面肯定会用WHERE time = 5月份这样的语句, 导致用户2, 因为它存在访问记录, 但是时间在3月份, 这样它会直接被筛掉, 包括用户3, 它甚至不存在访问记录, 更会被筛掉.

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 假牙咽到肚子里怎么办 牙咽肚子里了怎么办 假牙吃肚子里了怎么办 陶瓷牙咽肚子里怎么办 做飞机耳朵疼难忍怎么办 肚子痛又拉不出来怎么办 胃胀气打嗝想吐怎么办 胃胀吐酸水恶心怎么办 一岁宝宝胃胀气怎么办 3岁宝宝腹胀呕吐怎么办 胃胀气想吐怎么办快速 胃胀然后吐了怎么办 1岁宝宝胃胀气怎么办 孩子胃胀气还吐怎么办 肚子里进了凉气怎么办 肠胃涨气肚子变大怎么办 感觉肚子胀胀的怎么办 肚子胀撑的难受怎么办 肚子着凉了很疼怎么办 来月经肚子疼怎么办最快的方法 孕妇上大便有血怎么办 做完爱小腹坠痛怎么办 月经不来肚子胀怎么办 月经期间肚子疼的厉害怎么办 大姨吗来了肚子疼该怎么办 孕妇7个月拉肚子怎么办 胃疼肚子也疼怎么办 6个月孕妇肚子疼怎么办 孕妇4个月肚子疼怎么办 孕妇5个月拉肚子怎么办 4个月孕妇拉肚子怎么办 怀孕5个月拉肚子怎么办 肠胃老是胀气很不舒服怎么办 肚子里有气排不出来怎么办 小兔子不吃兔粮怎么办 泰迪肚子一直叫怎么办 狗狗肚子响该怎么办 狗狗肚子一直响怎么办 一刮风空调就响怎么办 胃里有气往上顶怎么办 胃里难受想吐怎么办