2012-07-23 48 views
2

我有两张桌子。例如第一个表是父表,即包含deptno(主键)和deptname的部门,另一个表是子表,即包含empid,empname, sal和(外键)的雇员。我想加入这两个表格,以获得像deptname这样的输出以及在特定部门工作的员工数量。我尝试使用联接,视图,游标,子查询,组子句等进行查询。我可以使用group by子句获得半数查询的解决方案,以找出特定部门下的员工数量,但无法计算它出了另一半。我怎样才能加入这两张桌子?

部门

deptno deptname 
101  sales 
102  hr 
103  finance 

员工

empid empname sal deptno 
    1  john 1500$ 101 
    2  kevin 1000$ 101 
    3  james 1200$ 101 
    4  ford 700$  102 
    5  david 855$  102 
    6  george 955$  103 

我想用一个SQL查询,显示如下表。

deptname no.of employees 
sales   3 
hr    2 
finance   1 

回答

0

请尝试下面的代码。

select COUNT(*) from tblEmp E inner join tblDept d on d.Deptid=l.Deptid 

希望这能解决您的问题。

+0

这并没有2列,只是一个单一的计数取得预期的结果。 – 2012-07-23 09:10:02

+0

我只是告诉方式做这个休息它取决于人多少列他想从表中获得.. – 2012-07-23 09:13:16

1

希望这有助于

Select deptname, count(1) no_employees 
From table1 t1 
Join table2 t2 on t1.deptno = t2.deptno 
Group By deptname 
Order By Count(1) desc 
+0

谢谢,它的工作。 – 2012-07-23 10:52:24

0

试试这个

select d.deptname,COUNT(*) [no.of employees] 
from employee E join department D 
on E.deptno=D.deptno 
group by d.deptname 
order by COUNT(*) 
+0

感谢您的帮助。 – 2012-07-23 11:29:00

1

SELECT t1.deptname AS DEPTNAME,COUNT(1) “没有。员工的” FROM表1 T1 JOIN表2 T2在T2 .deptno = t1.deptno GROUP BY t1.deptno;

您可以通过执行以下重新创建此:

mysql> 
mysql> CREATE TABLE table1 (deptno INT NOT NULL, deptname VARCHAR(24) NOT NULL, PRIMARY KEY (deptno)); 
Query OK, 0 rows affected (0.01 sec) 

mysql> CREATE TABLE table2 (empid INT NOT NULL, empname VARCHAR(48) NOT NULL, sal VARCHAR(16), deptno INT); 
Query OK, 0 rows affected (0.01 sec) 

mysql> INSERT INTO table1 VALUES (101, "sales"), (102, "hr"), (103, "finance"); 
Query OK, 3 rows affected (0.00 sec) 
Records: 3 Duplicates: 0 Warnings: 0 

mysql> INSERT INTO table2 VALUES (1, "John", "1500$", 101); 
Query OK, 1 row affected (0.01 sec) 

mysql> INSERT INTO table2 VALUES (2, "Kevin", "1200$", 101), (3, "James", "1000$", 101); 
Query OK, 2 rows affected (0.00 sec) 
Records: 2 Duplicates: 0 Warnings: 0 

mysql> INSERT INTO table2 VALUES (4, "Ford", "700$", 102), (5, "David", "855$", 102), (6, "George", "955$", 103); 
Query OK, 3 rows affected (0.00 sec) 
Records: 3 Duplicates: 0 Warnings: 0 

mysql> SELECT t1.deptname AS deptname, COUNT(1) AS "no. of employees" FROM table1 t1 JOIN table2 t2 ON t2.deptno = t1.deptno GROUP BY t1.deptno; 
+----------+------------------+ 
| deptname | no. of employees | 
+----------+------------------+ 
| sales |    3 | 
| hr  |    2 | 
| finance |    1 | 
+----------+------------------+ 
3 rows in set (0.00 sec) 

mysql> 
+0

非常翔实!谢谢。 – 2012-07-23 11:06:25

+0

Kevin,如果接受,请点击答案左边的复选标记。此外,如果非常有用,您也可以单击其左侧的“向上箭头”。谢谢,很高兴帮助。祝你的项目好运。 – 2012-07-23 17:31:04