sql语句求出女同学的每一年龄组(超过三人)有多少人?查询结果按人数降序排列,人数相同按年龄升序排列
时间: 2024-12-19 07:28:20 浏览: 6
可以使用SQL查询来获取这个信息。假设有一个名为`students`的表,包含字段`name`(姓名)、`gender`(性别)和`age`(年龄),你可以使用以下SQL语句:
```sql
SELECT age,
COUNT(*) OVER (PARTITION BY age) as group_size,
ROW_NUMBER() OVER (PARTITION BY age ORDER BY COUNT(*) DESC, age ASC) as rank
FROM students
WHERE gender = '女'
GROUP BY age
HAVING COUNT(*) > 3
ORDER BY group_size DESC, rank;
```
解释一下这个查询:
1. `WHERE gender = '女'` 筛选出女同学。
2. `GROUP BY age` 按年龄分组。
3. `COUNT(*) OVER (PARTITION BY age)` 计算每个年龄组的人数。
4. `HAVING COUNT(*) > 3` 只保留人数超过3人的组。
5. `ROW_NUMBER() OVER (PARTITION BY age ORDER BY COUNT(*), age)` 给每个组内按照人数降序(先看人数多的)、然后年龄升序排序。
6. `ORDER BY group_size DESC, rank` 最终结果按人数降序排列,如果人数相同则按年龄升序排列。
相关问题
sql语言实现统计每门课程的学生选修人数(超过10人的课程才统计),要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列
好的,以下是 SQL 语句实现:
```sql
SELECT course_id, COUNT(*) AS num
FROM course_selection
GROUP BY course_id
HAVING num > 10
ORDER BY num DESC, course_id ASC;
```
解释一下:
- `course_selection` 表是选课表,包含学生选修课程的记录,其中 `course_id` 表示课程编号。
- `COUNT(*)` 用于统计每门课程的选修人数。
- `HAVING num > 10` 用于筛选出选修人数超过 10 人的课程。
- `ORDER BY num DESC, course_id ASC` 表示按照选修人数降序排列,若人数相同则按课程号升序排列。
统计每门课程的学生选修人数,超过2人的课程才统计。要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列。
好的,你的要求我已经记录下来了。回答你的问题,可以通过以下 SQL 查询语句完成:
```
SELECT course_id, COUNT(DISTINCT student_id) AS enroll_count
FROM enrollments
GROUP BY course_id
HAVING enroll_count > 2
ORDER BY enroll_count DESC, course_id ASC;
```
该语句统计了每门课程的选修人数,并只返回选修人数超过 2 人的课程。然后按人数降序排列(使用 `ORDER BY enroll_count DESC`),如果有人数相同的课程,则按课程号升序排列(使用 `ORDER BY course_id ASC`)。
阅读全文