我在解决硬件上的最后一个问题时遇到了一些麻烦。如果有人可以提供帮助,我将非常感激。
查询 4: 编写并运行一条 SQL 语句,按区号按平均余额降序显示客户数量和客户平均余额。
SELECT
SELECT CUS_AREACODE AS "Area Code", COUNT(CUS_CODE) "# of Customers", ROUND(AVG(CUS_BALANCE),2) "Average Balance",
FROM CUSTOMER
ORDER BY CUS_BALANCE DESC;
还有第二个表 CUSTOMER_2,我不知道如何加入该表。代码不再工作了。我一直在尝试加入,现在它告诉我我缺少 FROM 的表达式。 TIA
Columns for tables
CREATE TABLE CUSTOMER (
CUS_CODE NUMBER PRIMARY KEY,
CUS_LNAME VARCHAR(15) NOT NULL,
CUS_FNAME VARCHAR(15) NOT NULL,
CUS_INITIAL CHAR(1),
CUS_AREACODE CHAR(3) DEFAULT '615' NOT NULL CHECK(CUS_AREACODE IN ('615','713','931')),
CUS_PHONE CHAR(8) NOT NULL,
CUS_BALANCE NUMBER(9,2) DEFAULT 0.00,
CONSTRAINT CUS_UI1 UNIQUE(CUS_LNAME,CUS_FNAME));
CREATE TABLE CUSTOMER_2 (
CUS_CODE NUMBER PRIMARY KEY,
CUS_LNAME VARCHAR(15) NOT NULL,
CUS_FNAME VARCHAR(15) NOT NULL,
CUS_INITIAL CHAR(1),
CUS_AREACODE CHAR(3),
CUS_PHONE CHAR(8));
按照建议,我相信我应该建立一个联盟,但我不确定在创建联盟后如何编码
SELECT CUS_CODE, CUS_AREACODE
FROM CUSTOMER
UNION ALL
SELECT CUS_CODE, CUS_AREACODE
FROM CUSTOMER_2
在那之后我几乎陷入困境。我是否需要将联合转换为新表,然后使用我的原始代码?
最佳答案
您必须对两个表进行并集(请注意,列数和顺序应该相同),然后将其用作子查询,然后根据需要获取计数/平均值。请注意,我从表 2 中添加了 CUS_BALANCE,因为我们希望将其作为平均值,并根据您的数据进行检查和修改。
SELECT sq.CUS_AREACODE AS "Area Code"
, COUNT(sq.CUS_CODE) "# of Customers"
, ROUND(AVG(sq.CUS_BALANCE),2) "Average Balance"
FROM (SELECT CUS_CODE
, CUS_AREACODE
, CUS_BALANCE
FROM CUSTOMER
UNION ALL
SELECT CUS_CODE
, CUS_AREACODE
, CUS_BALANCE
FROM CUSTOMER_2) as sq --alias to the subquery
GROUP BY sq.CUS_AREACODE --required for aggregate functions
ORDER BY sq.CUS_AREACODE
, sq.CUS_BALANCE DESC;
注意1:由于您使用的是聚合函数 count/avg,因此您还必须使用 GROUP BY
子句,否则会导致错误。
关于MySQL作业,连接两个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33840086/