Xquery tellen met een voorwaarde

Dit is de DTD





    







    

Ik wil het college waar de meeste studenten zijn. Als er een gelijkspel is, rapporteer dan alle colleges die verbonden zijn.

let $student := doc("responses.xml")/Responses/Student 

for $dc in distinct-values 
    (for $college in $student/Response/List[@questionID = "college"]
    return data($college))

return {$dc} - number of students: {count($student[Response/List[@questionID = "college"] = data($dc)]))

Ik krijg een foutmelding met count (), ik wil gewoon tellen met een voorwaarde.

2e vraag hoe selecteer ik de maximale

0
Welke foutmelding krijg je? (Ik zie wel dat je een sluitende accolade mist en aan het einde een eigenwijs haakje hebt). Je moet een aantal voorbeeldgegevens opgeven, omdat je elementnamen niet intuïtief zijn. Hoe is bijvoorbeeld een universiteit vertegenwoordigd?
toegevoegd de auteur Evan Lenz, de bron

1 antwoord

There is a typo in the last line of your code. You have an open curly brace just before count, but it is not closed before , and there is an extra closing parenthesis after .

Om het college te krijgen dat wordt geassocieerd met (bijgewoond door?) De meeste studenten, moet je bij de telling bestellen en het eerste item nemen dat op die manier wordt geretourneerd. Zie de enigszins gewijzigde code hieronder.

Opmerking: ik moest een beetje raden over uw gegevens, dus ik heb zelf iets gemaakt. Het is zodanig dat er eigenlijk drie hogescholen zijn met dezelfde max, maar er is er maar één terug. Misschien wil je een beetje tweaken, door eerst de max-telling zelf te vinden, en gebruik dat om alle colleges met die telling achteraf te vinden.

let $doc := 
    document {
        
            
                
                    q1
                    q2
                    q3
                
                
                    q4
                    q5
                    q6
                
            
            
                
                    q4
                    q5
                    q6
                
                
                    q7
                    q8
                    q9
                
            
            
                
                    q1
                    q2
                    q3
                
                
                    q4
                    q5
                    q6
                
            
        
    }

 

let $student := $doc/Responses/Student
return (
    for $dc in
        distinct-values(
            for $college in $student/Response/List[@questionID = "college"]
            return data($college)
        )
    let $count := count($student[Response/List[@questionID = "college"] = data($dc)])
    order by $count descending, $dc ascending
    return {$dc} - number of students: {$count}
)[1]
1
toegevoegd