select
name,
subject,
class_code,
graduate_date
from
teachers
where
gender = 'f' and (year(graduate_date) between 1994 and 1997)
order by
graduate_date asc;
select
name,
subject,
class_code,
qualification
from
teachers
where
(fir_degr = '北京大学' or fir_degr = '清华大学') and head_teacher is not null
order by
name;
SELECT
CASE
WHEN sc.score >= 110 THEN '[110, 120]'
WHEN sc.score >= 90 THEN '[90, 110)'
WHEN sc.score >= 60 THEN '[60, 90)'
ELSE '[0, 60)'
END AS score_range,
COUNT(*) AS num_students
FROM
students s
JOIN
scores sc ON s.student_id = sc.student_id
WHERE
sc.subject = '数学'
AND sc.exam_date = '2024-06-30'
GROUP BY
score_range
ORDER BY
score_range DESC;
select
case
when sc.score >= 110 then '[110,120]'
when sc.score >= 90 then '[90,110)'
when sc.score >= 60 then '[60,90)'
else '[0,60)'
end as score_range,
count(*) as num_students
from
students s
join
scores sc on s.student_id = sc.student_id
where
sc.subject = '数学'
AND sc.exam_date = '2024-06-30'
group by
score_range
order by
score_range desc;
select
case
when sc.score >= 110 then '[110,120]'
when sc.score >= 90 then '[90,110)'
when sc.score >= 60 then '[60,90)'
else '[0,60)'
end as score_range,
count(*) as num_students
from
students s
join
scores sc on s.student_id = sc.student_id
where
sc.subject = '数学'
AND sc.exam_date = '2024-06-30'
group by
score_range
order by
score_range desc;
select
case
when sc.score >= 110 then '[110,120]'
when sc.score >= 90 then '[90,110)'
when sc.score >= 60 then '[60,90)'
else '[0,60)'
end as score_range,
count(*) as num_students
from
students s
join
scores sc on s.student_id = sc.student_id
where
sc.exam_date = '2024-6-30'
and sc.subject = '数学'
group by
score_range
order by
score_range desc;
select
case
when sc.score >= 110 then '[110,120]'
when sc.score >= 90 then '[90,110)'
when sc.score >= 60 then '[60,90)'
else '[0,60)'
end as score_range,
count(*) as num_students
from
students s
join
scores sc on s.student_id = sc.student_id
where
sc.exam_date = '2024-6-30'
and
sc.subject = '数学'
group by
score_range
order by
score_range desc;
SELECT
student_id,
name,
score,
ranking
FROM (
SELECT
s.student_id,
s.name,
sc.score,
RANK() OVER (ORDER BY sc.score DESC) AS ranking
FROM
students s
JOIN scores sc ON s.student_id = sc.student_id
WHERE
s.grade_code = 'S1' AND sc.subject = '物理'
) AS ranked_scores
WHERE
ranking < 10;
SELECT
student_id,
name,
score,
ranking
FROM (
SELECT
s.student_id,
s.name,
sc.score,
RANK() OVER (PARTITION BY sc.subject ORDER BY sc.score DESC) AS ranking
FROM
students s
JOIN scores sc ON s.student_id = sc.student_id
WHERE
s.grade_code = 'S1' AND sc.subject = '物理'
) AS ranked_scores
WHERE
ranking < 10;
SELECT
*,
ROW_NUMBER() OVER (ORDER BY sc.score DESC, st.name desc) AS rnk
FROM
students AS st
INNER JOIN scores AS sc
ON st.student_id = sc.student_id
WHERE
st.grade_code = 'S1' and sc.score = 100
ORDER BY
rnk
LIMIT 30;
select
s.student_id,
s.name,
sc.score,
row_number()over(partition by sc.subject order by score desc)
from
students s
join
scores sc on s.student_id = sc.student_id
where
sc.subject = '物理' and s.grade_code = 'S1'
limit 10;