1. **题目:** 创建一个名为`employees`的表,包含员工的ID、姓名、部门ID和薪水。编写一个SQL查询,找出每个部门的平均薪水。
**答案和解析:**
SELECT department_id, AVG(salary) AS avg_salary
FROM employees
GROUP BY department_id;
这个查询使用了`GROUP BY`子句按部门ID对数据进行分组,并使用了聚合函数`AVG()`来计算每个部门的平均薪水。
2. **题目:** 在上一个练习的基础上,编写一个SQL查询,找出每个部门中薪水最高的员工的姓名和薪水。
**答案和解析:**
SELECT department_id, MAX(salary) AS max_salary
FROM employees
GROUP BY department_id;
此查询也使用了`GROUP BY`子句按部门ID进行分组,然后使用`MAX()`函数找出每个部门中薪水最高的员工的薪水。
3. **题目:** 编写一个SQL查询,列出超过平均薪水的员工。
**答案和解析:**
SELECT *
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);
这个查询使用了子查询来计算平均薪水,并通过`WHERE`子句筛选出薪水高于平均值的员工。
4. **题目:** 创建一个名为`orders`的表,包含订单的ID、客户ID、订单日期和订单总额。编写一个SQL查询,找出每个客户的订单总额。
**答案和解析:**
SELECT customer_id, SUM(order_amount) AS total_order_amount
FROM orders
GROUP BY customer_id;
这个查询使用了`SUM()`函数来计算每个客户的订单总额,并通过`GROUP BY`子句按客户ID进行分组。
5. **题目:** 编写一个SQL查询,列出在2019年至2020年之间的订单。
**答案和解析:**
SELECT *
FROM orders
WHERE order_date BETWEEN TO_DATE('2019-01-01', 'YYYY-MM-DD') AND TO_DATE('2020-12-31', 'YYYY-MM-DD');
这个查询使用了`BETWEEN`运算符来筛选出订单日期在2019年至2020年之间的订单。
6. **题目:** 编写一个SQL查询,找出每个月的订单总额,并按月份排序。
**答案和解析:**
SELECT EXTRACT(MONTH FROM order_date) AS month, SUM(order_amount) AS total_order_amount
FROM orders
GROUP BY EXTRACT(MONTH FROM order_date)
ORDER BY EXTRACT(MONTH FROM order_date);
这个查询使用了`EXTRACT()`函数提取订单日期中的月份,并通过`GROUP BY`子句按月份进行分组,并按月份排序。
7. **题目:** 创建一个名为`products`的表,包含产品的ID、名称和价格。编写一个SQL查询,找出价格最高的产品。
**答案和解析:**
SELECT *
FROM products
ORDER BY price DESC
FETCH FIRST 1 ROWS ONLY;
这个查询使用`ORDER BY`子句按价格降序排序,并使用`FETCH FIRST`子句获取价格最高的产品。
8. **题目:** 编写一个SQL查询,找出每个产品的销售总额(假设有一个`order_items`表,包含产品ID、订单ID和数量)。
**答案和解析:**
SELECT oi.product_id, SUM(oi.quantity * p.price) AS total_sales
FROM order_items oi
JOIN products p ON oi.product_id = p.product_id
GROUP BY oi.product_id;
这个查询使用了`JOIN`来连接`order_items`和`products`表,并使用了`SUM()`函数计算每个产品的销售总额。
9. **题目:** 创建一个名为`customers`的表,包含客户的ID、姓名和注册日期。编写一个SQL查询,找出每个月注册的客户数量。
**答案和解析:**
SELECT EXTRACT(MONTH FROM registration_date) AS month, COUNT(*) AS customer_count
FROM customers
GROUP BY EXTRACT(MONTH FROM registration_date);
这个查询使用`EXTRACT()`函数提取注册日期中的月份,并使用`GROUP BY`子句按月份进行分组,并计算每个月注册的客户数量。
10. **题目:** 编写一个SQL查询,找出在某个特定月份注册的客户的姓名和注册日期。
**答案和解析:**
SELECT customer_name, registration_date
FROM customers
WHERE EXTRACT(MONTH FROM registration_date) = 4 AND EXTRACT(YEAR FROM registration_date) = 2023;
这个查询使用了`WHERE`子句筛选出注册日期为特定月份的客户,并列出他们的姓名和注册日期。