sql - SQL - 来自 GROUP BY 的字段列表
问题描述
我必须编写一个 SQL 查询,并且我正在使用以下 SQL 表:
diet (id, name)
id : primary key
patient (id, familyname, firstname)
id : primary key
choice (idpatient, iddiet, optionnal, medical)
idpatient, iddiet : primary key
idpatient : foreign key in ref. to id from patient
idregime : foreign key in ref. to id from diet
医疗 饮食是强制性的(真) 可选的 饮食是愿望(真)
我需要编写一个 SQL 查询来为每个患者选择(id、familyname、firstname)、饮食列表(name),并为每个患者选择医疗或可选。
我已经开始编写这个查询,但我知道 GROUP BY 应该包含 SELECT 中提到的所有字段,也应该在 GROUP BY 中提到。所以我无法从饮食名称或选择(医疗/愿望)中添加字段。
SELECT p.idpatient AS “id”, p.familyname AS “name”, p.firstname AS “firstname”
FROM choice AS c
INNER JOIN diet AS r
ON r.id = c.iddiet
INNER JOIN patient AS p
ON c.idpatient = p.id
GROUP BY p.idpatient, p.familyname, p.firstname
ORDER BY p.familyname, p.firstname
如何使用 GROUP BY 更进一步?也许我不应该使用 GROUP BY 而只使用 JOINS。
对不起,我迷路了。
谢谢你的帮助
解决方案
在 MySQL 和 SQLite 中,可以像这样使用 GROUP_CONCAT()
SELECT p.idpatient AS id,p.familyname AS family_name, p.firstname AS first_name,
GROUP_CONCAT( d.name ) AS diets
FROM choice AS c
INNER JOIN diet AS d
ON d.id = c.iddiet
INNER JOIN patient AS p
ON c.idpatient = p.id
GROUP BY p.idpatient, p.familyname, p.firstname
ORDER BY p.familyname, p.firstname
这个想法来自如何在一个逗号分隔值中获取列值- 在这里您还可以找到其他 DBMS 产品的示例。
您可以通过在https://sqliteonline.com/上运行以下语句来测试 GROUP_CONCAT() 的行为
INSERT INTO demo (ID,Name,Hint)
VALUES(21,'SQL Online','Test for GROUP_CONCAT')
SELECT Name,GROUP_CONCAT( hint ) AS hints
FROM demo
GROUP BY name
推荐阅读
- react-native - 反应原生渲染 foreach 循环
- python - tensowflow keras - model.predict 给出所有相同的输出
- bash - 通过 docker 无法 cd 进入现有目录的 bash 脚本
- python - 为什么 python 允许在不存在的索引处插入,但在访问时会抛出错误?
- c# - 如何将字符串转换为 char*
- amazon-web-services - 使用 IAM 角色的 KMS 密钥进行跨账户 s3 访问
- xamarin.forms - 如何使用 SKTouchEventArgs 通过点击在 Skiasharp 画布上绘图
- spring - Spring Security 在通过 html 的模型页面登录时出现错误
- javascript - 我无法获得从单元格 b2 输入的值
- java - 是否需要使用 PGP 签名签署 JAR 文件才能在 Maven 中心发布?