首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CONCAT内的GROUP_CONCAT

CONCAT内的GROUP_CONCAT
EN

Stack Overflow用户
提问于 2018-11-28 14:43:59
回答 1查看 47关注 0票数 0

数据库层次结构如下

  • 学生名
    • 分配给每个学生的费用列表
      • 每笔费用的奖学金名单

作为结构,预期产出是

学生姓名-费用->奖学金1,Scholarship2

代码语言:javascript
复制
Karan-1.Annual Fee->Economic Scholarship,Incapable Scholarship,2.Monthly Fee 

但我得到的是

学生姓名-费用->奖学金1,学生姓名-费用->奖学金2

代码语言:javascript
复制
Karan-1.Annual Fee->Economic Scholarship,1.Annual Fee->Incapable Scholarship,2.Monthly Fee

这里面怎么了?虽然我在嵌套CONCAT,但没有得到预期的输出

代码语言:javascript
复制
CONCAT(student.en_ttl,'-',GROUP_CONCAT(DISTINCT fee.id,'.',fee.en_ttl,
    COALESCE(CONCAT('->',sch.en_ttl),''))) AS fee

SQL Fiddle

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-28 14:46:43

您基本上需要两个级别的GROUP BY。因此,我们需要在这里使用一个派生表。第一个子查询将在fee级别进行聚合;然后第二个级别将这些费用详细信息聚合到student级别。

此外,在更新的(和ANSI兼容的)版本的MySQL中,您需要确保SELECT子句中的任何非聚合列也应该在GROUP BY子句中。

查询

代码语言:javascript
复制
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;

结果

代码语言:javascript
复制
| fee                                                                  |
| -------------------------------------------------------------------- |
| Karan-1.Annual->Economic Scholarship,Incapable Scholarship,2.Monthly |

关于DB Fiddle的看法

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53522029

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档