【发布时间】:2020-04-13 18:28:58
【问题描述】:
我正在学习 SQL (Postgres),但我对我正在尝试做的事情有点困惑。
我有以下表格。员工:
fname | minit | lname | ssn | bdate | address | sex | salary | super_ssn | dno
----------+-------+---------+-----------+------------+-------------------------+-----+----------+-----------+-----
James | E | Borg | 888665555 | 1937-11-10 | 450 Stone, Houston TX | M | 55000.00 | | 1
John | B | Smith | 123456789 | 1965-01-09 | 731 Fondren, Houston TX | M | 30000.00 | 333445555 | 5
Franklin | T | Wong | 333445555 | 1955-12-08 | 638 Voss, Houston TX | M | 40000.00 | 888665555 | 5
Alicia | J | Zelaya | 999887777 | 1968-01-19 | 3321 Castle, Spring TX | F | 25000.00 | 987654321 | 4
Jennifer | S | Wallace | 987654321 | 1941-06-20 | 291 Berry, Bellaire TX | F | 43000.00 | 888665555 | 4
Ramesh | K | Narayan | 666884444 | 1962-09-15 | 975 Fire Oak, Humble TX | M | 38000.00 | 333445555 | 5
Joyce | A | English | 453453453 | 1972-07-31 | 5631 Rice, Houston TX | F | 25000.00 | 333445555 | 5
Ahmad | V | Jabbar | 987987987 | 1969-03-29 | 980 Dallas, Houston TX | M | 25000.00 | 987654321 | 4
项目:
pname | pnumber | plocation | dnum
-----------------+---------+-----------+------
ProductX | 1 | Bellaire | 5
ProductY | 2 | Sugarland | 5
ProductZ | 3 | Houston | 5
Computerization | 10 | Stafford | 4
Reorganization | 20 | Houston | 1
Newbenefits | 30 | Stafford | 4
部门:
dname | dnumber | mgr_ssn | mgr_start
----------------+---------+-----------+------------
Research | 5 | 333445555 | 1988-05-22
Administration | 4 | 987654321 | 1995-01-01
Headquarters | 1 | 888665555 | 1981-06-19
还有works_on:
essn | pno | hours
-----------+-----+-------
123456789 | 1 | 32.5
123456789 | 2 | 7.5
666884444 | 3 | 40.0
453453453 | 1 | 20.0
453453453 | 2 | 20.0
333445555 | 2 | 10.0
333445555 | 3 | 10.0
333445555 | 10 | 10.0
333445555 | 20 | 10.0
999887777 | 30 | 30.0
999887777 | 10 | 10.0
987987987 | 10 | 35.0
987987987 | 30 | 5.0
987654321 | 30 | 20.0
987654321 | 20 | 15.0
888665555 | 20 | 0.0
为此,我尝试做一些稍微复杂的事情:创建一个视图,其中包含项目名称、部门名称、员工人数以及每个项目的总工作时数,并且每个项目都具有多个员工的标准.我读了一些书,做了一些基本的count(*) 和sum(*),但这里的语法让我很生气。
这是我经过数小时试图了解此语法的运作方式后得到的最远的结果:
SELECT
p.pname AS "Project",
d.dname AS "Department",
count(w.essn) AS "# of Employees",
sum(w.hours) AS "Total Hours"
FROM project p JOIN works_on w
ON p.pnumber = w.pno
JOIN department d
ON d.dnumber = p.dnum
WHERE w.essn > 1
WHERE 子句显然是错误的。我想我的JOINS 是正确的。如何将这些聚合函数与所有这些连接正确地放在一起?我需要嵌套查询吗?我找到了一些使用HAVING 的示例,但我听说它是遗留的,并且想使用更新和新鲜的东西,但除了使用GROUP BY 和HAVING 之外没有找到其他示例。那些好用吗?如果没有,我应该使用什么?
请,谢谢。
【问题讨论】:
标签: sql postgresql join group-by count