求一个java mysql 查询思路

表结构类似这样,需要导出图二这样结构的excel,应该怎么去做这个... 表结构类似这样 ,需要导出图二这样结构的excel,应该怎么去做这个 展开
 我来答
澈丶233
2022-08-19 · TA获得超过169个赞
知道小有建树答主
回答量:446
采纳率:94%
帮助的人:114万
展开全部

其实我也没有啥好办法,我甚至推荐你使用楼上说的方法,直接select * 将数据全部查出后,在service中用java处理数据更加方便。

如果要强行使用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表测试数据为:

运行结果为:

pieryon
2022-08-19 · 知道合伙人数码行家
pieryon
知道合伙人数码行家
采纳数:14410 获赞数:166879
获取软件设计师高级职称 万达金融最佳创新奖

向TA提问 私信TA
展开全部
先把表中的数据查询到一个集合中,然后利用for循环,处理成excel每一列需要的格式就可以了。在java中处理字符串比mysql中容易的多。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式