0

医師と患者のクラスがあり、すべての医師には何人かの患者 (1:m) がいます。HQL で患者数が最も多い医師を見つけるにはどうすればよいですか?

SQL クエリは次のとおりです。

SELECT D.doctorName, count(D.patientId) AS tot FROM Doctors AS D GROUP BY D.doctorName HAVING count(D.patientId)= (SELECT max(A.pid) FROM( SELECT count(D.patientId) AS pid FROM Doctors AS D GROUP BY D.doctorName) AS A)

主な問題は、FROM の場所にサブクエリを記述できないことです。

どうもありがとう。

R

4

2 に答える 2

1

解決しました!サブクエリを置き換えるCRITERIA関数を作成しました。エレガントではありませんが、機能します!

    def myList = []
    String tempName = ""
    int patPosition = 0
    int myListPosition = -1
    int find = 0
    int maxOcc = 0

    def c = Doctor.createCriteria()
    def pat = c.list {              
        patients {          
        }
    }

    while(patPosition<pat.size()){

        find=0
        tempName=pat[patPosition].lastName //Some constraints to add 
        find=pat.lastName.count(tempName)

        if(find>maxOcc){
            maxOcc=find
        }

        myListPosition=myListPosition+1
        myList[myListPosition]=find

        patPosition=patPosition+find

    }

    print "\n\nLIST -> "+myList
    print "MAX -> "+maxOcc

    String queryToDo=   "SELECT d.name, count(p) "+
                        "FROM Doctor as d INNER JOIN d.patients as p "+
                        "GROUP BY d.name "+
                        "HAVING count(p) = $maxOcc" 

    def query = Doctor.executeQuery(queryToDo)  
    render query
于 2012-04-20T14:10:47.323 に答える
0

より合成:

pat.eachWithIndex{item, index-> 
          if (index.equals(index2)){
            patCount=0
            patCount=pat.count(item)    
            index2=index2+patCount
                if(patCount>maxOcc){
                    maxOcc=patCount
                }
          } 
     }
于 2012-04-27T08:21:14.307 に答える