-
SELECT g.user_name,MAX(k.kills),k.time FROM `group` AS g JOIN kills AS k ON g.id=k.user_id GROUP BY g.user_name ORDER BY g.user_name;
SELECT g.user_name,k.kills,k.time FROM `group` AS g JOIN kills AS k ON g.id=k.user_id JOIN kills AS k1 ON g.id=k1.user_id GROUP BY g.user_name,k.kills HAVING k.kills=MAX(k1.kills) ORDER BY k.kills;
查看全部 -
Join类型
查看全部 -
join类型查看全部
-
截图SQL语句解析: 这个sql语句有三层 第一层:select count(*) from user_kills b WHERE b.user_id = a.user_id and a.kills <= b.kills; 这个语句其实是这样的:select * from user_kills b,user_kills a WHERE b.user_id = a.user_id and a.kills <= b.kills,也就是两个user_kills表进行遍历, 结果是孙悟空、猪八戒、沙僧每个人击杀人数数量的一个标识,比如猪八戒击杀了10人,标识是3,那么代表猪八戒一天所击杀的人数中比10个人大或等于的有3天,依此类推。 第二层:select user_id,timestr,kills,( select count(*) from user_kills b WHERE b.user_id = a.user_id and a.kills <= b.kills ) as cnt from user_kills a group by user_id,timestr,kills; 这层就是把孙悟空、猪八戒、沙僧每个人所击杀的不同的人数以及每个人数的标识都列出来,比如,孙悟空在2018-02-24这天杀了30人,标识是1代表这天杀的人是最多的。 第三层也就是截图的语句了,这个语句就是把user1表和第二层所得出的表用inner join进行查询,选出cnt<=2也就是排在前两位的数据。 这个sql语句其实也是不严谨的,比如如果猪八戒只有3天击杀数据,而其中两天的击杀数据一样,这个时候只会筛选出一条数据,因为相同击杀数据标识cnt等于4.查看全部
-
select A.1 A.2 B.1 B.2 from a.A cross join b.B 笛卡尔集查看全部
-
select A.1 A.2 B.1 B.2 from a.A full join b.B on a.1 =b.1 where a.2 = null and b.2 = null查看全部
-
select B.1 B.2 from a.A right join b.B on A.1=b.1( where A.2=b.2)查看全部
-
select A.1,B.2 from a left out join b on a.1=b.1 (where b.2=null)查看全部
-
inner join查看全部
-
join五兄弟查看全部
-
如何查询出四人组中打怪最多的日期? 其实这个问题是可以用分组来解决的。 语句如下: select a.user_name,b.timestr,max(b.kills) from user1 a inner join user_kills b on a.id = b.user_id GROUP BY a.user_name;查看全部
-
链接类型:内链接、全外连接、左连接、有链接、交叉连接查看全部
-
cross join语句查看全部
-
cross join查看全部
-
full join查看全部
举报
0/150
提交
取消