所以这是我目前的情况。
我有一个具有以下属性的表'测试':
我需要计算有多少患者从特定类型进行了测试(这是患者和测试之间的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是否会起作用..如果,你将如何使用它?
答案 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