記一次sql查詢

2021-08-19 15:45:00 字數 2101 閱讀 1530

效果圖

要查詢出如上圖的效果

知識點.

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 ...