2012-12-11 39 views
1

好的,我需要這個主題的一些主要幫助。這是我需要的觀點。這需要採取DKP_Change列的總和在考勤表查看幫助。從3個表中提取數據

SELECT SUM(a.DKP_Change) FROM Attendance AS a GROUP BY Name 

從字符表

SELECT b.Inital_DKP FROM Characters AS b GROUP BY Name 

添加初始DKP價值減去突襲的總和下降田部成本

SELECT SUM(c.Cost) FROM Raid_Drops AS c GROUP BY Name 

我對VIEWS的想法完全陌生,我不確定從哪裏開始,視圖的名稱應該是DKP,列應該是Name和Total_DKP,其中總的dkp是計算的從上面的select語句開始。

下面是所有3個表的創建。

CREATE TABLE `Attendance` (
`Date` date NOT NULL, 
`Name` varchar(20) NOT NULL, 
`Hours` int(11) NOT NULL, 
`Penalty` float NOT NULL, 
`Rank` set('Raider','Core','Elite') NOT NULL, 
`Rate` int(11) NOT NULL, 
`DKP_Change` float NOT NULL, 
`RecordNumber` int(11) NOT NULL AUTO_INCREMENT, 
PRIMARY KEY (`RecordNumber`) 
) ENGINE=MyISAM AUTO_INCREMENT=15 DEFAULT CHARSET=latin1 

CREATE TABLE `Characters` (
`ID` int(11) NOT NULL AUTO_INCREMENT, 
`Name` varchar(25) NOT NULL, 
`Class` varchar(25) NOT NULL, 
`Spec` varchar(25) NOT NULL, 
`Position` set('Healer','Tank','DPS') NOT NULL COMMENT 'Healer, Tank, or DPS', 
`Usable` set('Cloth','Mail','Plate') NOT NULL COMMENT 'Type of Usable Armor? Cloth,  Mail, Or Plate', 
`Primary Stat` set('Agility','Strength','Intellect','Healer','Tank') NOT NULL COMMENT  'Used for Sorting Only(ie dps trinket with agility strength dps not eligible)', 
`Initial_DKP` int(11) NOT NULL COMMENT 'DKP given at the start of current tier.', 
`Total_DKP` int(11) NOT NULL COMMENT 'Huge Complicated Mess.', 
PRIMARY KEY (`ID`) 
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=latin1 

CREATE TABLE `Raid_Drops` (
`Record Number` int(11) NOT NULL, 
`Date` date NOT NULL, 
`Name of Item` varchar(25) NOT NULL, 
`Item Slot` enum('Main Hand','Off Hand','Head','Neck','Shoulder','Back','Chest','Wrist','Hands','Waist','Legs','Feet','Ring 1','Ring 2','Trinket 1','Trinket 2') NOT NULL, 
`Player_Name` varchar(25) NOT NULL, 
`Cost` float NOT NULL, 
PRIMARY KEY (`Record Number`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 
+0

是'name'存在於所有的表?有什麼'ID'這是主鍵?你可以顯示錶格的定義嗎? –

+0

將問題表的表定義添加到問題中,以便人們可以使用它或使用sqlfiddle中的所需表保留模式。 – Chella

+0

是'名字'出現在每個表格中。 – Tyler

回答

0

你可以

  • 加入三個表子查詢中,分組對Name
  • 每個子查詢

這不完全只有一部分的結果執行計算對我來說,如果Characters中的名稱是唯一的或不是。如果他們是,你可以放下組。如果不是,AVG可能會給您帶來意想不到的結果。

SQL語句

SELECT sumA 
     , initialB 
     , sumC 
     , sumA + initialB - sumC 
     , a.Name 
FROM (
     SELECT Name, SUM(DKP_Change) AS sumA 
     FROM Attendance 
     GROUP BY Name 
     ) AS a 
     INNER JOIN (
     SELECT Name, Inital_DKP AS initialB 
     FROM Characters 
     ) AS b ON a.Name = b.Name 
     INNER JOIN (
     SELECT Name, SUM(Cost) AS sumC 
     FROM Raid_Drops 
     GROUP BY Name 
     ) AS c ON c.Name = b.Name 
+0

'Characters'表中的'Name'字段是'UNIQUE',你是對的。 – Tyler

+0

當我嘗試運行你的代碼時,我得到了「#1054 - '字段列表'中的未知列'a.DKP_Change'」 – Tyler

+0

@ user1886669 - 我刪除了子查詢中的表別名。你能再試一次嗎? –