mysql多表查詢分組統計

表結構:

課程表t_lrm_course

講師表t_lrm_lecturer

課程與講師的關聯表t_lrm_course_lecturer

目錄表t_lrm_catalog

課程與目錄的關聯表t_lrm_course_catalog

用戶表t_osm_user_info

課程授權表t_lrm_authority_user

需求:

需要查詢出每個課程對應的講師、目錄和用戶的信息。

要求按課程分條展示。

SQL語句:

select GROUP_CONCAT(DISTINCT(c.catalog_name) SEPARATOR ',') 'catalog_name',a.course_code,
       a.course_name,a.school_time,
       case when a.course_type='online' then a.period when a.course_type='face2face' then 
       CONCAT(a.period,case a.period_unit when 'day' then '天' when 'hour' 
       then '小時' when 'minute' then '分鍾 end) end 'period' , 
       a.school_location,a.credit,
       GROUP_CONCAT(DISTINCT(case d.is_speaker when 1 then e.lecturer_name else '' end) 
       SEPARATOR '') 'speaker' ,
       GROUP_CONCAT(DISTINCT(case d.is_speaker when 0 then e.lecturer_name else '' end) 
       SEPARATOR ' ') 'other_lecturer' ,
       a.cost,a.course_source,
       case when INSTR(a.device_type,'PC') >0 then '可' else '不可' end  'pc_device_type',
      case when INSTR(a.device_type,'MOBILE') >0 then '可' else '不可' end 'mobile_device_type',
       case a.credit_requirement when 'finishCourse' then '完成課程' when 'gradePassed' 
       then '考試成績通過' end 'credit_requirement',
       GROUP_CONCAT(DISTINCT(g.user_name) SEPARATOR ',') 'authority_user' ,
       case a.open_type when 'partOpen' then '部分開放' when 'allOpen' then '全部開放' 
       when 'close' then '不開放' end 'open_type'
from t_lrm_course a
left join t_lrm_course_catalog b on a.course_id = b.course_id
left join t_lrm_catalog c on c.catalog_id = b.catalog_id
left join t_lrm_course_lecturer d on d.course_id = a.course_id
left join t_lrm_lecturer e on e.lecturer_id = d.lecturer_id
left join t_lrm_course_authority f on f.course_id = a.course_id
left join t_osm_user_info g on g.user_id = f.user_id
where 1=1 and a.course_id = '82977f40749b431fbef22e6356dea087'
and a.course_type='face2face'
group by a.course_id;


備注:

其中使用了mysql的多個函數:

  1. group_concat

  2. case when then end

  3. instr

更多相關文章
  • 這是我的代碼:前提是做了一個view:att_sumbase首先分開統計每天的中午.下午飯點人數,這時需要分別去除中午和下午重複打卡的人.用了記錄集的交,嵌套select的知識.注意不能直接使用union,這裏只能使用union all,因爲union會去掉重複記錄,一個員工上午吃了,下午也吃了,u ...
  • 相信分頁查詢對于很多開發者來說都是司空見慣的事情,首先按照查詢條件搜索出分頁列表數據和總的記錄數,獲取總的記錄數一般是:select count(1) as total from xxx where ..........這沒有問題,但是如果查詢的條件有分組group by那這個時候獲取總數就有問題了 ...
  •         create_time時間格式         SELECT DATE_FORMAT(create_time,'%Y%u') weeks,COUNT(id) COUNT FROM role GROUP BY weeks;         SELECT DATE_FORMAT(crea ...
  • void Main() { int[] comparValue = { 11, 22, 11, 11, 33, 11, 22 }; var query = (fromnumin ( fromnumberin comparValue group numberbynumberinto g select ...
  • ? 基本常用查詢 --select select * from student; --all 查詢所有 select all sex from student; --distinct 過濾重複 select distinct sex from student; --count 統計 select c ...
  • 一.檢索單個對象      Query和Criteria都提供了返回單個對象的方法uniqueResult().先調用setMaxResult(1)方法,把最大檢索數目設爲1,在調用uniqueResult()方法.      Hx hx = (Hx)session.createQuery(&quo ...
  • 下面具體講講簡單的JOIN的用法了.首先我們假設有2個表A和B,他們的表結構和字段分別爲:表A:IDName1Tim2Jimmy3John4Tom表B:IDHobby1Football2Basketball2Tennis4Soccer1.  內聯結:Select A.Name, B.Hobby fr ...
  • 在mysql中查詢5條不重複的數據,使用以下:1 SELECT * FROM `table` ORDER BY RAND() LIMIT 5 就可以了.但是真正測試一下才發現這樣效率非常低.一個15萬余條的庫,查詢5條數據,居然要8秒以上 搜索Google,網上基本上都是查詢max(id) * ra ...
一周排行