left join +group by;总结 5C

SELECT v.name,COUNT(DISTINCT f.ID)AS family,COUNT(DISTINCT p.ID)AS person ,COUNT(DISTINCT pa.ID) AS man,COUNT(DISTINCT ps.ID)AS woman ,COUNT(DISTINCT c.id)AS car
FROM village AS v
LEFT JOIN family AS f ON f.villageID=v.ID AND f.building='3'
LEFT JOIN personnel AS p ON p.familyid=f.ID AND f.building='3'
LEFT JOIN personnel AS pa ON pa.familyid=f.ID AND pa.sex='男' AND f.building='3'
LEFT JOIN personnel AS ps ON ps.familyid=f.ID AND ps.sex='女' AND f.building='3'
LEFT JOIN car AS c ON c.familyid=f.ID AND f.building='3'
where  v.ID='d66cf963-2354-11e8-b8a0-f48e38f841f1'
GROUP BY f.building

已解决

0

9个回答

https://www.cnblogs.com/kerrycode/p/5935704.html
这篇帖子对join的各种用法讲解比较清晰,可以参考一下

0
SunnYmini
SunnYmini 如何避免重复
一年多之前 回复

直接把目前的结果作为视图 查询

select t.* , (男的数量+女的数量) as 和 from ( 你现在查出来的结果) t

0
qq_37461349
不喜欢吃猫的鱼 回复SunnYmini: 报啥错啊
一年多之前 回复
SunnYmini
SunnYmini 意思是从查询结果中再查询区分 ? 如果是单纯的查询嵌套 我试过 ,关联之后再嵌套我反正报错
一年多之前 回复

如何避免重复??????????关键是这么转化后如何避免误差

0

GROUP BY 后的条件不对

0

因为你用V.ID分组了,每一个组里都有几个男人或女人,把组里的男人数相加,女人数相加才是总人数

0

其实你不用改,group by后边用sex分组,就对了

0
SunnYmini
SunnYmini 这是求21个小区,每个小区,某楼栋有多少户家庭,家庭里多少个人,多少个人又分为男女各人数,还求家庭拥有汽车的数量; v.id是21个小区的主键id,都是跟小区关联,按照group by sex,还是错的,呜呜。。。。。。。。。。
一年多之前 回复

而且group by sex.只会显示小区里有家庭/人数/男女数据,如果这个小区没有人,那结果就不显示了,需要的结果是都显示

0

把你这里面涉及到的几张表的结构贴出来看看

0

根据前面的信息,推测你的几张表是相互关联的,看看下面的语句吧,应该可以正确获得你想要的结果

select v.name as 小区名称,ifnull(f.cnt,0) as 家庭数,ifnull(p.cnt,0) as 人员数,ifnull(pa.cnt,0) as 男人数,ifnull(ps.cnt,0) as 女人数,ifnull(c.cnt,0) as 汽车数
from village as v
left join (select villageID,count(1) cnt from family goup by villageID) as f on v.ID=f.villageID
left join (select xx1.villageID,count(1) cnt from
(select aa.ID as villageID,bb.ID as familyID,cc.id as personID,cc.sex
from village as aa
left join family as bb on aa.id=bb.villageID
left join personnel cc on cc.familyID=bb.id ) as xx1
group by xx1.villageID) as p on p.villageID=v.ID
left join (select xx2.villageID,count(1) cnt from
(select aa.ID as villageID,bb.ID as familyID,cc.id as personID,cc.sex
from village as aa
left join family as bb on aa.id=bb.villageID
left join personnel cc on cc.familyID=bb.id and cc.sex='男' ) as xx2
group by xx2.villageID) as pa on pa.villageID=v.ID
left join (select xx3.villageID,count(1) cnt from
(select aa.ID as villageID,bb.ID as familyID,cc.id as personID,cc.sex
from village as aa
left join family as bb on aa.id=bb.villageID
left join personnel cc on cc.familyID=bb.id and cc.sex='女' ) as xx3
group by xx1.villageID) as ps on ps.villageID=v.ID
left join (select xx4.villageID,count(1) cnt from
(select aa.ID as villageID,bb.familyID
from village as aa
left join family as bb on aa.id=bb.villageID
left join car cc on bb.id=cc.familyid) as xx4
group by xx4.villageID) as c on c.villageID=v.ID

0
SunnYmini
SunnYmini 回复SunnYmini: 只不过,personnel,car和family的ID相连,family的villageID与village的ID相联;
一年多之前 回复
SunnYmini
SunnYmini 溜枇,赞
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
SQL语言 group by 和 LEFT JOIN 关键字语句使用
MySql 语言 group by 和LEFT JOIN 关键字语句使用nn(1) GROUP BY 语句 : nGROUP BY 语句用于结合聚合函数,根据一个或多个列对结果集进行分组。 n语法:nnnnSELECT column_name, aggregate_function(column_name)nFROM table_namenWHERE column_name operator ...
mysql中高效查询(left join 和 group by),前提是加了索引
mysql中高效查询(left join 和 group by)
SQL中几个简单的函数:LEFT JOIN;COUNT遇上GROUP BY
据说是PM的必备技能的SQL,PM龄3年的我仍然菜鸟,今天开始用心学学
left join和group以及一些统计函数的探讨
关于left joinrn      数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。rn      在使用left jion时,on和where条件的区别如下:rnrn1、 on条件是在生成临时表时使用的条件,它不管on中的条件是否为真(但是关联的其他表格的数据会为null),都会返回左边表中的记录。rn2、where条件是在临时表生成好后,再对
连接(join)group by、order by、where的执行顺序
连接(join)group by、order by、where的执行顺序一、group byngroup by主要用于分组,达到对数据的分类更加精确。 ngroup by中存在的列必须是有效的列(即为表的列字段)。同时若在select 中存在,必须在group by中列出,不能使用别名。 ngroup by必须位于where 后,order by前;此外一般与order by一起使用。 ngro
mysql使用GROUP_CONCAT和left join进行联合多表查询,(处理多表查询时,某表数据为空null值处理以及结果集多条数据展示在一行的处理)
mysql使用GROUP_CONCAT和left join进行联合多表查询nn(处理多表查询时,某表数据为空null值处理以及结果集多条数据展示在一行的处理)nn文章是按照需求分析以及跳坑顺序情景再现的顺序来写的.nn如果你不是小白,你可以直接跳到最后看一下代码看个思路.nn有三个表,分别是nnbuyer表,记录用户的信息nnnnbuyerstags表,记录用户有哪些标签,标签是谁赋予的.是一个用...
left join联合的时候去重
SELECT * from t_ss;nnSELECT * from t_kk;nnSELECT * from t_ss s LEFT JOIN t_kk k on s.id=k.sidnn使用group by去重nSELECT * from t_ss s LEFT JOIN t_kk k on s.id=k.sid GROUP BY k.sid;nn或者nSELECT * from t_ss s...
join 与 group by问题后续
昨天的问题,的确在sql server上问题明显,可是同样的数据库、同样的表、同样的查询语句,它却可以在mysql上执行,对于sql server与mysql的区别我并不清楚,n下面写一下我对于这可问题的探索过程:n因为我是在github上照着别人练习的例子练习的,既然别人写的查询语句都贴上来了,肯定是运行成功了,于是我就想在mysql上试一试,还好我之前装了mysql。nnn下面是两个
由于LEFT JOIN错误使用导致的数据不一致问题
msyql语句执行顺序 n代码的执行顺序: nfrom... where...group by... having.... select ... order by... nhive 语句执行顺序 n大致顺序 nfrom... where.... select...group by... having ... order by...nnLEFT JOIN有一个作用就是用于去除表A中表B的数据,现在我...
sql执行规则
sql执行规则逻辑处理,left join ,where ,from ,group by
MySQL学习笔记:join速度特别慢引出的问题
今天整合数据时,出现关联速度超级慢的问题,过程如下:rn创建临时表:rnCREATE TABLE TMP1 AS SELECT ID,COUNT COUNT_1,AMNT AMNT_1 nFROM EXPORT_INFO WHERE S_ID=1;nnCREATE TABLE TMP2 AS SELECT ID,COUNT COUNT_2,AMNT AMNT_2 nFROM EXPORT WHER
成绩录入SQL语句 笛卡尔积 LEFT JOIN
select * from (select * from Student s,Course c ,(select distinct Year from Score) as y,(select distinct Term from Score) as term ) as dt left join Score s on dt.Studentid = s.Studentid and dt.Year =
LEFT JOIN 分组每组排序后的第一条
rn设定: rn合同表:A 唯一标识为ID,每个合同一个ID rn流程表:B 无唯一标识,合同审批流程每一步都生成一条 rnAppO_Values:对应合同表的ID, rnApp_Order: 对应审批步骤, rnUserID: 审批人IDrn需求 rn查询出所有合同表,及当前审批人rn思路 rnSELECT * A 然后 LEFT JOIN 流程表rn问题 rn每个合同查询出多条记录rn解决办法...
mysql sum join 多表统计求和时不正确的问题
但是我们发现,这个数据是错误的nn于是我想到了用 distinct  但是发现用不了nn于是又想到 group bynn出来的结果是下面这样的nnn发现统计只是分组统计,没达到所有行统计,而且统计的数据不正确nnn于是我写了下面的语句来查看结果,加多了一个count函数查看nn    SELECT s.oid,p.oid  AS poid,  SUM( priceCount) AS count_p...
【LEFT JOIN 实战记录】统计查询-问题明细指标查询
【LEFT JOIN 实战记录】统计查询-问题明细指标查询 n【LEFT JOIN 实战记录】统计查询-整改事项查询(多表联合查询+多次左连接字典表) n【LEFT JOIN 实战记录】统计查询-按主办处室区县查询纳入分析研判库 n【LEFT JOIN 实战记录】是否纳入市级预算项目概览界面 n【LEFT JOIN 入门级实践】项目表与组织表与人员表,其中人员存在上下级关系 n【LEFT JOIN
sql优化实战:把full join改为left join +union all(从5分钟降为10秒)
今天收到一个需求,要改写一个报表的逻辑,当改完之后,再次运行,发现运行超时。n因为特殊原因,无法访问客户的服务器,没办法查看sql的执行计划、没办法知道表中的索引情况,所以,尝试从语句的改写上来优化。n一、原始语句如下:nselect isnull(vv.customer_id,v.customer_id) as customer_id,n isnull(vv.business_date
如何使用LEFT JOIN实现多表查询
什么是LEFT JOIN请各位自行了解,废话不多说,先直接上三张表nn组织表(t_organization)nnnn部门表(t_department)nnnn用户表(t_user)nnnn逻辑是组织下面有部门,部门下面有用户,组织和部门通过organization_id字段关联,部门和用户通过department_id关联nn nn实现以下几种查询nn1.两张表的查询:nn查询所有组织信息以及下属...
MYSQL表连接(十二)LEFT JOIN
MySQL LEFT JOINMySQL的LEFT JOIN子句允许从两个或多个数据库表中查询数据。LEFT JOIN子句是SELECT语句的可选部分,该语句在FROM子句之后出现。假设我们打算从两个表:T1 和 T2 中查询数据。以下是连接两个表LEFT JOIN子句的语法:SELECT n T1.c1, T1.c2, T2.c1, T2.c2nFROMn T1n LE...
hql 语句:关联查询left join 和count连用
hql 语句:关联查询left join 和count
EF left join 条目数量统计
n var list = from k in context.KnowledgeqaUserDBn join m in context.MemberDBn on k.MemberId equals m.IDn into tempn ...
SQL left join 左表合并去重技巧总结
 建表:nnnCREATE TABLE `table1` (n `id` int(11) NOT NULL AUTO_INCREMENT,n `name` varchar(60) DEFAULT NULL,n `age` varchar(200) DEFAULT NULL,n `sponsor_id` varchar(20) DEFAULT NULL COMMENT '业务发起人',n ...
mysql两表联查 将数据count=0的也显示。使用了Left join 也实现不了。
不是只掌握了left join 就可以解决的问题!nn菜单表 :zc_dishnnnn消费记录表:zc_card_record_detail_2019nnnnnn需求:实时统计当天的销售菜品数量。nn错误做法:nnnn错误:我使用了left join,但是并没有将count=0的数据显示出来。nn原因:是添加了时间。但是不添加时间又统计的不是当天的。nn改进:nnnn仍然不正确!!!nn错误:...
MySQL中group by 与 order by 一起使用排序问题
假设有一个表:reward(奖励表),表结构如下:nnnnnCREATE TABLE test.reward (n id int(11) NOT NULL AUTO_INCREMENT,n uid int(11) NOT NULL COMMENT '用户uid',n money decimal(10, 2) NOT NULL COMMENT '奖励金额',n datatime dat...
Group By 和LEFT JOIN的问题
我有两个表rnrn表一:rnid Namern1 aarn2 bbrnrn表二:rnid Attrrn1 aa-1rn1 aa-2rnrn我想要的结果是rnid Name Attrrn1 aa aa-1rn2 bb nullrnrn即如果表二有的,就列出来一个,如果没有,就为空rnrn我这样写SQL语句,但是不对.请高手看看.rnrnSELECT 表1.id, 表1.Name,表2.AttrrnFROM 表1 LEFT OUTER JOIN 表2rn ON 表1.id = 表2.idrnGROUP BY 表1.idrnrn怎么不对啊.rn
遇到问题----mysql---同时使用left join和null会缺少数据
情况我们有一个复杂的查询语句 会多重组合嵌套。其中会使用WHERE ... IS NULL 以及 left join。结果发现会缺少一部分符合我们条件的数据。改成inner join后 又可以查询出来。原因推荐看这两个帖子:http://bbs.csdn.net/topics/390582391http://virusfu.iteye.com/blog/1734065抄录帖子如下:关于 “A LE
left join on后面条件失效
mysql left join on后面条件失效和解决方案
mysql left join 右表数据不唯一的情况解决方法
mysql left join 右表数据不唯一的情况解决方法
MySQL连表操作和GROUP_CONCAT函数的使用
在开发网站的时候,数据库操作是必须,复杂的网站有时要涉及到几张表的同时操作。以下简单讲解一下多表查询和GROUP_CONCAT函数的使用。例如有三张表 jd_role:角色表,jd_role_privilege:角色权限id关联表,jd_privilege:权限表,三张表的结构如下:rnrnrnrn1、要求查询每个角色拥有的权限:rn使用left join左外连进行连表操作:rnrnrn此时,就可
update left join 多表关联更新
UPDATE table_1 t1 left join table_2 t2 on t2.id = t1.tid SET t1.username = t2.uname  where t1.id>5;参考的例子如上,基于参考例子自己实践运用如下:UPDATE `shop_page` t1 LEFT JOIN `shop_list` t2 ON DATE='2018-04-12' SET t1....
mysql left join 无法使用上索引
mysql left join 的原则上有两点nnn左表为小表n右表的关联字段是索引nnn遇到的问题:右表(c)是大表,分别 有两个小表(a和b)nn当 a left join c 的时候可以使用上c的关联字段索引,nn但是b left join c 的时候无法使用上索引,全文搜索了,nn两个小表的结构表面看起来一样,后面使用 show full columns from [tables]nn发现...
Left Join 右表数据不唯一解决方法
A、B两表有关联,使用LEFT JOIN 进行连接查询,但如果B表符合条件的记录数大于1条,就会出现1:n的情况,这样left join后的结果,记录数会多于A表的记录数 。如下图,很尴尬是不是?rnrnrnrnrn解决方法:这种情况需要保证B表的符合条件的记录是空或唯一,我们可以使用group by来实现 。rnrnrnrnrn归根还是因为表的设计有问题或者表里面有垃圾数据导致的。
mysql多表left join 1对多的解决办法
一个表left join多个表并导出csv本身是很简单的事。但是主表的一列有多个值,一开始用逗号分隔保存数据,这样做的好处是方便应用程序处理,但是对于mysql来说这是anti-pattern的做法。果然,在写left join的时候无法实现一个field保存多ID,并跟关联表匹配输出csv文件。(尝试了find_in_set 只能输入一行)rr还是应该遵守RMDB的范式来设计DB,将多值的列,拆
left join 时数据反而会比左边表数据条数多
左表字段:右表字段=1:多时,左连接数据就会多于想要查找的数据,用group by解决n 
SQL组装工具类,轻松应对复杂查询条件的组装
SQL组装复杂查询条件,SELECT .. FROM .. (LEFT|RIGHT|INNER) JOIN .. ON .. WHERE .... GROUP BY .. HAVING .. ORDER BY .. LIMIT ..
关联查询总结,left join 和 inner join 区别和优化
left join 是做左外关联,主表内容都会显示;符合关联条件的附表内容才会显示出来。nninner join 是内关联,没有主表附表的概念;两个表中,同时符合关联条件的数据才会显示出来。nn nnleft join 是 left outer join 的简写形式。nnjoin 是 inner join 的简写形式。nn优化:nn大家都知道,sql尽量使用数据量小的表做主表,这样效率高,但是有时...
数据库左右链接
Left join , Right Join, Inner Join 的相关内容!Left join , Right Join, Inner Join 的相关内容!
Oracle数据库之外连接和分组查询:left,right,full join 和表连接
数据库开发时经常要编写过程来优化数据库的增删该查和一些简单的业务操作,或在java中调用,或定义job按时执行(如每天,每周,每月...的统计任务),其中查询操作最有可能面临性能瓶颈。n因此,我们通常希望(遇过按月查询几亿条数据的情况)查询操作能够尽可能地快,减少对数据量大的表查询次数将极大地提高数据库查询的效率。n使用left,right,full 和分组函数混搭将极大的提高查询效率,查询的
关于sql 多个left_join ,查询结果可作为表哦
select * from a left join b on a.abid = b.baid left join c on c.cbid = b.bcid nn把括号里面当成一个表的数据, 注意一定要别名 后面的a 就是这表的别名nnselect * from (select * form kk where id=2) a where type=2...
Hive Join的实现原理
JOINhive执行引擎会将HQL“翻译”成为map-reduce任务,如果多张表使用同一列做join则将被翻译成一个reduce,否则将被翻译成多个map-reduce任务。如: nhive执行引擎会将HQL“翻译”成为map-reduce任务,如果多张表使用同一列做join则将被翻译成一个reduce,否则将被翻译成多个map-reduce任务。 neg: nSELECT a.val, b.va
两个sql查询语句之间的左连接left join
代码如下:子查询内部也使用了左连接select a.id, a.thumbNail,a.name,a.marketPrice,a.memberPrice ,a.personName,a.status,a.recieveOrderDate,a.trackNumber,a.contact,a.reportSendDate,b.trackNumber,a.reportDownloadPath from 
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 大数据培训总结 云计算课程设计总结