Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 从三个单独的表中提取数据的一些问题_Sql - Fatal编程技术网

Sql 从三个单独的表中提取数据的一些问题

Sql 从三个单独的表中提取数据的一些问题,sql,Sql,有人向我提出了一个问题: 编写一个SQL命令,为每个拥有总计 所有行程的距离超过100,员工姓名, 员工在所有行程中使用的总升数。(修订) 行程的升数是距离Inkm除以每升公里数。) 对于以下数据集: 我或多或少碰到了一堵砖墙。我之前有一个类似的问题,最终有一个用户告诉我用一个内部联接来解决这个问题,从那以后我一直在这样做,但这个问题唯一要求的是来自所有三个表的数据。这是我的解决方案: SELECT DISTINCT E.NAME, sum(T.distanceInKM/C.kmPerLitr

有人向我提出了一个问题:

编写一个SQL命令,为每个拥有总计 所有行程的距离超过100,员工姓名, 员工在所有行程中使用的总升数。(修订) 行程的升数是距离Inkm除以每升公里数。)

对于以下数据集:

我或多或少碰到了一堵砖墙。我之前有一个类似的问题,最终有一个用户告诉我用一个内部联接来解决这个问题,从那以后我一直在这样做,但这个问题唯一要求的是来自所有三个表的数据。这是我的解决方案:

SELECT DISTINCT E.NAME, sum(T.distanceInKM/C.kmPerLitre)
FROM Employe E, TravelCost T, CAR C
GROUP BY T.distanceInKm,E.name,C.kmPerLitre
HAVING SUM(distanceInKM) > 100;
(请忽略小的差异;我的Employee表名为Employe,我的distanceSinceService列名为“distance”)


但这给了我绝对疯狂的输出,我不知道到底发生了什么。我们在课堂上做了一些分组练习,但没有一个比这更难,所以我有点被卡住了。

这是一个加入表格的版本,应该会给你带来你想要的

SELECT E.NAME
     , SUM(T.distanceInKM/C.kmPerLitre) AS NumLitres
     , SUM(T.distanceInKM) AS TotalDistanceInKm
  FROM Employe E
 INNER
  JOIN TravelCost T
    ON E.id = T.employeeId
 INNER 
  JOIN CAR C
    ON T.carRegNo = C.regNo
 GROUP 
    BY E.name
HAVING SUM(T.distanceInKM) > 100
;

希望这对您有所帮助

这是一个连接您的表的版本,应该能满足您的期望

SELECT E.NAME
     , SUM(T.distanceInKM/C.kmPerLitre) AS NumLitres
     , SUM(T.distanceInKM) AS TotalDistanceInKm
  FROM Employe E
 INNER
  JOIN TravelCost T
    ON E.id = T.employeeId
 INNER 
  JOIN CAR C
    ON T.carRegNo = C.regNo
 GROUP 
    BY E.name
HAVING SUM(T.distanceInKM) > 100
;
希望这有帮助

像这样尝试:

DECLARE @Employee TABLE(id INT,name VARCHAR(100));
INSERT INTO @Employee VALUES
 (1,'Smith')
,(2,'Patel')
,(6,'Bennett')
,(7,'Booch');

DECLARE @Car TABLE(regNo VARCHAR(100),distanceSinceService INT,kmPerLitre FLOAT);
INSERT INTO @Car VALUES
 ('FF06DDS',122,10)
,('EE07SSA',110,8)
,('FG07BAK',165,7)
,('HH08BBW',0,12);

DECLARE @TravelCost TABLE(jouneyID INT,carRegNo VARCHAR(100),employeeID INT,occured DATE,distanceInKm FLOAT);
INSERT INTO @TravelCost VALUES
 (4,'FF06DDS',1,{d'2007-07-11'},90)
,(6,'FG07BAK',2,{d'2007-07-21'},110)
,(11,'EE07SSA',6,{d'2007-07-21'},110)
,(12,'FF06DDS',1,{d'2007-09-05'},32)
,(21,'FG07BAK',7,{d'2007-09-05'},55);

SELECT e.name AS Employee
      ,SUM(tc.distanceInKm) AS SumKm
      ,SUM(tc.distanceInKm/c.kmPerLitre) AS UsedGasoline 
FROM @TravelCost AS tc
INNER JOIN @Car AS c ON tc.carRegNo=c.regNo
INNER JOIN @Employee AS e ON tc.employeeID=e.id
GROUP BY e.name
HAVING SUM(tc.distanceInKm)>100;
结果

Employee    SumKm   UsedGasoline
Bennett     110     13,75
Patel       110     15,71
Smith       122     12,2
试着这样做:

DECLARE @Employee TABLE(id INT,name VARCHAR(100));
INSERT INTO @Employee VALUES
 (1,'Smith')
,(2,'Patel')
,(6,'Bennett')
,(7,'Booch');

DECLARE @Car TABLE(regNo VARCHAR(100),distanceSinceService INT,kmPerLitre FLOAT);
INSERT INTO @Car VALUES
 ('FF06DDS',122,10)
,('EE07SSA',110,8)
,('FG07BAK',165,7)
,('HH08BBW',0,12);

DECLARE @TravelCost TABLE(jouneyID INT,carRegNo VARCHAR(100),employeeID INT,occured DATE,distanceInKm FLOAT);
INSERT INTO @TravelCost VALUES
 (4,'FF06DDS',1,{d'2007-07-11'},90)
,(6,'FG07BAK',2,{d'2007-07-21'},110)
,(11,'EE07SSA',6,{d'2007-07-21'},110)
,(12,'FF06DDS',1,{d'2007-09-05'},32)
,(21,'FG07BAK',7,{d'2007-09-05'},55);

SELECT e.name AS Employee
      ,SUM(tc.distanceInKm) AS SumKm
      ,SUM(tc.distanceInKm/c.kmPerLitre) AS UsedGasoline 
FROM @TravelCost AS tc
INNER JOIN @Car AS c ON tc.carRegNo=c.regNo
INNER JOIN @Employee AS e ON tc.employeeID=e.id
GROUP BY e.name
HAVING SUM(tc.distanceInKm)>100;
结果

Employee    SumKm   UsedGasoline
Bennett     110     13,75
Patel       110     15,71
Smith       122     12,2

试试这个。实际上,我不确定它是否通过了语法检查,但如果通过了-耶!:D

SELECT e.Name,
sum(t.DistanceInKm) DistanceInKm,
sum(t.DistanceInKm) / c.KmPerLitre FuelSpent
FROM TravelCost t JOIN Employee e ON t.EmployeeId = e.Id
JOIN Car c ON t.CarRegNo = c.RegNo
GROUP BY e.Name, c.KmPerLitre
HAVING sum(t.DistanceInKm) > 100;

试试这个。实际上,我不确定它是否通过了语法检查,但如果通过了-耶!:D

SELECT e.Name,
sum(t.DistanceInKm) DistanceInKm,
sum(t.DistanceInKm) / c.KmPerLitre FuelSpent
FROM TravelCost t JOIN Employee e ON t.EmployeeId = e.Id
JOIN Car c ON t.CarRegNo = c.RegNo
GROUP BY e.Name, c.KmPerLitre
HAVING sum(t.DistanceInKm) > 100;

您的sql语句没有真正连接任何列上的表。我不知道是否可以将3个表连接在一起。通过稍微修改我的表格,我可以让它返回行程超过100公里的员工的ID,但我不确定如何正确获得每公里升数的平均值。请务必说明RDBMS(供应商和版本),请不要将样本数据粘贴为图片。这使得设置场景变得非常困难…对此表示抱歉。无论如何,我想我已经解决了我自己的问题,不确定我得到的数据是否正确。我确信我找到了正确的员工,但我没有时间检查这是否正确。因此,我将谨慎地回答我自己的问题。一般来说,当涉及到GROUP BY时:不用于设置函数的参数的选定列是应该在GROUP BY子句中列出的列。您的sql语句并没有真正连接任何列上的表。我不知道是否可以将3个表连接在一起。通过稍微修改我的表格,我可以让它返回行程超过100公里的员工的ID,但我不确定如何正确获得每公里升数的平均值。请务必说明RDBMS(供应商和版本),请不要将样本数据粘贴为图片。这使得设置场景变得非常困难…对此表示抱歉。无论如何,我想我已经解决了我自己的问题,不确定我得到的数据是否正确。我确信我找到了正确的员工,但我没有时间检查这是否正确。因此,我将谨慎地回答我自己的问题。一般来说,当涉及到GROUP BY时:不用于设置函数的参数的选定列是应该在GROUP BY子句中列出的列。是的,刚刚注意到我的ommitted Smith,可能是由于不必要的GROUP BY。我会选择这个作为正确答案,并删除我自己的答案。你比我快:-)+1从我这边我不确定这是否正确,因为你不想以每升c.Km求和。是的,刚刚注意到我的答案是史密斯,可能是因为不必要的分组。我会选择这个作为正确答案,并删除我自己的答案。你比我快:-)+1从我这边我不确定这是否正确,因为你不想以每升c.Km求和。