SQL Server使用COUNT与WHERE时如何按赛季计算外籍球员占总人数的百分比
解决方法
你原先将国籍过滤条件写在WHERE子句中,会直接排除所有美国籍球员的记录,因此无法统计到单赛季总球员数量。改用条件聚合的写法即可同时拿到外籍球员数和总球员数,无需额外子查询:
SELECT season, COUNT(DISTINCT CASE WHEN country <> 'USA' THEN player_name END) AS 'No. of Foreign Players', COUNT(DISTINCT player_name) AS 'Total Players', COUNT(DISTINCT CASE WHEN country <> 'USA' THEN player_name END) * 100.0 / COUNT(DISTINCT player_name) AS 'Foreign Player Percentage (%)' FROM nbastats GROUP BY season
逻辑说明
- 赛季分组逻辑和你原有查询完全一致,返回的外籍球员数量也和你之前的查询结果匹配
- 计数时通过CASE语句做条件判断,仅统计非美国籍球员的数量,总球员数直接统计全量去重的球员即可
- 乘以
100.0是为了避免SQL Server整数除法导致的精度丢失,如果需要固定保留指定位数的小数,可以在外层嵌套ROUND()函数,示例(保留2位小数):ROUND(COUNT(DISTINCT CASE WHEN country <> 'USA' THEN player_name END) * 100.0 / COUNT(DISTINCT player_name), 2) AS 'Foreign Player Percentage (%)'
内容的提问来源于stack exchange,提问作者Chan Alaster
相关产品推荐
相关产品推荐

