Έχω έναν πίνακα του 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
Πρέπει να ομαδοποιήσετε το πεδίο βαθμού. Αυτό το ερώτημα θα σας δώσει αυτό που ψάχνετε σε σχεδόν κάθε βάση δεδομένων.
Select Grade, CountofGrade / sum(CountofGrade) *100
from
(
Select Grade, Count(*) as CountofGrade
From Grades
Group By Grade) as sub
Group by Grade
Θα πρέπει να προσδιορίσετε το σύστημα που χρησιμοποιείτε.
Σε οποιαδήποτε έκδοση του sql server θα μπορούσατε να χρησιμοποιήσετε μια μεταβλητή για το σύνολο όλων των βαθμών ως εξής:
declare @countOfAll decimal(18, 4)
select @countOfAll = COUNT(*) from Grades
select
Grade, COUNT(*) / @countOfAll * 100
from Grades
group by Grade