Πώς να υπολογίσετε το ποσοστό με μια εντολή SQL

Έχω έναν πίνακα του SQL Server που περιέχει τους χρήστες και τους βαθμούς τους. Για λόγους απλότητας, ας πούμε ότι υπάρχουν 2 στήλες - "όνομα" & "βαθμός". Έτσι, μια τυπική γραμμή θα ήταν: Όνομα: "John Doe", Βαθμός:"A".

Ψάχνω για μια εντολή SQL που θα βρει τα ποσοστά όλων των πιθανών απαντήσεων. (A, B, C, κλπ...) Επίσης, υπάρχει τρόπος να γίνει αυτό χωρίς να καθοριστούν όλες οι πιθανές απαντήσεις (ανοιχτό πεδίο κειμένου - οι χρήστες θα μπορούσαν να εισάγουν 'pass/fail', 'none', κλπ...).

Το τελικό αποτέλεσμα που ψάχνω είναι: A: 5%, B: 15%, C: 40%, κλπ...

Πρέπει να υπολογίσετε το σύνολο των βαθμών Εάν πρόκειται για SQL 2005, μπορείτε να χρησιμοποιήσετε CTE

    WITH Tot(Total) (
    SELECT COUNT(*) FROM table
    )
    SELECT Grade, COUNT(*) / Total * 100
--, CONVERT(VARCHAR, COUNT(*) / Total * 100) + '%'  -- With percentage sign
--, CONVERT(VARCHAR, ROUND(COUNT(*) / Total * 100, -2)) + '%'  -- With Round
    FROM table
    GROUP BY Grade
Σχόλια (1)

Πρέπει να ομαδοποιήσετε το πεδίο βαθμού. Αυτό το ερώτημα θα σας δώσει αυτό που ψάχνετε σε σχεδόν κάθε βάση δεδομένων.

    Select Grade, CountofGrade / sum(CountofGrade) *100 
    from
    (
    Select Grade, Count(*) as CountofGrade
    From Grades
    Group By Grade) as sub
    Group by Grade

Θα πρέπει να προσδιορίσετε το σύστημα που χρησιμοποιείτε.

Σχόλια (4)

Σε οποιαδήποτε έκδοση του sql server θα μπορούσατε να χρησιμοποιήσετε μια μεταβλητή για το σύνολο όλων των βαθμών ως εξής:

declare @countOfAll decimal(18, 4)
select @countOfAll = COUNT(*) from Grades

select
Grade,  COUNT(*) / @countOfAll * 100
from Grades
group by Grade
Σχόλια (0)