MySQL功课,加入两个表

时间:2015-11-21 05:37:07

标签: mysql

我在完成我的最后一个问题时遇到了一些麻烦。如果有人能提供帮助,我会非常感激。

查询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

之后我几乎被困住了。我是否需要将联合转换为新表,然后使用我的原始代码?

1 个答案:

答案 0 :(得分:0)

您必须将两个表联合起来(请注意列数和顺序应该相同),然后将其用作子查询,然后根据需要获取count / avg。请注意,我已从表2中添加了CUS_BALANCE,因为我们希望根据您的数据进行平均,检查和修改。

Date

注1:由于您使用的是聚合函数count / avg,您也必须使用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; 子句,否则会导致错误。