扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
其实我也没有啥好办法,我甚至推荐你使用楼上说的方法,直接select * 将数据全部查出后,在service中用java处理数据更加方便。
创新互联建站是专业的奈曼网站建设公司,奈曼接单;提供网站设计制作、成都网站建设,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行奈曼网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!
如果要强行使用sql查出来,我这里写了这么一段:
首先因为是同一张表,根据不同条件将结果拼接在一起,我能想到的就是用left join,我按照不同条件将数据分成如下几段:
a段:姓名段,作为left join的主表,只有姓名;
b段:吃了早餐段;
c段:没吃早餐段;
d段:吃了晚餐段;
e段:没吃晚餐段;
f段:吃了饭段;
g段:没吃饭段。
除了a段以外,其他段都是根据自身条件
SELECT
name,
count(*) count,
sum(weight) sum,
然后依次左连接将所有段通过姓名连接到一起,最终组成的sql语句如下:
SELECT
a.name 姓名,
ifnull(b.count, 0) 吃了早餐的次数,
ifnull(b.sum, 0) 吃了早餐的重量,
ifnull(c.count, 0) 没吃早餐的次数,
ifnull(c.sum, 0) 没吃早餐的重量,
ifnull(d.count, 0) 吃了晚餐的次数,
ifnull(d.sum, 0) 吃了晚餐的重量,
ifnull(e.count, 0) 没吃晚餐的次数,
ifnull(e.sum, 0) 没吃晚餐的重量,
ifnull(f.count, 0) 吃了饭的次数,
ifnull(f.sum, 0) 吃了饭的重量,
ifnull(g.count, 0) 没吃饭的次数,
ifnull(g.sum, 0) 没吃饭的重量
FROM
(SELECT DISTINCT name
FROM T) a LEFT JOIN
(SELECT
name,
count(*) count,
sum(weight) sum
FROM T
WHERE type = 0 AND status = 0
GROUP BY name) b ON a.name = b.name
LEFT JOIN
(SELECT
name,
count(*) count,
sum(weight) sum
FROM T
WHERE type = 0 AND status = 1
GROUP BY name) c ON a.name = c.name
LEFT JOIN
(SELECT
name,
count(*) count,
sum(weight) sum
FROM T
WHERE type = 1 AND status = 0
GROUP BY name) d ON a.name = d.name
LEFT JOIN
(SELECT
name,
count(*) count,
sum(weight) sum
FROM T
WHERE type = 1 AND status = 1
GROUP BY name) e ON a.name = e.name
LEFT JOIN
(SELECT
name,
count(*) count,
sum(weight) sum
FROM T
WHERE status = 0
GROUP BY name) f ON a.name = f.name
LEFT JOIN
(SELECT
name,
count(*) count,
sum(weight) sum
FROM T
WHERE status = 1
GROUP BY name) g ON a.name = g.name
T表结构为:
(因为以name字段进行连接,type和status作为条件,建议以该三个字段作为索引)
T表测试数据为:
运行结果为:
SELECT语句的查询结果是记录的集合,多个SELECT语句的结果可进行集合操作
分类:
案例:查询中国的用户与其他年龄小于18岁的用户
并集
交集
差集
多表查询是指基于两个和两个以上的表或是视图的查询.在实际应用中,查询单个表可能不能满足你的需求,(如显示sales部门位置和其员工的姓名),这种情况下需要使用到(dept表和emp表)
自连接是指在同一张表的连接查询
select * from emp where empno=(select mgr from emp where ename='ford');
子查询是指嵌入在其它sql查询语句中的select语句,也叫嵌套查询
单行子查询是 指只返回一行数据的子查询语句
select * from emp where deptno=(select deptno from emp where ename='smith');
多行子查询指返回多行数据的子查询 使用关键字 in
如果我们的一个子查询,返回的 结果是多列,就叫做列子查询
合并多个select语句的结果,可以使用集合操作符 union,union all
select *from emp where name in('张三','李四','王五');
如果()里面的是变量,可以用数组,只不过数组要处理一下
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流