SQL求助,不知道用什么函数
SQL help, not sure of what function to use
所以这里我有一个 SQL 查询,我试图用它来查找在项目中工作时间最长的工人
SELECT pw.project_id, pw.worker_id, w.worker_name, DATEDIFF(leavedate, joindate) 'Time Worked in Days'
FROM projectworker pw
INNER JOIN worker w ON pw.worker_id=w.worker_id
当我 运行 查询时,我得到这个:
project_id worker_id workername Time Worked in Days
1 1 mx 9
1 1 mx 1087
1 2 red 740
1 3 fed 1522
2 5 meo 1847
2 12 bull 1462
4 3 fed 1126
4 6 mao 4018
4 7 polly 1858
4 3 fed 3318
5 8 max 365
5 9 drudge 731
5 10 max 33
5 12 bull 428
5 1 mx 793
因此,正如您在项目 1 中看到的那样,工人 1 (mx) 工作了两次,一次工作 9 天,一次工作 1087 天。我想知道如何设置我的查询,以便他的名字只显示一次,并且它结合了他的工作时间(因此它显示 1096)。我尝试使用 SELECT DISTINCT 但这给了我一个错误。有什么建议么?对不起,如果这是一个微不足道的问题,我是 SQL 的新手!提前致谢!
您需要使用 GROUP BY
。要分组的字段是 projectId
、workerId
,然后是 select 时间总和
SELECT pw.project_id, pw.worker_id, w.worker_name, SUM(DATEDIFF(leavedate, joindate)) 'Time Worked in Days'
FROM projectworker pw
INNER JOIN worker w ON pw.worker_id=w.worker_id
GROUP BY pw.project_id, pw.worker_id, w.worker_name
你必须加总工作时间。结果将以工作时间最长的顺序排列。
SELECT pw.project_id, pw.worker_id, w.worker_name,
SUM(DATEDIFF(leavedate, joindate)) 'Time Worked in Days'
FROM projectworker pw
INNER JOIN worker w ON pw.worker_id=w.worker_id
group by pw.project_id, pw.worker_id, w.worker_name
order by SUM(DATEDIFF(leavedate, joindate)) desc
所以这里我有一个 SQL 查询,我试图用它来查找在项目中工作时间最长的工人
SELECT pw.project_id, pw.worker_id, w.worker_name, DATEDIFF(leavedate, joindate) 'Time Worked in Days'
FROM projectworker pw
INNER JOIN worker w ON pw.worker_id=w.worker_id
当我 运行 查询时,我得到这个:
project_id worker_id workername Time Worked in Days
1 1 mx 9
1 1 mx 1087
1 2 red 740
1 3 fed 1522
2 5 meo 1847
2 12 bull 1462
4 3 fed 1126
4 6 mao 4018
4 7 polly 1858
4 3 fed 3318
5 8 max 365
5 9 drudge 731
5 10 max 33
5 12 bull 428
5 1 mx 793
因此,正如您在项目 1 中看到的那样,工人 1 (mx) 工作了两次,一次工作 9 天,一次工作 1087 天。我想知道如何设置我的查询,以便他的名字只显示一次,并且它结合了他的工作时间(因此它显示 1096)。我尝试使用 SELECT DISTINCT 但这给了我一个错误。有什么建议么?对不起,如果这是一个微不足道的问题,我是 SQL 的新手!提前致谢!
您需要使用 GROUP BY
。要分组的字段是 projectId
、workerId
,然后是 select 时间总和
SELECT pw.project_id, pw.worker_id, w.worker_name, SUM(DATEDIFF(leavedate, joindate)) 'Time Worked in Days'
FROM projectworker pw
INNER JOIN worker w ON pw.worker_id=w.worker_id
GROUP BY pw.project_id, pw.worker_id, w.worker_name
你必须加总工作时间。结果将以工作时间最长的顺序排列。
SELECT pw.project_id, pw.worker_id, w.worker_name,
SUM(DATEDIFF(leavedate, joindate)) 'Time Worked in Days'
FROM projectworker pw
INNER JOIN worker w ON pw.worker_id=w.worker_id
group by pw.project_id, pw.worker_id, w.worker_name
order by SUM(DATEDIFF(leavedate, joindate)) desc