首页 > 其他分享 >1280. 学生们参加各科测试的次数

1280. 学生们参加各科测试的次数

时间:2023-12-16 12:33:37浏览次数:23  
标签:name Programming subject 次数 student 各科 id Math 1280

1.题目介绍

学生表: \(Students\)

+---------------+---------+
| Column Name   | Type    |
+---------------+---------+
| student_id    | int     |
| student_name  | varchar |
+---------------+---------+
在 SQL 中,主键为 student_id(学生ID)。
该表内的每一行都记录有学校一名学生的信息。

科目表: \(Subjects\)

+--------------+---------+
| Column Name  | Type    |
+--------------+---------+
| subject_name | varchar |
+--------------+---------+
在 SQL 中,主键为 subject_name(科目名称)。
每一行记录学校的一门科目名称。

考试表: \(Examinations\)

+--------------+---------+
| Column Name  | Type    |
+--------------+---------+
| student_id   | int     |
| subject_name | varchar |
+--------------+---------+
这个表可能包含重复数据(换句话说,在 SQL 中,这个表没有主键)。
学生表里的一个学生修读科目表里的每一门科目。
这张考试表的每一行记录就表示学生表里的某个学生参加了一次科目表里某门科目的测试。

查询出每个学生参加每一门科目测试的次数,结果按 \(student_id\) 和 \(subject_name\) 排序。

查询结构格式如下所示。

示例 1:

输入:
Students table:
+------------+--------------+
| student_id | student_name |
+------------+--------------+
| 1          | Alice        |
| 2          | Bob          |
| 13         | John         |
| 6          | Alex         |
+------------+--------------+
Subjects table:
+--------------+
| subject_name |
+--------------+
| Math         |
| Physics      |
| Programming  |
+--------------+
Examinations table:
+------------+--------------+
| student_id | subject_name |
+------------+--------------+
| 1          | Math         |
| 1          | Physics      |
| 1          | Programming  |
| 2          | Programming  |
| 1          | Physics      |
| 1          | Math         |
| 13         | Math         |
| 13         | Programming  |
| 13         | Physics      |
| 2          | Math         |
| 1          | Math         |
+------------+--------------+
输出:
+------------+--------------+--------------+----------------+
| student_id | student_name | subject_name | attended_exams |
+------------+--------------+--------------+----------------+
| 1          | Alice        | Math         | 3              |
| 1          | Alice        | Physics      | 2              |
| 1          | Alice        | Programming  | 1              |
| 2          | Bob          | Math         | 1              |
| 2          | Bob          | Physics      | 0              |
| 2          | Bob          | Programming  | 1              |
| 6          | Alex         | Math         | 0              |
| 6          | Alex         | Physics      | 0              |
| 6          | Alex         | Programming  | 0              |
| 13         | John         | Math         | 1              |
| 13         | John         | Physics      | 1              |
| 13         | John         | Programming  | 1              |
+------------+--------------+--------------+----------------+
解释:
结果表需包含所有学生和所有科目(即便测试次数为0):
Alice 参加了 3 次数学测试, 2 次物理测试,以及 1 次编程测试;
Bob 参加了 1 次数学测试, 1 次编程测试,没有参加物理测试;
Alex 啥测试都没参加;
John  参加了数学、物理、编程测试各 1 次。

2.题解

代码

SELECT st.student_id, 
       st.student_name, 
       su.subject_name, 
       COALESCE(count(e.student_id), 0) as attended_exams  #返回表达式中第一个非空表达式
FROM Students st 
CROSS JOIN Subjects su
LEFT JOIN Examinations e ON st.student_id = e.student_id AND su.subject_name = e.subject_name
GROUP BY st.student_id, st.student_name, su.subject_name 
ORDER BY st.student_id, su.subject_name;

标签:name,Programming,subject,次数,student,各科,id,Math,1280
From: https://www.cnblogs.com/trmbh12/p/17904711.html

相关文章

  • python123——西游记相关的分词,出现次数最高的20个
       #统计西游记人物出场次数,(去除冠词,代词等干扰)并降序排列p173importjiebaexcludes={"一个","那里","怎么","我们","不知","两个","甚么","不是","只见","原来","如何","这个","不曾&q......
  • Leetcode刷题day11-栈.滑窗最大值.出现次数前K的元素
    239.滑动窗口最大值239.滑动窗口最大值-力扣(LeetCode)给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回 滑动窗口中的最大值 。示例1:输入:nums=[1,3,......
  • collections.Counter()统计list中出现次数
    要查找lines列表中重复的行并将其打印出来,您可以使用Python的collections.Counter()函数来统计每行出现的次数。然后,遍历统计结果,找出出现次数大于1的行,并打印出来。以下是一个示例代码:importosfromcollectionsimportCounterfile_dir="xxx"withopen(file_dir,"r")......
  • 数字在排序数组中出现的次数--二分
    题目描述有序序列二分先对左端点进行二分再对右端点二分最后得到两个端点,直接相减+1,得到区间个数classSolution{public:intgetNumberOfK(vector<int>&nums,intk){if(nums.empty())return0;intl=0,r=nums.size()-1;while(l<r......
  • Mybatis保存多记录,导致SQL过长,保存失败,按指定次数切分,多次保存。
     privatestaticfinalIntegerWORKITEM_MAX_NUMBER=200;privateintsavePbhProblemworkitem(List<ProblemWorkitemVm>problemworkitem){try{intcount=0;intlimit=countStep(problemworkitem.size(),WORKI......
  • mysql 登录错误次数
    如果连续5次输入密码错误,限制登录数据库10分钟1.安装插件(CONNECTION_CONTROL和CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS)installpluginCONNECTION_CONTROLsoname'connection_control.dll'installpluginCONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTSsoname'connection_con......
  • Python复制表格文件的指定行:不同的行复制不同次数
      本文介绍基于Python语言,读取Excel表格文件数据,并将其中符合我们特定要求的那一行加以复制指定的次数,而不符合要求的那一行则不复制;并将所得结果保存为新的Excel表格文件的方法。  这里需要说明,在我们之前的文章Python自动复制表格文件中指定的数据行的方法中,也介绍过实现类......
  • created中两次数据修改,会触发几次页面更新
    面试题:created生命周期中两次修改数据,会触发几次页面更新?一、同步的先举个简单的同步的例子:newVue({el:"#app",template:`<div><div>{{count}}</div></div>`,data(){return{count:1,};},created(){this.count=2;......
  • 找出一个字符串中出现次数最多的一个字符 找出重复签到的同学
    7-2找出一个字符串中出现次数最多的一个字符找出一个字符串中出现次数最多的一个字符。输入格式:给出一个字符串,字符串的长度不大于10^6,不区分大小写,字符串中可能包含'A'-'Z','a'-'z',''字符。输出格式:分别输出出现最多次数的字符(如果为字母,输出小写字母),出现的次数,用......
  • 判断一个字符串中出现次数最多的字符,统计这个次数
    varstr="stiabsstringapbs";varobj={};for(vari=0;i<str.length;i++){varkey=str[i];if(!obj[key]){obj[key]=1;}else{obj[key]++;......