2012-11-23 23 views
0

我一直在試圖編寫一個查詢的最後幾個小時,我無法弄清楚,我是新來的SQL和答案會在我瘋狂之前,我會非常感激。無法弄清楚如何編寫查詢,非常感謝

這裏是我的表,

CREATE TABLE offences (
oOffenceID VARCHAR (30), 
oDescription VARCHAR (200), 
oMaximumFine INT (10), 
CONSTRAINT o_pk 
PRIMARY KEY (oOffenceID) 
); 

CREATE TABLE drivers (
dPersonID VARCHAR (30), 
dLicenseNumber INT (20), 
dLicenseRemoved ENUM('yes','no'), 
dExpiryDate DATE, 
CONSTRAINT d_pk 
PRIMARY KEY (dLicenseNumber), 
CONSTRAINT d_fk 
FOREIGN KEY (dPersonId) 
REFERENCES People (pPersonID) 
); 

CREATE TABLE people (
pPersonID VARCHAR (30), 
pName VARCHAR (30), 
pAddress VARCHAR (50), 
pNIN VARCHAR (30), 
CONSTRAINT p_pk 
PRIMARY KEY (pPersonID) 
); 

CREATE TABLE vehicle (
vOwnerID VARCHAR (30), 
vColour VARCHAR (30), 
vModel VARCHAR (30), 
vMake VARCHAR (30), 
vVehicleID VARCHAR (30), 
CONSTRAINT v_pk 
PRIMARY KEY (vVehicleID), 
CONSTRAINT v_fk 
FOREIGN KEY (vOwnerID) 
REFERENCES People (pPersonID) 
); 

CREATE TABLE fines (
fFineID INT (30) AUTO_INCREMENT, 
fVehicleID VARCHAR (30), 
fPersonID VARCHAR (30), 
fTime DATE, 
fAmount INT (10), 
fOfficerStatement VARCHAR (500), 
fOffenceID VARCHAR (30), 
CONSTRAINT f_pk 
PRIMARY KEY (fFineID), 
CONSTRAINT f_fk 
FOREIGN KEY (fVehicleID) 
REFERENCES vehicle (vVehicleID), 
CONSTRAINT f_fk1 
FOREIGN KEY (fPersonID) 
REFERENCES people (pPersonID), 
CONSTRAINT f_fk2 
FOREIGN KEY (fOffenceID) 
REFERENCES offences (oOffenceID) 
); 

我需要一個查詢,顯示汽車VehicleID,業主的姓名和累計已累計超過1000罰款的所有車的罰款總額。任何人都可以看到如何做到這一點?

回答

2

希望這將讓你在正確的方向前進:

select fVehicleId,p.pName,sum(fi.totalFines) as totalFinesOver1000ForPerson 
from 
(select fVehicleId,sum(fAmount) as totalFines 
from fines f 
group by fVehicleId 
having sum(fAmount) > 1000) fi 
inner join vehicle v on v.vVehicleID = fi.fVehicleId 
inner join people p on v.vOwnerId = p.pPersonId 
group by fVehicleId,p.pName; 
+0

三江源,我們嘗試理解怎麼回事.. – user1744093

+0

可能我問這是否意思是p.pName,就像p中的一樣。意味着在pName之前? – user1744093

+0

也許它只是說它來自哪裏「人」.. – user1744093

0
Select a.vVehicleID, 
     b.pName, 
     sum(d.fAmount) fine 
from vehicle a,people b,fines d,drivers e 
where a.vVehicleID=d.vVehicleID and d.fPersonID=e.dPersonID and d.fPersonID=a.vOwnerID and 
     b.pPersonID = e.dPersonID 
group by a.vVehicleID,b.pNamem 
having fine > 1000; 

這應該工作