其實(shí)我也沒(méi)有啥好辦法,我甚至推薦你使用樓上說(shuō)的方法,直接select * 將數(shù)據(jù)全部查出后,在service中用java處理數(shù)據(jù)更加方便。
創(chuàng)新互聯(lián)建站是專業(yè)的奈曼網(wǎng)站建設(shè)公司,奈曼接單;提供網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站建設(shè),網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行奈曼網(wǎng)站開發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛(ài)的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!
如果要強(qiáng)行使用sql查出來(lái),我這里寫了這么一段:
首先因?yàn)槭峭粡埍恚鶕?jù)不同條件將結(jié)果拼接在一起,我能想到的就是用left join,我按照不同條件將數(shù)據(jù)分成如下幾段:
a段:姓名段,作為left join的主表,只有姓名;
b段:吃了早餐段;
c段:沒(méi)吃早餐段;
d段:吃了晚餐段;
e段:沒(méi)吃晚餐段;
f段:吃了飯段;
g段:沒(méi)吃飯段。
除了a段以外,其他段都是根據(jù)自身?xiàng)l件
SELECT
name,
count(*) ? ?count,
sum(weight) sum,
然后依次左連接將所有段通過(guò)姓名連接到一起,最終組成的sql語(yǔ)句如下:
SELECT
a.name 姓名,
ifnull(b.count, 0) 吃了早餐的次數(shù),
ifnull(b.sum, 0) ? 吃了早餐的重量,
ifnull(c.count, 0) 沒(méi)吃早餐的次數(shù),
ifnull(c.sum, 0) ? 沒(méi)吃早餐的重量,
ifnull(d.count, 0) 吃了晚餐的次數(shù),
ifnull(d.sum, 0) ? 吃了晚餐的重量,
ifnull(e.count, 0) 沒(méi)吃晚餐的次數(shù),
ifnull(e.sum, 0) ? 沒(méi)吃晚餐的重量,
ifnull(f.count, 0) 吃了飯的次數(shù),
ifnull(f.sum, 0) ? 吃了飯的重量,
ifnull(g.count, 0) 沒(méi)吃飯的次數(shù),
ifnull(g.sum, 0) ? 沒(méi)吃飯的重量
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表結(jié)構(gòu)為:
(因?yàn)橐詎ame字段進(jìn)行連接,type和status作為條件,建議以該三個(gè)字段作為索引)
T表測(cè)試數(shù)據(jù)為:
運(yùn)行結(jié)果為:
SELECT語(yǔ)句的查詢結(jié)果是記錄的集合,多個(gè)SELECT語(yǔ)句的結(jié)果可進(jìn)行集合操作
分類:
案例:查詢中國(guó)的用戶與其他年齡小于18歲的用戶
并集
交集
差集
多表查詢是指基于兩個(gè)和兩個(gè)以上的表或是視圖的查詢.在實(shí)際應(yīng)用中,查詢單個(gè)表可能不能滿足你的需求,(如顯示sales部門位置和其員工的姓名),這種情況下需要使用到(dept表和emp表)
自連接是指在同一張表的連接查詢
select * from emp where empno=(select mgr from emp where ename='ford');
子查詢是指嵌入在其它sql查詢語(yǔ)句中的select語(yǔ)句,也叫嵌套查詢
單行子查詢是 指只返回一行數(shù)據(jù)的子查詢語(yǔ)句
select * from emp where deptno=(select deptno from emp where ename='smith');
多行子查詢指返回多行數(shù)據(jù)的子查詢 使用關(guān)鍵字 in
如果我們的一個(gè)子查詢,返回的 結(jié)果是多列,就叫做列子查詢
合并多個(gè)select語(yǔ)句的結(jié)果,可以使用集合操作符 union,union all
select *from emp where name in('張三','李四','王五');
如果()里面的是變量,可以用數(shù)組,只不過(guò)數(shù)組要處理一下