SQL中几个简单的函数:LEFT JOIN;COUNT遇上GROUP BY
2016-12-21 15:42
495 查看
概要:函数LEFT JOIN与COUNT/GROUP BY的使用,以及为AND筛选限制条件的合适位置
SQL:
SELECT DISTINCT att.attributes_templates_id,att.attributes_templates_name,COUNT(p.products_id) FROM attributes_templates att
LEFT JOIN categories_to_templates ctt ON att.`attributes_templates_id` = ctt.`templates_id`
LEFT JOIN categories c ON ctt.`categories_id` = c.`categories_id` and c.`objects_status_id` = 1
LEFT JOIN products p ON c.`categories_id` = p.`categories_id` and p.`objects_status_id` = 1
group by att.attributes_templates_id
注释:
关于LEFT JOIN,及AND筛选限制条件的位置
用于限制数据有效状态的c.`objects_status_id` = 1,p.`objects_status_id`
= 1,放在LEFT JOIN和放在WHERE语句中,得到的结果表行数是不同的
A/ 加在LEFT JOIN语句中(即使是LEFT JOIN,不是JOIN哦),被LEFT JOIN的表存在无效项,则会记为NULL,但整个数据行会保留;
B/ 加在WHERE语句中,被JOIN的表若无效项,则整个数据行会被过滤掉。
COUNT遇上GROUP BY
如果不加GROUP BY,COUNT单用含义则为“统计总数”,这样COUNT下来只有一行,按GROUP
BY才能按指定参数聚合;
据说是PM的必备技能的SQL,PM龄3年的我仍然菜鸟,今天开始用心学学
SQL:
SELECT DISTINCT att.attributes_templates_id,att.attributes_templates_name,COUNT(p.products_id) FROM attributes_templates att
LEFT JOIN categories_to_templates ctt ON att.`attributes_templates_id` = ctt.`templates_id`
LEFT JOIN categories c ON ctt.`categories_id` = c.`categories_id` and c.`objects_status_id` = 1
LEFT JOIN products p ON c.`categories_id` = p.`categories_id` and p.`objects_status_id` = 1
group by att.attributes_templates_id
注释:
关于LEFT JOIN,及AND筛选限制条件的位置
用于限制数据有效状态的c.`objects_status_id` = 1,p.`objects_status_id`
= 1,放在LEFT JOIN和放在WHERE语句中,得到的结果表行数是不同的
A/ 加在LEFT JOIN语句中(即使是LEFT JOIN,不是JOIN哦),被LEFT JOIN的表存在无效项,则会记为NULL,但整个数据行会保留;
B/ 加在WHERE语句中,被JOIN的表若无效项,则整个数据行会被过滤掉。
COUNT遇上GROUP BY
如果不加GROUP BY,COUNT单用含义则为“统计总数”,这样COUNT下来只有一行,按GROUP
BY才能按指定参数聚合;
据说是PM的必备技能的SQL,PM龄3年的我仍然菜鸟,今天开始用心学学
相关文章推荐
- SQL SUM() 函数、SQL GROUP BY 语句、SQL HAVING 子句
- 处理分页的数据函数GetlistByPage(strSQL, PageSize, PageNo, PageCount, arrList)
- 当HQL中的count遇上distinct/groupby
- SQL SUM() 函数、SQL GROUP BY 语句、SQL HAVING 子句
- oracle group by ,count,sum 函数 日常使用小知识
- SQL SUM() 函数、SQL GROUP BY 语句、SQL HAVING 子句
- mongod统计(类似sql group by)aggregate函数使用方法
- linq to sql (Group By/Having/Count/Sum/Min/Max/Avg操作符) (转帖)
- SQL group by & count
- Oracle SQL group by-报错:不是单组分组函数
- SQL重复记录查询-count与group by having结合查询重复记录
- sql语句count 与与group By
- 每天努力一点之SQL(二) count sum case when then group by
- SQL GROUP BY 无记录 COUNT
- 当HQL中的count遇上distinct/groupby
- SQL GROUP BY 详解及简单实例
- sql server clr 集成系列之二 简单的sql 函数
- SQL group by语句的使用
- SQL Server BUG集之"自定义函数与group by"
- Oracle 树形SQL语句,SYS_CONNECT_BY_PATH 函数