5

以下は、私が答える必要があるプロンプトです。

各従業員の顧客数をリストします。適切にラベル付けされた従業員の名前と顧客の数を含め、顧客が最も多い従業員を最初にリストします。

以下は、私の EMPLOYEES テーブルです。

create table EMPLOYEES
    (EmpID    char(4)         unique Not null,
     Ename    varchar(10),
     Job      varchar(9),
     MGR      char(4),
     Hiredate date,
     Salary   decimal(7,2),
     Comm     decimal(7,2),
     DeptNo   char(2)         not null,
         Primary key(EmpID),
         Foreign key(DeptNo) REFERENCES DEPARTMENTS(DeptNo));


insert into EMPLOYEES values (7839,'King','President',null,'17-Nov-11',5000,null,10);
insert into EMPLOYEES values (7698,'Blake','Manager',7839,'01-May-11',2850,null,30);
insert into EMPLOYEES values (7782,'Clark','Manager',7839,'02-Jun-11',2450,null,10);
insert into EMPLOYEES values (7566,'Jones','Manager',7839,'02-Apr-11',2975,null,20);
insert into EMPLOYEES values (7654,'Martin','Salesman',7698,'28-Feb-12',1250,1400,30);
insert into EMPLOYEES values (7499,'Allen','Salesman',7698,'20-Feb-11',1600,300,30);
insert into EMPLOYEES values (7844,'Turner','Salesman',7698,'08-Sep-11',1500,0,30);
insert into EMPLOYEES values (7900,'James','Clerk',7698,'22-Feb-12',950,null,30);
insert into EMPLOYEES values (7521,'Ward','Salesman',7698,'22-Feb-12',1250,500,30);
insert into EMPLOYEES values (7902,'Ford','Analyst',7566,'03-Dec-11',3000,null,20);
insert into EMPLOYEES values (7369,'Smith','Clerk',7902,'17-Dec-10',800,null,20);
insert into EMPLOYEES values (7788,'Scott','Analyst',7566,'09-Dec-12',3000,null,20);
insert into EMPLOYEES values (7876,'Adams','Clerk',7788,'12-Jan-10',1100,null,20);
insert into EMPLOYEES values (7934,'Miller','Clerk',7782,'23-Jan-12',1300,null,10);

以下は私の CUSTOMERS テーブルです。

create table CUSTOMERS
    (CustID      char(6)       unique Not null,
     Name        varchar(45),
     Address     varchar(40),
     City        varchar(30),
     State       varchar(2),
     Zip         varchar(9),
     AreaCode    char(3),
     Phone       varchar (9),
     RepID       char(4)       not null,
     CreditLimit decimal(9,2),
     Primary key(CustID),
         Foreign key(RepID) References EMPLOYEES(EmpID));


insert into CUSTOMERS values (100,'Jocksports','345 Viewridge','Belmont','CA','96711',415,'598-6609',7844,5000);
insert into CUSTOMERS values (101,'TKB Sport Shop','490 Boli Rd.','Redwood City','CA','94061',415,'368-1223',7521,10000);
insert into CUSTOMERS values (102,'Vollyrite','9722 Hamilton','Burlingame','CA','95133',415,'644-3341',7654,7000);
insert into CUSTOMERS values (103,'Just Tennis','Hillview Mall','Burlingame','CA','97544',415,'677-9312',7521,3000);
insert into CUSTOMERS values (104,'Every Mountain','574 Surry Rd.','Cupertino','CA','93301',408,'996-2323',7499,10000);
insert into CUSTOMERS values (105,'K + T Sports','3476 El Paseo','Santa Clara','CA','91003',408,'376-9966',7844,5000);
insert into CUSTOMERS values (106,'Shape Up','908 Sequoia','Palo Alto','CA','94301',415,'364-9777',7521,6000);
insert into CUSTOMERS values (107,'Womens Sports','Valco Village','Sunnyvale','CA','93301',408,'967-4398',7499,10000);
insert into CUSTOMERS values (108,'North Woods Fitness Supply Center','98 Lone Pine Way','Hibbing','MN','55649',612,'566-9123',7844,8000);

以下は私の質問です:

select ename, empId
from EMPLOYEES
where EmpID in
(select count(repid) as NumberOfCustomers
from CUSTOMERS
group by RepID);

クエリが機能しないのはなぜですか?

EMPLOYEES の empid を CUSTOMERS の担当者 ID に一致させ、担当者 ID が CUSTOMERS に表示される回数を数えたいと考えています。EMPLOYEES テーブルが必要な唯一の理由は、Ename を出力するためです。CUSTOMERS テーブルに RepID の数を出力する必要があるため、使用する必要がある構文について混乱しています

4

4 に答える 4

1
SELECT  *
FROM    employees e
CROSS APPLY
        (
        SELECT  COUNT(*)
        FROM    customers c
        WHERE   c.repId = e.empId
        ) cc (cnt)
ORDER BY
        cnt DESC

SQLFiddleでこれを参照してください

サブクエリと同じ:

SELECT  *,
        (
        SELECT  COUNT(*)
        FROM    customers c
        WHERE   c.repId = e.empId
        ) cnt
FROM    employees e
ORDER BY
        cnt DESC
于 2013-04-17T21:36:55.683 に答える
0

これはどうですか?または私は誤解しましたか

 SELECT ename, count(*) as NumCustomers 
FROM Customers INNER JOIN 
 Employees ON customers.repid = employees.empid GROUP BY repid,ename 
 ORDER BY numCustomers DESC
于 2013-04-17T21:43:59.543 に答える
0

内側のクエリには のみがありcount(repid)、これはカウントであり、外側のクエリが必要とする実際の EmployeeID ではありませんwhere EmpID in (xxx)。最終結果でカウントが失われるため、内部クエリでカウントが必要な理由はわかりませんが、これは機能するはずです。

 select ename, empId
 from EMPLOYEES
 where EmpID in (
    select repID
    from CUSTOMERS);
于 2013-04-17T21:34:27.873 に答える