簡體   English   中英

CONCAT中的GROUP_CONCAT

[英]GROUP_CONCAT within CONCAT

數據庫的層次結構如下

  • 學生姓名
    • 分配給每個學生的費用清單
      • 分配給每項費用的獎學金列表

作為結構,預期輸出為

學生姓名-費用->獎學金1,獎學金2

Karan-1.Annual Fee->Economic Scholarship,Incapable Scholarship,2.Monthly Fee 

但是我得到的是

學生姓名-費用->獎學金1,學生姓名-費用->獎學金2

Karan-1.Annual Fee->Economic Scholarship,1.Annual Fee->Incapable Scholarship,2.Monthly Fee

這里有什么問題? 雖然我嵌套了CONCAT ,但是沒有得到預期的輸出

CONCAT(student.en_ttl,'-',GROUP_CONCAT(DISTINCT fee.id,'.',fee.en_ttl,
    COALESCE(CONCAT('->',sch.en_ttl),''))) AS fee

SQL小提琴

您基本上需要兩個級別的GROUP BY 因此,我們將需要在此處使用派生表。 第一個子查詢將在fee級別匯總; 然后第二級將在student級別匯總這些費用詳細信息。

另外,在較新的(和ANSI SQL兼容)版本的MySQL中,您需要確保SELECT子句中任何未聚合的列也應在GROUP BY子句中。

詢問

SELECT
  CONCAT(stud_ttl,'-',GROUP_CONCAT(CONCAT(fee_det, COALESCE(CONCAT('->',fee_sch), '')))) AS fee
FROM 
(
  SELECT  student.ttl AS stud_ttl, 
        CONCAT(fee.id,'.',fee.ttl) AS fee_det,   
        Group_concat(DISTINCT sch.ttl) AS fee_sch 
  FROM   inv_id
       JOIN student
         ON student.id = inv_id.std
       JOIN inv_lst
         ON inv_lst.ftm = inv_id.ftm
       JOIN fee
         ON fee.id = inv_lst.fee
       JOIN sec_fee
         ON sec_fee.fee = fee.id
            AND sec_fee.cls = student.cls
            AND sec_fee.sec = student.sec
       LEFT JOIN std_sch
              ON std_sch.std = student.id
       LEFT JOIN sec_sch
              ON sec_sch.sch = std_sch.sch
                 AND sec_sch.fee = fee.id
       LEFT JOIN sch
              ON sch.id = sec_sch.sch
  GROUP  BY student.ttl, fee_det, fee.ttl
) dt
GROUP BY stud_ttl;

結果

| fee                                                                  |
| -------------------------------------------------------------------- |
| Karan-1.Annual->Economic Scholarship,Incapable Scholarship,2.Monthly |

在數據庫小提琴上查看

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM