如何按新的Select语句进行分组

时间:2013-11-06 13:54:17

标签: sql

所以这是我目前的情况。

我有一个具有以下属性的表'测试':

  • 编号
  • PatientID(FK)
  • 结果
  • 类型

我需要计算有多少患者从特定类型进行了测试(这是患者和测试之间的1 - *关系)。

我解决了这个问题:

SELECT COUNT(*) 
FROM Test 
WHERE (Type = 'GDS') 
GROUP BY PatientID;

现在我必须对这些结果进行分组..(“有多少患者做了n次检查”)

SELECT COUNT(*) 
FROM Test 
WHERE (Type = 'GDS') 
GROUP BY 
(
    SELECT COUNT(*) 
    FROM Test WHERE (Type = 'GDS') 
    GROUP BY PatientID
);

当然这是错的,因为我不知道如何做到这一点......我在网上找不到任何东西。

这是Visual Studio中的SQL数据库...所以我不确定JOINS是否会起作用..如果,你将如何使用它?

3 个答案:

答案 0 :(得分:3)

这是家庭作业吗? 您正在搜索HAVING子句,该子句允许您过滤聚合结果:

SELECT PatientID
FROM Test 
WHERE Type = 'GDS'
GROUP BY PatientID
HAVING COUNT(*) = n

答案 1 :(得分:0)

回答你的问题:

  

我需要计算有多少患者从a进行过测试   特定类型(患者和测试之间的1 - *关系)。

这是解决方案:

SELECT COUNT(DISTINCT PatientID) FROM Test WHERE Type = 'GDS'

例如,如果你有:

ID | PatiantID | Type
1  | 71        | GDS
2  | 71        | FTP
3  | 53        | GDS

然后上面的代码将返回2,因为有两名患者接受了GDS测试。

答案 2 :(得分:0)

你可以:

 SELECT COUNT(*) as PatientCount 
 FROM Test 
 WHERE Type = 'GDS'

或使用GROUP BY

 SELECT PatientID, COUNT(*) as PatientCount FROM Test 
 WHERE Type = 'GDS'
 GROUP BY PatientID

如果你想要特定数量的聚合函数COUNT(),你可以使用HAVING而不是WHERE,如:

 SELECT PatientID, COUNT(*) as PatientCount FROM Test 
 WHERE Type = 'GDS'
 GROUP BY PatientID
 HAVING COUNT(*) = n tests