我在查询此任务时遇到了一些麻烦。有人请帮助我。
创建执行以下任务的SQL语句:
(a)创建OfficeStaff表,同时考虑到OfficeNumber可能不是NULL并且必须在 范围[1..10]。
(b)查找已经修复的汽车所有者的名称,即名字和姓氏。 最多次。
(c)找出修理“欧宝”牌汽车的平均花费小时数(即Repairs.Hours)。
(d)对于工资为100欧元或以上的所有机械师,将每小时价格更新为20欧元。
我的尝试: (a)创建OfficeStaff表,同时考虑到OfficeNumber可能不是NULL并且必须在[1..10]范围内。
CREATE TABLE OfficeStaff (
EID INT PRIMARY KEY,
Firstname TEXT,
Lastname TEXT,
Wage REAL,
OfficeNumber INT NOT NULL,
CONSTRAINT CK_OfficeNumber CHECK (OfficeNumber BETWEEN 1 AND 10)
b)不知道?!
(c)找出修理“欧宝”牌汽车的平均花费小时数(即Repairs.Hours)。
SELECT AVG(R.Hours)
FROM Repairs R, Cars C
WHERE R.License = C.License AND C.Brand = “Opel”
(d)对于工资为100欧元或以上的所有机械师,将每小时价格更新为20欧元。
UPDATE Mechanic
SET HourlyPrice = 20
WHERE Wage >= 100
答案 0 :(得分:0)
(a)如何创建可以查看here
CREATE TABLE OfficeStaff (
EID INT PRIMARY KEY,
Firstname varchar(100),
Lastname varchar(100),
Wage decimal(15,2),
OfficeNumber INT NOT NULL,
CONSTRAINT CK_OfficeNumber CHECK (OfficeNumber BETWEEN 1 AND 10)
)
(b)对此不确定,但您必须使用rank
来获取相同值中的1个值。为此,您可以查看here
WITH cte AS (
SELECT a.Firstname, a.Lastname, rank() OVER (ORDER BY count(c.Hours)) AS rnk
from Customers as a
join Own as b
on a.CID=b.CID
join Repairs as c
on b.License = c.License
group by a.Firstname, a.Lastname
)
SELECT *
FROM cte
WHERE rnk <= 1;
(c)加入使用here
SELECT AVG(R.Hours)
FROM Repairs R
join Cars C
on R.license=C.license
WHERE C.Brand = 'Opel'
UPDATE Mechanic
SET HourlyPrice = 20
from Employees
WHERE Mechanic.EID = Employees.EID
AND Employees.Wage >= 100