SQL新手,我试图让表格打印出拥有特定品牌/型号组合的所有人员的工资,品牌和汽车型号的总和。截至目前,该表将打印出所有“汽车品牌”和“型号”值,但SumWage列均为NULL。 SumWage应该返回具有Make / Model组合的人员的所有工资的总和。(我的select语句始终位于代码底部)?非常感谢所有建议!
IF OBJECT_ID ('Person', 'U') IS NULL
BEGIN
CREATE TABLE Person (
ID INT NOT NULL PRIMARY KEY,
Name VARCHAR(32),
BirthDate DATETIME
);
INSERT INTO Person
( ID, Name, BirthDate )
VALUES
(311113, 'Dan Lu', '01-22-33'),
(123456, 'Seven Durant', '07-22-94'),
(100100, 'Choochootrain Lu', '12-17-56'),
(106542, 'Spider Ru', '07-22-36'),
(101010, 'Ru Ru', '04-30-84');
END
IF OBJECT_ID ('Job', 'U') IS NULL
BEGIN
CREATE TABLE Job (
ID INT NOT NULL PRIMARY KEY,
Company VARCHAR(64),
Wage FLOAT,
PersonID INT FOREIGN KEY REFERENCES Person(ID)
);
INSERT INTO Job
( ID, Company, Wage, PersonID )
VALUES
(01, 'Space Pizza Space', 1000.00, 311113),
(02, 'Bread', 46.44, 101010),
(03, 'Delivery Service', 400.99, 100100),
(04, 'Nike', 999900.01, 106542),
(05, 'Old McDonald', 6500210.77, 123456);
END
IF OBJECT_ID ('Car', 'U') IS NULL
BEGIN
CREATE TABLE Car (
ID INT NOT NULL PRIMARY KEY,
Make VARCHAR(32),
Model VARCHAR(32)
);
INSERT INTO Car
( ID, Make, Model )
VALUES
(1234, 'Lexus', 'SE'),
(4444, 'Tesla', 'X'),
(5007, 'Chevy', 'Cobalt'),
(7771, 'Ford', 'Runner'),
(6459, 'Toyota', 'Camry');
END
IF OBJECT_ID ('PersonCar', 'U') IS NULL
BEGIN
CREATE TABLE PersonCar (
ID INT,
PersonID INT FOREIGN KEY REFERENCES Person(ID),
CarID INT
);
INSERT INTO PersonCar
( ID, PersonID, CarID )
VALUES
(1, 311113, 1234),
(2, 123456, 4444),
(3, 100100, 5007),
(4, 106542, 7771),
(5, 101010, 6459);
END
SELECT SUM(Wage) AS SumWages, Car.Make, Car.Model
FROM Person
INNER JOIN PersonCar
ON PersonCar.ID = Person.ID
INNER JOIN Job
ON Job.PersonID = PersonCar.ID
Right JOIN Car
ON Car.ID = Person.ID
GROUP BY Wage, Make, Model;
我认为您想要:
SELECT SUM(j.Wage) AS SumWages, c.Make, c.Model
FROM Car c
LEFT JOIN PersonCar pc ON pc.CarID = c.ID
LEFT JOIN Job j ON j.PersonID = pc.PersonID
GROUP BY c.Make, c.Model;
这将选择所有Car
,并遵循与表的关系,该表包含每个车主的Wage
。数据按汽车模型和模型汇总,然后将相应的工资相加。
当给定的品牌/型号元组没有车主时,总和显示为null
(如果只想从结果集中删除这些行,请使用INNER JOIN
s而不是LEFT JOIN
s)。
请注意,您不需要携带Person
表即可获取此结果集。
嘿,您的JOIN似乎有一些错误看看是否像下面那样将“ JOIN”切换为“ ON”并将最后一个JOIN从“ RIGHT”更改为“ INNER”是否对您有用。
SELECT
SUM(Job.Wage) AS SumWages
, Car.Make
, Car.Model
FROM
Person
INNER JOIN PersonCar
ON PersonCar.PersonID = Person.ID
INNER JOIN Job
ON Job.PersonID = PersonCar.ID
INNER JOIN Car
ON Car.ID = PersonCar.CarID
GROUP BY SumWages, Make, Model
;