效果圖
要查詢出如上圖的效果
知識點.
1.多表巢狀查詢.
2.輸出查詢結果,group_concat函式
3.關聯查詢
select t1.學校,
case
when t1.年級 = 2017 then
'1年級'
when t1.年級 = 2016 then
'2年級'
when t1.年級 = 2015 then
'3年級'
when t1.年級 = 2014 then
'4年級'
when t1.年級 = 2013 then
'5年級'
when t1.年級 = 2012 then
'6年級'
else
'錯誤'
end "年級",
t1.班級,s1.總計'全班人數',count(if(isnull(so.search),t1.姓名,null))'未交人數',
case when isnull(group_concat(if(isnull(so.search),t1.姓名,null))) then '已交齊' else group_concat(if(isnull(so.search),t1.姓名,null)) end '未交費學生'
from
(
select
u.tel "監護人手機號",
u.id,
si.學校,
si.姓名,
si.識別碼,
si.年級,
si.班級
from
(
select
s.name "學校",
stu.studentname "姓名",
stu.studentid "識別碼",
stu.studentsession "年級",
stu.studentclass "班級"
from
met_student stu,
met_school s
where
substring(stu.studentid, 1, 6) = s.activation_code
and s.name like '%貴陽市第二十四中學%'
order by stu.studentsession,stu.studentclass
)as si left join met_user u on si.識別碼 = u.studentid
-- and u.tel!=110,在多使用者繫結同一識別碼時,將額外的使用者tel欄位新增110作為標識,以排除重複人員。
and u.tel!=110 ) as t1 left join met_shopv2_order so on t1.id=so.uid
andso.search like '%五月份%'
and so.state in (2,4) ,
(select
count(stu.studentname)"總計",
stu.studentsession "年級",
stu.studentclass "班級"
from met_student stu,met_school s
where substring(stu.studentid, 1, 6) = s.activation_code
and s.name like '%貴陽市第二十四中學%'
group by stu.studentsession,stu.studentclass) as s1
where s1.年級=t1.年級 and s1.班級=t1.班級
group by t1.年級,t1.班級
order by t1.年級,t1.班級
記一次SQL優化
問題發生在關聯主表a 4w資料量 和副表b 4w資料量 關聯欄位都是openid 當時用的是 left join 直接跑sql,卡死 伺服器也是差 優化1 改left join 為join,兩者區別就是left join查詢時已主表為依據,該是幾條就幾條 就算副表沒有關聯的資料 join如果副表沒有...
記一次複雜查詢
專案中有乙個需求,查出使用者取出,充值次數,金額,使用者名稱,金幣的總量和每局遊戲的盈虧等做乙個統計,而他們分布在個表中,分別是使用者表,使用者取出表,使用者充值表,每局遊戲表中。首先想到的就是要分組查詢,group by user.userid.因為有的使用者有充值記錄但不一定有取出記錄,所以需要...
記一次postgresql查詢優化
一 場景介紹 1 需求 根據schema 1中多表聯查結果,對相應schema 2中資料進行刪除操作。2 表結構 模式表名 表結構schema 1 table 1 id varchar 32 pk主鍵 table 2 id varchar 32 pk主鍵 table 1 id varchar 32 ...