有两个三个表,一个用于学生,第二个用于课程,第三个用于性别。我想知道每个性别的总数和百分比。我使用以下语句来获取数字并且效果很好:
SELECT Gender.GenderName as Gender, COUNT(*) as cnt
FROM (Client INNER JOIN
Gender ON Student.GenderID = Gender.GenderID)
GROUP BY Gender.GenderName
我无法弄清楚如何获得percenage,以及如何使用@ClassId int将ClassName或ID作为可选项来获取每个类或所有类的性别。
答案 0 :(得分:0)
我目前无法访问SQL Server,但您使用Cast
或Convert
转换为浮动类型。或者,您可能希望参考SQL Server的文档以了解其特定的类型转换函数。
SELECT a.Gender, a.cnt, Cast(a.cnt as float) / b.cnt * 100
FROM (SELECT Gender.GenderName as Gender, COUNT(*) as cnt
FROM Client
INNER JOIN Gender
ON Student.GenderID = Gender.GenderID
GROUP BY Gender.GenderName) a
CROSS JOIN (SELECT COUNT(*) as cnt FROM student) b
PS:感谢你指出我的错误。如果b.cnt> a.cnt/b.cnt
将执行整数数学并返回零。 a.cnt(在这种情况下会是)...我们需要将a.cnt
或b.cnt
转换为浮点数,以便a.cnt/b.cnt
成为一个浮点数,然后将它乘以100来给出你这个百分比。另外,我错过了GenderName在内部SELECT中的别名。