SQL Group by 具有聚合和不同

标签 sql group-by distinct

给定:

保险公司(cid、姓名、电话、地址)

医生(做过、姓名、专业、地址、电话、年龄、cid)

患者(pid、姓名、地址、电话、年龄、性别、cid)

访问次数(视频、did、pid、日期、描述)

哪里

cid - Insurance Company code
did - doctor code
pid - patient code
vid - code of visit

and a TASK : For each doctor return the number of (different) patients of age 20-25:

is :

SELECT  V.did, COUNT ( V.pid ) 
FROM    (   SELECT  DISTINCT V1.did, V1.pid
            FROM    Visits V1,Patient P
            WHERE   P.pid=V1.pid and P.age >= 20 and  P.age <=25 ) AS V 
GROUP BY    V.did

相当于:

SELECT  V.did, COUNT (DISTINCT V.pid ) 
FROM    Visits V,Patient P
WHERE   P.pid=V.pid and P.age >= 20 and  P.age <=25
GROUP BY    V.did

它们都是完成任务的好解决方案吗?

最佳答案

您的第二个查询更适合该任务,并且应该可以更好地优化。此外,在每个查询中,您都会引用 Visit.age。难道你不应该加入Patints并引用病人年龄吗?

此外,在每次检查中,您都会计算医生的独特就诊次数,这不需要明确的声明,因为就诊绝不会重复。相反,您应该计算不同的患者 (p.id)。

关于SQL Group by 具有聚合和不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10305468/

相关文章:

mysql - 最新Group By MYSQL+链接表

c# - 你能用 lambda 表达式创建一个简单的 'EqualityComparer<T>' 吗

distinct - 如何使用pyspark在数据框中获取不同的行?

sql - 减去2个表的计数

Mysql按时间选择数据但不忽略值为0的时间

Mysql - 可以使用 Group By semester 吗?

sql - Access 中的组值范围

sql - Postgresql 按优先级区分

sql - 如何在sql server 2008中显示数据?

php在sql数据库中查找最匹配的句子