1

所以这就是我现在的情况。

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

  • ID
  • 患者 ID (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 是否可以工作......如果,你将如何使用它?

4

3 回答 3

3

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

SELECT PatientID
FROM Test 
WHERE Type = 'GDS'
GROUP BY PatientID
HAVING COUNT(*) = n
于 2013-11-06T13:57:34.850 回答
0

回答你的问题:

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

这是解决方案:

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

例如,如果您有:

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

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

于 2013-11-06T13:58:12.693 回答
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
于 2013-11-06T13:59:19.377 回答