需要帮助编写子查询

时间:2018-08-04 15:00:26

标签: sql subquery

我正在使用一个健康数据库,并试图显示访问该医疗机构两次以上的患者。到目前为止,我的基本查询是

SELECT FirstName, LastName
FROM PATIENT

我知道我必须以某种方式在其中使用子查询,但是我不知道是否需要使用Count或任何其他运算符来查找访问两次以上的患者。

These are my tables and relationships between them

4 个答案:

答案 0 :(得分:0)

您可以将带有访问和计数的联接用于计数(大于1)进行不同的(VisitDate)过滤

  SELECT FirstName, LastName , count(distinct VisitDate)
  FROM PATIENT 
  inner join  VISIT on VISIT.patientID = PATIENT.PatientID 
  group by FirstName, LastName 
  having count(distinct VisitDate) > 1 

答案 1 :(得分:0)

在我看来,您只需要将VISIT表与PATIENT表联接即可。
然后GROUP BY并通过HAVING限制访问次数。

SELECT p.FirstName, p.LastName
FROM VISIT v
JOIN PATIENT p ON p.PatientID = v.PatientID
GROUP BY v.PatientID, p.FirstName, p.LastName
HAVING COUNT(v.VisitID) > 2
ORDER BY COUNT(v.VisitID) DESC

答案 2 :(得分:0)

使用聚合函数select x.FirstName,x.LastName from ( SELECT a.FirstName, a.LastName,count(*) n FROM PATIENTa,visit b where a.patientid = b.patientid group by a.FirstName, a.LastName having count(*) > 2 ) x count子句进行比较

having

通过使用子查询,您也可以获得相同的结果,但不需要第一个查询更合适

  SELECT P.FirstName, P.LastName,COUNT(V.VisitID) as numberOfVisit
    FROM VISIT V
    JOIN PATIENT P ON P.PatientID = V.PatientID
    GROUP BY V.PatientID, P.FirstName, P.LastName
    HAVING COUNT(V.VisitID) > 2

答案 3 :(得分:-1)

#!/usr/bin/env python3

from pubnub.pubnub import PubNub, SubscribeListener
from pubnub.pnconfiguration import PNConfiguration

import multiprocessing
import time

def PN_func():
    pnconfig = PNConfiguration()
    pnconfig.subscribe_key = 'sub-mykey'
    pubnub = PubNub(pnconfig)

    print('Pubnub multiprocess subscriber initiated...')

    class Listener(SubscribeListener):
        def message(self, pubnub, data):
            print("From Multiprocess function message: ", data.message)

    pubnub.add_listener(Listener())
    pubnub.subscribe().channels('my_channel').execute()

if __name__ == '__main__':
    mp = multiprocessing.Process(target=PN_func)
    mp.start()
    mp.join()