SQL练习_6 | 8 | SQLZOO_20191021

本系列刷题笔记主要用以记录刷SQLZOO的过程中的思路、个人答案以及陌生的或者新的知识点。

题目来源 - SQLZOO
SQLZOO中题目中文版本与英文版本略有差异,题目以英文版为准

相关文章
SQL练习_1 | 0,1,2 | SQLZOO_20191002
SQL练习_2 | 3 | SQLZOO_20191008
SQL练习_3 | 4,5 | SQLZOO_20191010
SQL练习_4 | 6 | SQLZOO_20191012
SQL练习_5 | 7 | SQLZOO_20191015

目录
8 Using Null
8+ Numeric Examples

8 Using Null

查询表格

SQL练习_6 | 8 | SQLZOO_20191021_第1张图片
查询表格_teacher, dept

1 List the teachers who have NULL for their department.

SELECT name
FROM teacher
WHERE dept IS NULL

2 Note the INNER JOIN misses the teachers with no department and the departments with no teacher.

SELECT teacher.name,
       dept.name
FROM teacher
  INNER JOIN dept ON (teacher.dept = dept.id)

3 Use a different JOIN so that all teachers are listed.

SELECT teacher.name,
       dept.name
FROM teacher
  LEFT JOIN dept ON (teacher.dept = dept.id)

4 Use a different JOIN so that all departments are listed.

SELECT teacher.name,
       dept.name
FROM teacher
  RIGHT JOIN dept ON (teacher.dept = dept.id)

5 Use COALESCE to print the mobile number. Use the number '07986 444 2266' if there is no number given. Show teacher name and mobile number or '07986 444 2266'

SELECT name,
       COALESCE(mobile,'07986 444 2266')
FROM teacher

6 Use the COALESCE function and a LEFT JOIN to print the teacher name and department name. Use the string 'None' where there is no department.

SELECT a.name,
       COALESCE(b.name,'None')
FROM teacher a
  LEFT JOIN dept b ON a.dept = b.id

7 Use COUNT to show the number of teachers and the number of mobile phones.

SELECT COUNT(DISTINCT name),
       COUNT(DISTINCT mobile)
FROM teacher

8 Use COUNT and GROUP BY dept.name to show each department and the number of staff. Use a RIGHT JOIN to ensure that the Engineering department is listed.

SELECT b.name,
       COUNT(DISTINCT a.name)
FROM teacher a
  RIGHT JOIN dept b ON a.dept = b.id
GROUP BY b.name

9 Use CASE to show the name of each teacher followed by 'Sci' if the teacher is in dept 1 or 2 and 'Art' otherwise.

SELECT name,
       CASE
         WHEN dept = '1' OR dept = '2' THEN 'Sci'
         ELSE 'Art'
       END 
FROM teacher

10 Use CASE to show the name of each teacher followed by 'Sci' if the teacher is in dept 1 or 2, show 'Art' if the teacher's dept is 3 and 'None' otherwise.

SELECT name,
       CASE
         WHEN dept = '1' OR dept = '2' THEN 'Sci'
         WHEN dept = '3' THEN 'Art'
         ELSE 'None'
       END 
FROM teacher

8+ Numeric Examples

查询表格

SQL练习_6 | 8 | SQLZOO_20191021_第2张图片
查询表格_nss(National Student Survey 2012)

1 Show the the percentage who STRONGLY AGREE

The example shows the number who responded for:
*question 1
*at 'Edinburgh Napier University'
*studying '(8) Computer Science'

SELECT A_STRONGLY_AGREE
FROM nss
WHERE question = 'Q01'
AND   institution = 'Edinburgh Napier University'
AND   subject = '(8) Computer Science'

2 Show the institution and subject where the score is at least 100 for question 15.

SELECT institution,
       subject
FROM nss
WHERE question = 'Q15'
AND   score >= 100

3 Show the institution and score where the score for '(8) Computer Science' is less than 50 for question 'Q15'

SELECT institution,
       score
FROM nss
WHERE question = 'Q15'
AND   score < 50
AND   subject = '(8) Computer Science'

4 Show the subject and total number of students who responded to question 22 for each of the subjects '(8) Computer Science' and '(H) Creative Arts and Design'.

SELECT subject,
       SUM(response)
FROM nss
WHERE question = 'Q22'
AND   (subject = '(H) Creative Arts and Design' OR subject = '(8) Computer Science')
GROUP BY subject

5 Show the subject and total number of students who A_STRONGLY_AGREE to question 22 for each of the subjects '(8) Computer Science' and '(H) Creative Arts and Design'.

SELECT subject,sum(response*(A_STRONGLY_AGREE/100))
  FROM nss
 WHERE question='Q22'
AND (subject='(H) Creative Arts and Design'
   or subject='(8) Computer Science')
group by subject

6 Show the percentage of students who A_STRONGLY_AGREE to question 22 for the subject '(8) Computer Science' show the same figure for the subject '(H) Creative Arts and Design'.

Use the ROUND function to show the percentage without decimal places.

SELECT subject,
       ROUND(SUM(response*A_STRONGLY_AGREE) / SUM(response))
FROM nss
WHERE question = 'Q22'
AND   (subject = '(H) Creative Arts and Design' OR subject = '(8) Computer Science')
GROUP BY subject

7 Show the average scores for question 'Q22' for each institution that include 'Manchester' in the name.

The column score is a percentage - you must use the method outlined above to multiply the percentage by the response and divide by the total response. Give your answer rounded to the nearest whole number.

SELECT institution,
       ROUND(SUM(score*response) / SUM(response))
FROM nss
WHERE question = 'Q22'
AND   institution LIKE '%Manchester%'
GROUP BY institution
ORDER BY institution

8 Show the institution, the total sample size and the number of computing students for institutions in Manchester for 'Q01'.

在where后加 subject = '(8) Computer Science' 约束或者使用子查询均无法实现查处计算机学生数的要求

SELECT institution,
       SUM(sample),
       SUM(CASE WHEN subject = '(8) Computer Science' THEN sample ELSE NULL END)
FROM nss
WHERE question = 'Q01'
AND   (institution LIKE '%Manchester%')
GROUP BY institution

你可能感兴趣的:(SQL练习_6 | 8 | SQLZOO_20191021)