如何通过SQL嵌套查询对多行结果集进行分组?
嘿,我看你手里有两个SQL查询语句,想要对结果集做分组处理对吧?先把你现有的代码整理成清晰的格式,方便咱们调整:
第一条查询语句
SELECT Patient.ID, Patient.Name, AnimalType.Value as AnimalType, Patient.Age, Customer.Firstname, Customer.Lastname FROM Patient INNER JOIN Customer ON Patient.Owner_FK = Customer.ID INNER JOIN AnimalType ON Patient.Type_FK = AnimalType.ID
第二条查询语句(你没写完,我先保留现有内容)
SELECT Treatment.Treatment_Date, TreatmentType.Type FROM Treatment INNER JOIN TreatmentItem ON Treat...
接下来给你几个分组处理的示例,你可以根据实际需求调整:
示例1:按动物类型分组统计患者信息
如果想统计每种动物类型下有多少患者,以及对应的主人名单,可以这么写:
SELECT AnimalType.Value as AnimalType, COUNT(Patient.ID) as TotalPatients, GROUP_CONCAT(DISTINCT CONCAT(Customer.Firstname, ' ', Customer.Lastname)) as OwnerNames FROM Patient INNER JOIN Customer ON Patient.Owner_FK = Customer.ID INNER JOIN AnimalType ON Patient.Type_FK = AnimalType.ID GROUP BY AnimalType.Value;
这里GROUP BY AnimalType.Value指定按动物类型分组,COUNT用来统计患者数量,GROUP_CONCAT把每个类型对应的主人名字拼在一起(如果是SQL Server的话,换成STRING_AGG就行)。
示例2:按治疗日期+类型分组统计治疗项目
假设你的第二条语句是关联治疗项目和治疗类型,想统计每天每种治疗类型的项目数,可以补全后这么写:
SELECT Treatment.Treatment_Date, TreatmentType.Type, COUNT(TreatmentItem.ID) as TotalTreatmentItems FROM Treatment INNER JOIN TreatmentItem ON Treatment.ID = TreatmentItem.Treatment_FK INNER JOIN TreatmentType ON TreatmentItem.Type_FK = TreatmentType.ID GROUP BY Treatment.Treatment_Date, TreatmentType.Type;
这里用两个字段联合分组,能看到每天每种治疗的具体数量。
最后提醒下:分组的时候要注意,SELECT里的字段要么出现在GROUP BY里,要么是用聚合函数(比如COUNT、SUM、AVG)计算的结果,不然大多数数据库会报错哦。
内容的提问来源于stack exchange,提问作者andrelange91
相关产品推荐
相关产品推荐

