我正在完成我的作业,并且无法找出“NOT IN”功能的正确语法。
该数据库是一个小型保险数据库(运营商,成员,雇主,计划),用于此项任务。我应该“列出所有运营商和他们拥有的计划数量。(使用右或左连接)。列出carrier_id,carname和计划数。”
这就是我现在所写的:
SELECT carrier_id, carname, count(*) AS NoPlans
FROM carriers RIGHT JOIN plans
ON carriers.carrier_id = plans.carrierid;
当我尝试运行它时会抛出“不是单组组函数”错误,但那是因为我认为它正在寻找一个WHERE子句,我不知道应该是什么条件。
承运人表结构:
Name Null Type
------------------------------ -------- -----------
CARRIER_ID NOT NULL CHAR(4)
CARNAME CHAR(35)
CARADDRESS CHAR(50)
CARCITY CHAR(30)
CARSTCODE CHAR(2)
CARZIP CHAR(10)
CARPHONE CHAR(10)
CARWEBSITE CHAR(255)
CARCONTACTFIRSTNAME CHAR(35)
CARCONTACTLASTNAME CHAR(35)
CARCONTACTEMAIL CHAR(255)
11 rows selected
计划表格结构:
Name Null Type
------------------------------ -------- -------------
PLANID NOT NULL NUMBER
PLNDESCRIPTION CHAR(35)
PLNCOST NUMBER(8,2)
CARRIERID CHAR(4)
4 rows selected
答案 0 :(得分:2)
count
需要group by
条款。
您还应该考虑加入。它可能没有达到你期望的效果。
答案 1 :(得分:2)
SELECT carrier_id, carname, count(*) AS NoPlans
FROM carriers RIGHT JOIN plans
ON carriers.carrier_id = plans.carrierid
GROUP BY carrier_id, carname;
答案 2 :(得分:0)
SELECT c.carrier_id, c.carname, count(1) as no_plans
FROM carriers c RIGHT JOIN plans p
ON c.carrier_id = p.carrierid
group by c.carrier_id , c.carname
答案 3 :(得分:0)
SELECT carrier_id, carname, count(plans.PLANID) AS NoPlans
FROM carriers LEFT JOIN plans
ON carriers.carrier_id = plans.carrierid
GROUP BY carrier_id, carname