SELECT
wr.app_userid AS serviceUserid,
count(wwo.servicer_id) AS workOrderCount
FROM
wyy_role wr
left JOIN (SELECT * FROM wyy_work_order
WHERE customer_order_status IN (1, 2)) as wwo ON wwo.servicer_id = wr.app_userid
WHERE
wr.role_type = 25
AND wr.app_userid IN ("4704c979aae04054b1c70cd0432faf64", "c8aa43d244e04773af31f1f3846eb8a3")
AND wr.is_dwline = 0
GROUP BY
wr.app_userid ;
这是一个左关联语句。
查询结果如下:
SELECT
wr.app_userid AS serviceUserid,
count(wwo.servicer_id) AS workOrderCount
FROM
wyy_role wr
left JOIN (SELECT * FROM wyy_work_order
WHERE customer_order_status IN (1, 2)) as wwo ON wwo.servicer_id = wr.app_userid
WHERE
wr.role_type = 25
AND wr.app_userid IN ("4704c979aae04054b1c70cd0432faf64", "c8aa43d244e04773af31f1f3846eb8a3")
AND wr.is_dwline = 0
AND wwo .is_delete = 0
GROUP BY
wr.app_userid ;
查询结果如下:
两条sql语句区别:在下面的sql语句条件中有两个表的条件。即当你在条件中插入左关联的表字段的条件时,实际上是跟内连接的查询效果一样。要是想达到左连接的效果,条件就只能是主表的条件。
注意:聚合函数count()的三种用法:
1.COUNT(expr)
返回SELECT语句检索到的行中非NULL值的数目。
若找不到匹配的行,则COUNT() 返回 0 。
2.COUNT(*)
COUNT(*) 的稍微不同之处在于,它返回检索行的数目, 不论其是否包含 NULL值。
SELECT 从一个表中检索,而不检索其它的列,并且没有 WHERE子句时, COUNT(*)被优化到最快的返回速度。例如:
mysql> SELECT COUNT(*) FROM student;
这个优化仅适用于 MyISAM表, 原因是这些表类型会储存一个函数返回记录的精确数量,而且非常容易访问。对于事务型的存储引擎(InnoDB, BDB), 存储一个精确行数的问题比较多,原因是可能会发生多重事物处理, 而每个都可能会对行数产生影响。
3.COUNT(DISTINCT expr,[expr...])
返回不同的非NULL值数目。
若找不到匹配的项,则COUNT(DISTINCT)返回 0 。
mysql> SELECT COUNT(DISTINCT results) FROM student;
在MySQL中, 你通过给定一个表达式列表而获取不包含NULL 不同表达式组合的数目。在标准 SQL中,你将必须在COUNT(DISTINCT ...)中连接所有表达式。