Mysql 查看帮助。从3个表中提取数据

Mysql 查看帮助。从3个表中提取数据,mysql,Mysql,好的,我需要一些关于这个问题的主要帮助。这就是我需要视图所做的。需要取考勤表中DKP_变更列的总和 SELECT SUM(a.DKP_Change) FROM Attendance AS a GROUP BY Name 添加字符表中初始DKP的值 SELECT b.Inital_DKP FROM Characters AS b GROUP BY Name 减去raid丢弃选项卡成本的总和 SELECT SUM(c.Cost) FROM Raid_Drops AS c GROUP BY

好的,我需要一些关于这个问题的主要帮助。这就是我需要视图所做的。需要取考勤表中DKP_变更列的总和

 SELECT SUM(a.DKP_Change) FROM Attendance AS a GROUP BY Name
添加字符表中初始DKP的值

 SELECT b.Inital_DKP FROM Characters AS b GROUP BY Name
减去raid丢弃选项卡成本的总和

 SELECT SUM(c.Cost) FROM Raid_Drops AS c GROUP BY Name
我对视图的概念是完全陌生的,我不确定从哪里开始,视图的名称应该是DKP,列应该是name和Total_DKP,其中Total 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
你可以

  • 在子选择中连接三个表,按
    Name
  • 对每个子选择的结果执行计算
我唯一不完全清楚的是
字符中的名称是否唯一。如果是的话,你可以顺道去看看他们。如果不是,平均值可能会给您带来意想不到的结果

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

name
是否存在于所有表格中?是否有任何
ID
是主键?您可以显示表定义吗?将表的表定义添加到问题中,以便人们可以使用它,或者将您的模式与所需的表保持在sqlfiddle中。是的,每个表中都有“Name”。我已将每个表的
CREATE
命令添加到操作面板中
Characters
表中的
Name
字段为空
UNIQUE
你是对的。当我尝试运行你的代码时,我得到“#1054-字段列表中的未知列'a.DKP_Change'”@user1886669-我已经删除了子选择中的表别名。你能再试一次吗?