重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
其实我也没有啥好办法,我甚至推荐你使用楼上说的方法,直接select * 将数据全部查出后,在service中用java处理数据更加方便。
我们提供的服务有:网站制作、网站设计、微信公众号开发、网站优化、网站认证、龙门ssl等。为1000+企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的龙门网站制作公司
如果要强行使用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表测试数据为:
运行结果为:
你好,很高兴回答你的问题。
分页有两种,一种是假分页。
就是一次性将数据全部查询出来,然后在展示的时候从这些数据(一般是集合)中取指定索引范围的数据。
另一种是真分页,也就是查询数据时只查询符合条件的数据中的一部分。比如mysql查询时使用limit。
如果有帮助到你,请点击采纳。
分页显示一般有两种实现方式:业务层分页、数据库层分页(以下会用到两个参数,提前说明下 page:请求第几页,size:每页显示多少条)
业务层分页:从数据库取出所有数据,然后通过传过来的page和size对所有数据截取,比如一共查了100条数据,保存在list里面,要求查询第2页,每页显示10条,则可以通过list属性,取100条数据 中的第11条到第20条,可通过遍历实现。
数据库层分页:数据库都会有分页函数(mysql 是limit函数,sqlServer是row_number()函数,可自行百度下)该方法是通过传过来的page和size在查询数据库时就开始分页,以mysql为例,查询第2页,每页显示10条,则sql语句是 ”select * from XX limit 10,10“(第一个10表示从下标为10开始查,第二个10是共读取10条)
性能肯定是第二种分页方式好,只要搞懂分页原理,想实现分页其实很简单,只要搞清楚分页是将多条数据中的某几条挑出来