MySQL Classic 50 Вопросы с 31 по 35

MySQL
MySQL Classic 50 Вопросы с 31 по 35

Общественный номер: You Er Hut
Автор: Питер
Редактор: Питер

Привет, меня зовут Питер

MySQL50-9 - вопросы 31-35

В этой статье представлены темы 31–35. Основные вопросы, связанные с этим:

  • нечеткое соответствие
  • Укажите несколько методов сортировки одновременно
  • Объединить запрос нескольких таблиц

5 тем:

  • Запрос информации о студентах 1990 г.р.
  • Запрос средней оценки каждого курса, результаты сортируются в порядке убывания средней оценки; если средние оценки одинаковы, они сортируются в порядке возрастания по номеру курса c_id
  • Запросите количество учеников, имя и среднюю оценку всех учеников, чья средняя оценка больше или равна 85.
  • Запросить название курсаматематика, а также имена и баллы учащихся с баллами ниже 60.
  • Проверить курсы и оценки всех учащихся

Тема 31

требования темы

Запрос информации о студентах 1990 г.р.

Процесс анализа

Для этой темы мы по-прежнему передаем нечеткое сопоставление, а используемые поляs_birth

Реализация SQL

select *
from Student
where s_birth like '1990%';   -- 模糊匹配

тема 32

требования темы

Запрос средней оценки каждого курса, результаты сортируются в порядке убывания средней оценки; если средние оценки одинаковы, они сортируются в порядке возрастания по номеру курса c_id

Процесс анализа

Курс: Оценка/курс

Оценка: Оценка

Группировать и сортировать по среднему баллу за каждый курс

Реализация SQL

-- 自己的方法
select 
	c_id
	,round(avg(s_score),2) avg_score
from Score
group by 1
order by 2 desc, c_id;  -- 指定字段和排序方法

Если вы хотите привести название курса, вам необходимо присоединиться к таблице курсов

-- 自己的方法
select 
	c.c_id
	,c.c_name
	,round(avg(sc.s_score),2) avg_score
from Score sc
join Course c
on sc.c_id = c.c_id
group by 1,2
order by 3 desc, c.c_id;  -- 指定字段和排序方法

тема 33

требования темы

Запросите количество учеников, имя и среднюю оценку всех учеников, чья средняя оценка больше или равна 85.

Процесс анализа

  • Найдите средний балл по мнению студентов, а затем выберите тех, кто набрал больше 85 баллов.
  • Ссылка на информационный лист студента, чтобы узнать конкретную информацию

Реализация SQL

-- 自己的方法
select 
	sc.s_id
	,s.s_name
	,round(avg(sc.s_score),2) avg_score
from Score sc
join Student s
on sc.s_id = s.s_id
group by sc.s_id,s.s_name
having avg_score >= 85;

тема 34

требования темы

Запросить название курсаматематика, а также имена и баллы учащихся с баллами ниже 60.

Процесс анализа

1. Сначала узнайте номер студента, чей балл по математике меньше 60, из таблиц Score и Course.

2. Подключитесь к таблице Student, чтобы запросить имя

Реализация SQL

select 
	s.s_name
	,sc.s_score
from Score sc   -- 成绩表
join Student s  -- 学生信息表
on sc.s_id = s.s_id
join Course c  -- 课程表,指定数学
on sc.c_id = c.c_id
where c.c_name = '数学'
and sc.s_score < 60;  -- 指定成绩

Посмотрите на реальные данные, действительно только один человек доволен

тема 35

требования темы

Проверить курсы и оценки всех учащихся

Процесс анализа

  1. Курс: Курс
  2. Оценка: Оценка
  3. Имя ученика: Студент

Через основную таблицу Score два поля и две другие таблицы могут быть подключены к запросу.

Реализация SQL

select 
	s.s_id
	,s.s_name
	,sum(case c.c_name when '语文' then sc.s_score else 0 end) as '语文'  -- 语文分数
	,sum(case c.c_name when '数学' then sc.s_score else 0 end) as '数学'
	,sum(case c.c_name when '英语' then sc.s_score else 0 end) as '英语'
	,sum(sc.s_score) as '总分'  -- 每个人的总分
from Student s
left join Score sc
on s.s_id = sc.s_id
left join Course c 
on sc.c_id = c.c_id
group by s.s_id, s.s_name;   -- 学号和姓名的分组