【问题标题】:SQL Oracle Select, Count, and Inner JoinSQL Oracle 选择、计数和内连接
【发布时间】:2023-03-23 21:11:02
【问题描述】:

根据客户在销售表中购买多于一辆车的时间,创建显示客户表中的 customerID、customerFirName 和 customerZip 的查询时遇到问题。以下是表的创建:

CREATE TABLE CUSTOMERS
(customerID     INT     PRIMARY KEY,
customerFirName     VARCHAR(20) NOT NULL,
customerLasName     VARCHAR(20) NOT NULL,
customerMiName      VARCHAR(1)  NOT NULL,
customerStreet      VARCHAR(40) NOT NULL,
customerState       VARCHAR(15) NOT NULL,
customerCity        VARCHAR(20) NOT NULL,
customerZip     VARCHAR(15) NOT NULL);

CREATE TABLE SALES
(saleID         INT     PRIMARY KEY,
grossSalePrice      DECIMAL(9,2),
vehicleStatus       VARCHAR(10) NOT NULL CHECK (lower(vehicleStatus) IN ('available', 'sold', 'pending')),
saleDate        DATE,
saleMileage     INT,
customerID      INT,
salespersonID       INT,
vehicleVIN      VARCHAR(25),
CONSTRAINT SALES_FK1 FOREIGN KEY (customerID) REFERENCES CUSTOMERS(customerID);

这是所需的输出:

customerID        customerFirName    customerZip    Number_of_Sales
1                 Bob                12345          2
2                 Jim                94949          3
3                 Tom                99330          4

这是我尝试过的......我在创建单个 SELECT 语句时遇到问题,该语句具有内部联接以组合 CUSTOMERS.customerID 字段上的 SALES.customerID 字段。我哪里错了?谢谢!

SELECT CUSTOMERS.customerFirName, CUSTOMERS.CustomerID, CUSTOMERS.customerZip, COUNT(SALES.customerID)
FROM CUSTOMERS
INNER JOIN SALES ON CUSTOMERS.customerID=SALES.customerID
GROUP BY SALES.customerID
HAVING COUNT(SALES.customerID) > 1;

与

SELECT COUNT (CUSTOMERS.customerID), customerFullName, customerZip
FROM CUSTOMERS
INNER JOIN SALES ON CUSTOMERS.customerID=SALES.customerID
GROUP BY SALES.customerID
HAVING COUNT(SALES.customerID) > 1;

【问题讨论】:

    标签: oracle join count


    【解决方案1】:

    也许只是在子选择中进行计数:

    select * from
    (SELECT CUSTOMERS.customerFirName, CUSTOMERS.CustomerID, CUSTOMERS.customerZip, COUNT(*) num_sales
    FROM CUSTOMERS
    INNER JOIN SALES ON CUSTOMERS.customerID=SALES.customerID
    GROUP BY CUSTOMERS.customerFirName, CUSTOMERS.CustomerID, CUSTOMERS.customerZip)
    where num_sales > 1;
    

    【讨论】:

      【解决方案2】:

      我猜这个问题在group by 字段上。

      SELECT CUSTOMERS.customerFirName, CUSTOMERS.CustomerID, CUSTOMERS.customerZip, 
      COUNT(SALES.customerID)
      FROM CUSTOMERS
      INNER JOIN SALES ON CUSTOMERS.customerID=SALES.customerID
      GROUP BY CUSTOMERS.customerFirName, CUSTOMERS.CustomerID, CUSTOMERS.customerZip
      HAVING COUNT(SALES.customerID) > 1;
      

      【讨论】:

      • !!!!!!哇。我是个假人。不敢相信我错过了 - 感谢一百万,有时您需要的只是有人指出您忽略的错误。
      • 我很高兴。我可以帮助你!
      猜你喜欢
      • 1970-01-01
      • 2020-03-12
      • 1970-01-01
      • 1970-01-01
      • 2018-08-20
      • 1970-01-01
      • 2013-01-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多