SQL22 统计每个学校的答过题的用户的平均答题数

用户信息表 user_profile,其中device_id指终端编号(认为每个用户有唯一的一个终端),gender指性别,age指年龄,university指用户所在的学校,gpa是该用户平均学分绩点,active_days_within_30是30天内的活跃天数。

device_id gender age university gpa active_days_within_30
2138 male 21 北京大学 3.4 7
3214 male NULL 复旦大学 4 15
6543 female 20 北京大学 3.2 12
2315 female 23 浙江大学 3.6 5
5432 male 25 山东大学 3.8 20
2131 male 28 山东大学 3.3 15
4321 male 28 复旦大学 3.6 9

第一行表示:用

### SQL去重查询 DISTINCT 和 GROUP BY 示例 在SQL中,`DISTINCT` 和 `GROUP BY` 是两种常用的去重方法,但它们的应用场景有所不同。以下是关于这两种方法的详细说明及示例代码。 #### 使用 DISTINCT 去重 `DISTINCT` 关键字用于从查询结果中去除重复的行,并返回唯一的记录[^3]。以下是一个简单的示例: ```sql SELECT DISTINCT university FROM user_answers; ``` 上述语句将返回 `user_answers` 表中所有唯一的大学名称。 #### 使用 GROUP BY 进行分组与聚合 `GROUP BY` 通常与聚合函(如 `COUNT()`、`SUM()` 等)一起使用,用于对据进行分组并计算每个组的汇总值[^1]。例如,若要计算每个学校用户平均答题目,可以按照以下方式编SQL语句: ```sql SELECT university, ROUND(CAST(SUM(answer_count) AS FLOAT) / COUNT(DISTINCT user_id), 4) AS avg_answers FROM user_answers GROUP BY university ORDER BY university ASC; ``` 上述语句中: - `SUM(answer_count)` 计算每个学校的总答题。 - `COUNT(DISTINCT user_id)` 统计每个学校的不同用户。 - `ROUND(..., 4)` 将结果保留四位小。 - `ORDER BY university ASC` 按照大学名称升序排序[^3]。 #### 结合 DISTINCT 和 GROUP BY 的复杂查询 在某些情况下,可能需要同时使用 `DISTINCT` 和 `GROUP BY` 来满足复杂的业务需求。例如,引用中的 SQL 示例展示了如何结合两者实现更灵活的查询[^2]: ```sql SELECT GROUP_CONCAT(DISTINCT PLAN_NUMBER) AS PLAN_NUMBER, PRODUCT_NAME FROM psur_list GROUP BY PRODUCT_NAME; ``` 上述语句通过 `GROUP_CONCAT` 和 `DISTINCT` 将不同计划号(`PLAN_NUMBER`)合并为一个字符串,并按产品名称(`PRODUCT_NAME`)分组。 ### 注意事项 - `DISTINCT` 仅用于去除查询结果中的重复记录,而 `GROUP BY` 则用于分组和聚合操作。 - 如果需要对多个字段进行去重,可以在 `SELECT DISTINCT` 中列出所有相关字段[^3]。 - 在涉及浮点运算时,建议使用 `CAST` 或 `CONVERT` 显式转换据类型以避免精度问[^3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值