Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >不带子查询的分组列分组

不带子查询的分组列分组
EN

Stack Overflow用户
提问于 2019-02-26 08:05:53
回答 3查看 68关注 0票数 2

我认为用一个例子可以更容易地解释这一点,所以假设我们有这样一个数据库:

  • 第一个表是Interventions,它存储Id和它需要的任何东西。
  • 第二个是Doctors
  • 第三个是Tools
  • 第四个是N表,它将每次干预与其所有的医生匹配,我们称之为DoctorsOnInterventions
  • 第五个表是另一个N表,它匹配在每次干预中使用的每个工具,我们称之为ToolsOnInterventions

好吧,现在我们可以:

代码语言:javascript
运行
AI代码解释
复制
SELECT InterventionId, STRING_AGG(Doctors.Name, ', ')
FROM Interventions
INNER JOIN Doctors ON Doctors.Id = DoctorsOnInterventions.DoctorId
GROUP BY Intervention.Id, Doctors.Id;

并得到:

代码语言:javascript
运行
AI代码解释
复制
+-----------------+------------+
| InterventionId  |  Doctors   |
+-----------------+------------+
|               1 | Tom, John  |
|               2 | Tom, Homer |
+-----------------+------------+

但是我们需要增加另一个专栏,就像医生一样,但是在干预中使用的工具是这样的:

代码语言:javascript
运行
AI代码解释
复制
+-----------------+------------+-----------------+
| InterventionId  |  Doctors   |      Tools      |
+-----------------+------------+-----------------+
|               1 | Tom, John  | Scalpel, Hammer |
|               2 | Tom, Homer | Hammer, Bulb    |
+-----------------+------------+-----------------+

将前面的代码包装在子查询上,然后再创建另一个group by是很容易的,但是我想知道是否有更正确的方法来实现这一点,因为我的数据库表有几十个列。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-02-26 10:25:23

代码语言:javascript
运行
AI代码解释
复制
SELECT InterventionId, STRING(Doctors.Name, ', '),STRING(Tools.name,',')
FROM Interventions
INNER JOIN Doctors ON Doctors.Id = DoctorsOnInterventions.DoctorId 
INNER JOIN Tools on tools.id = ToolsOnInterventions.toolsid
GROUP BY Intervention.Id, Doctors.Id, tools.id; 
票数 0
EN

Stack Overflow用户

发布于 2019-02-26 08:13:30

您可以使用string_agg()。我建议使用子查询;可以使用apply

代码语言:javascript
运行
AI代码解释
复制
SELECT i.*, d.doctors, t.tools
FROM Interventions i OUTER APPLY
     (SELECT STRING_AGG(d.name, ',') as doctors
      FROM DoctorsOnInterventions doi JOIN
           Doctors d
           ON d.Id = doi.DoctorId
      WHERE doi.interventionId = i.id
     ) d OUTER APPLY
     (SELECT STRING_AGG(t.name, ',') as tools
      FROM ToolsOnInterventions toi JOIN
           Tools t
           ON t.id = toi.ToolId
      WHERE toi.interventionId = i.id
     ) t ;

在Server的旧版本中,可以使用字符串连接的FOR XML PATH方法。

票数 0
EN

Stack Overflow用户

发布于 2019-02-26 08:19:08

我想你需要另一张桌子。

表式干预

代码语言:javascript
运行
AI代码解释
复制
+-----------------+------------+
| InterventionId  |  Doctors   |
+-----------------+------------+
|               1 | Tom, John  |
|               2 | Tom, Homer |
+-----------------+------------+

表工具

代码语言:javascript
运行
AI代码解释
复制
+-----------------+----------------+
| InterventionId  |  Doctors       |
+-----------------+----------------+
|               1 | Scalpel, Hammer|
|               2 | Hammer, Bulb   |
+-----------------+----------------+

表Interventions_tool ()

代码语言:javascript
运行
AI代码解释
复制
+-----------------+------------+
| InterventionId  |  ToolId    |
+-----------------+------------+
|               1 | 1          |
|               2 | 2          |
+-----------------+------------+

查询将是

代码语言:javascript
运行
AI代码解释
复制
SELECT InterventionId, STRING(Doctors.Name, ', ')
FROM Interventions I WITH (NOLOCK)
INNER JOIN Doctors D WITH (NOLOCK) ON D.Id = I.DoctorId
INNER JOIN Interventions_tool IT WITH (NOLOCK) ON I.Id = IT.ToolId
GROUP BY I.Id, D.Id;

+-----------------+------------+-----------------+
| InterventionId  |  Doctors   |      Tools      |
+-----------------+------------+-----------------+
|               1 | Tom, John  | Scalpel, Hammer |
|               2 | Tom, Homer | Hammer, Bulb    |
+-----------------+------------+-----------------+
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54889632

复制
相关文章
mysql分组查询
group by (1) group by的含义:将查询结果按照1个或多个字段进行分组,字段值相同的为一组 (2) group by可用于单个字段分组,也可用于多个字段分组 select * from employee; +------+------+--------+------+------+-------------+ | num | d_id | name | age | sex | homeaddr | +------+------+--------+------+------+
Java学习123
2018/05/16
3.9K0
MongoDB分组查询
MongoDB分组查询 设置显示要查询的列 显示 device_id,device_name,online_status,video_diag_time db.getCollection('vqd_result_his').find({},{device_id:1,device_name:1,online_status:1,video_diag_time:1}) 不显示 device_id,其他都显示 db.getCollection('vqd_result_his').find({},{device_i
编程随想曲
2022/04/21
2.1K0
MySQL | 分组查询的应用
FROM -> WHERE -> GROUP BY -> SELECT -> ORDER BY -> LIMIT
Zkeq
2022/05/18
4.1K0
MySQL | 分组查询的应用
分组后合并分组列中的字符串如何操作?
后来他自己参考月神的文章,拯救pandas计划(17)——对各分类的含重复记录的字符串列的去重拼接,也写出来了,如图所示。
前端皮皮
2022/08/17
3.3K0
分组后合并分组列中的字符串如何操作?
八、Django分组查询
你可以组合& 和| 操作符以及使用括号进行分组来编写任意复杂的Q 对象。同时,Q 对象可以使用~ 操作符取反,这允许组合正常的查询和取反(NOT) 查询:
Dreamy.TZK
2020/04/09
6650
Mysql约束、分组查询
主键其实只能有一个, 如果在图形界面当中选择多个字段作为主键, 那么程序会自动帮我们创建联合主键
友儿
2022/09/28
3.7K0
PGSQL分组查询报错
sql语句SELECT cname, wmname, MAX(avg) FROM makerar GROUP BY cname;
java攻城狮
2020/10/10
4K0
关于 Oracle 分组查询
COUNT()(个数)、SUM()(求和)、AVG()(平均)、MAX()(最大值)、MIN()(最小值)。
星哥玩云
2022/08/17
6200
Pandas基础:列方向分组变形
但是我发现大部分人在做这个题的时候,代码写的异常复杂。所以我建议你也不要直接看我的代码,而是先思考一下,你会怎么解决这个问题。
朱小五
2021/02/22
1.4K0
Pandas基础:列方向分组变形
mysql连接查询与分组查询
假设两张表 user: id name dept_id dept: id dept_name
leobhao
2022/06/28
3.4K0
oracle基础|oracle分组的用法|oracle分组查询|group by的使用
所谓组查询即将数据按照某列或者某些列相同的值进行分组,然后对该组的数据进行组函数运用,针对每一组返回一个结果。 tips: 1.组函数可以出现的位置: select子句和having 子句 2.使用group by 将将行划分成若干小组。 3.having子句用来限制组结果的返回。
小小鱼儿小小林
2021/10/26
5.8K0
按照A列进行分组并计算出B列每个分组的平均值,然后对B列内的每个元素减去分组平均值
前几天在Python星耀交流群有个叫【在下不才】的粉丝问了一个Pandas的问题,按照A列进行分组并计算出B列每个分组的平均值,然后对B列内的每个元素减去分组平均值,这里拿出来给大家分享下,一起学习。
前端皮皮
2022/08/17
3K0
按照A列进行分组并计算出B列每个分组的平均值,然后对B列内的每个元素减去分组平均值
mysql 分组查询和统计
统计一些数据, 分别统计 每个EventNo 在某段FlowNo内的: Coin数, 记录数, 本Event完成的Uid数(同个Uid同个EventNo只记一次)
超级大猪
2019/11/22
3.9K0
复杂sql分组查询 ( pivot)
      一个数据表里面字段有年、月、日、金额、支付方式等字段,然后现在想写个sql语句,把每一天的每种支付方式金额(支付方式有多重)排在同一行,
tandaxia
2018/09/27
3.5K0
复杂sql分组查询 ( pivot)
MySQL(八)子查询和分组查询
例如:select user_id from usertable where mobile_no in (select mobile_no from mobile where mobile_id = '10086');
allsmallpig
2021/02/25
3.9K0
sql sever分组查询和连接查询
分组查询 select 查询信息 from 表名 where 条件 group by 按照列分组(可多个 ,隔开) order by 排序方式 (查询信息如果列名和聚合函数同时出现,要么在聚合函数中出现,要么就使用分组进行查询) having 条件    分组筛选(一般和group by连用,位置在其后) where:用来筛选from子句指定的操作所产生的行 group by:用来分组where子句输出 having:用来从分组的结果中筛选行 1.分组查询是针对表中不同的组分类统计和输出的 2.having
房上的猫
2018/03/14
2.2K0
mysql-查询分组的最新数据
字段:id, student_id, name, dt, height, weight
用户8126523
2022/11/10
3K0
高级SQL查询-(聚合查询,分组查询,联合查询)[通俗易懂]
当遇到常见的统计总数、计算平局值等操作,可以使⽤聚合函数来实现,常见的聚合函数有:
全栈程序员站长
2022/09/05
4.4K0
Oracle中的分组查询与DML
a) 当表格的每一列都要插入数据时, 可以省略列名不写. 需 要保证值的顺序和列的顺序一致.
时间静止不是简史
2020/07/24
1.3K0
点击加载更多

相似问题

带子查询的Django分组查询集

11

Linq group by带子分组

21

带子查询的子句与id分组连接的错误1054

21

带子查询的子句中使用的非分组字段

13

用带子句的甲骨文分组

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文