【问题标题】:SQL Query and Sort From Multiple Tables多表SQL查询和排序
【发布时间】:2018-06-27 21:59:45
【问题描述】:

通过 NOVA Oracle DB 使用 SQL。需要知道如何从多个表中查询并根据最高值排序来排列结果。下面是几行代码来反映这三个表:

INSERT INTO VEHICLES
(vehicleVIN,vehicleType,vehicleMake,vehicleModel,vehicleWhereFrom,vehicleWholesaleCost,vehicleTradeID)
VALUES
('147258HHE91K3RT','compact','chevrolet','spark','Maryland',20583.00,NULL);
INSERT INTO VEHICLES
(vehicleVIN,vehicleType,vehicleMake,vehicleModel,vehicleWhereFrom,vehicleWholesaleCost,vehicleTradeID)
VALUES
('789456ERT0923RFB6','Midsize','ford','Taurus','washington, d.c.',25897.22,1);
INSERT INTO VEHICLES
(vehicleVIN,vehicleType,vehicleMake,vehicleModel,vehicleWhereFrom,vehicleWholesaleCost,vehicleTradeID)
VALUES
('1234567890QWERTYUIOP','fullsize','Lincoln','towncar','Virginia',44222.10,NULL);

与

INSERT INTO SALES
(saleID,grossSalePrice,vehicleStatus,saleDate,saleMileage,customerID,salespersonID,vehicleVIN)
VALUES
(1,25987.28,'sold',date '2012-10-15',10,1,1,'147258HHE91K3RT');
INSERT INTO SALES
(saleID,grossSalePrice,vehicleStatus,saleDate,saleMileage,customerID,salespersonID,vehicleVIN)
VALUES
(2,29999.99,'sold',date '2012-10-17',50087,2,2,'789456ERT0923RFB6');
INSERT INTO SALES
(saleID,grossSalePrice,vehicleStatus,saleDate,saleMileage,customerID,salespersonID,vehicleVIN)
VALUES
(3,47490.88,'sold',date '2012-11-05',30,3,3,'1234567890QWERTYUIOP');

与

INSERT INTO CUSTOMERS
(customerID,customerFirName,customerLasName,customerMiName,customerStreet,customerState,customerCity,customerZip)
VALUES
(1,'Regorna','Trasper','J','11111 Address Way','Maryland','Hollywood','20636');
INSERT INTO CUSTOMERS
(customerID,customerFirName,customerLasName,customerMiName,customerStreet,customerState,customerCity,customerZip)
VALUES
(2,'Bob','Seagram','A','22222 Seagram Lane','Texas','Houston','77001');
INSERT INTO CUSTOMERS
(customerID,customerFirName,customerLasName,customerMiName,customerStreet,customerState,customerCity,customerZip)
VALUES
(3,'Sally','Anderson','P','33333 Pheonix Drive','Arizona','Pheonix','85001');

显然还有其他表在这里发挥作用(销售人员等),但是这些是查询所需的唯一表。我要提取的查询需要显示每个型号的总销售额,按最高值排序,以及每个邮政编码的总销售额,按最高值排序。一个示例(使用上面提供的数据)看起来与此类似:

MODEL    NUMBER of SALES    ZIP CODE    NUMBER OF SALES
spark    1                  20636       1  
Taurus   1                  77001       1
towncar  1                  85001       1

结果需要根据销售数量按最高值排序。我也在尝试通过单个 SELECT 查询来完成此操作。

我尝试了一些想法,但还没有找到任何能打出本垒打的东西。感谢您的帮助!

【问题讨论】:

  • 您可以发布您尝试过的内容吗?
  • 您是在问如何加入表格吗?
  • 将发布我今晚的内容。我当前的机器上没有包含所有试用代码的“工作表”。
  • 我不太确定我是否在问如何加入表格。我以前做过内部联接,但从来没有使用三个表,而两列从同一字段中提取数据(例如,vehicleModel 和 customerZip 正在根据销售总数提取数据)。我的想法是,我需要首先计算总销售额,然后以某种方式将其计算到一个包含vehicleModel 和customerZip 字段的连接表中,按最高销售额排序。我只是不知道如何做到这一点,尤其是在将其保留在单个 SELECT 命令中时。
  • 每个型号的总计数与每个邮政编码的总计数不同。您正在显示包含模型和邮政编码的结果行,但是如果您为模型选择总计,则可能涉及多个邮政编码,如果您为邮政编码选择总计,则可能涉及多个模型。因此,您的描述与示例结果不符。请仔细考虑一下,告诉我们您真正追求的是什么。

标签: sql oracle sorting select


【解决方案1】:

看看这是不是你想要的:

SELECT DISTINCT v.VEHICLEMODEL, COUNT(*) OVER (PARTITION BY s.VEHICLEVIN) "CAR_SALES" 
,  c.CUSTOMERZIP, COUNT(*) OVER (PARTITION BY c.CUSTOMERZIP )"TOTAL_SALES_AT_ZIP" 
FROM SALES s, VEHICLES v, CUSTOMERS c
WHERE s. VEHICLEVIN = v. VEHICLEVIN
and  c. CUSTOMERID = s. CUSTOMERID    
ORDER BY 2 DESC , 4 DESC

【讨论】:

  • 你太棒了!从来没有想过这样做(合并分区)。极好的!谢谢!
猜你喜欢
  • 1970-01-01
  • 2021-03-30
  • 1970-01-01
  • 2018-05-07
  • 2018-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多