【发布时间】:2018-01-25 01:25:28
【问题描述】:
我有三个表:Customers、Vehicles 和 Sales。我需要一个 SELECT 语句,它将形成一个包含三列的输出:VEHICLEMAKE、SALESBYMAKE 和 CUSTOMERFULLNAME。输出应类似于以下内容:
VEHICLEMAKE SALES_BY_MAKE CUSTOMERFULLNAME
Chevrolet 11 Adam E Whitney
Alberto L Ross
Alexis T Moon
Finley H Tritt
Jayda V Rush
Junior E Hanes
Kamari H Webster
Linda L Lawrence
Luke E Boyer
Samantha D Holden
Sydnee B Herman
该列表应仅包含 SALESBYMAKE 的 MAX 数量,除非 MAX 绑定,否则它还将包含 VEHICLEMAKE、SALESBYMAKE 数量和其他 VEHICLEMAKE 的 CUSTOMERFULLNAME。我已经工作了几个小时,完全没有用!这是表格,仅包含必要的属性。
CREATE TABLE CUSTOMERS
(customerID INT PRIMARY KEY,
customerFirName VARCHAR(20) NOT NULL,
customerLasName VARCHAR(20) NOT NULL,
customerMiName VARCHAR(1) NOT NULL;
CREATE TABLE VEHICLES
(vehicleVIN VARCHAR(25) PRIMARY KEY,
vehicleMake VARCHAR(15) NOT NULL;
CREATE TABLE SALES
(saleID INT PRIMARY KEY,
customerID INT,
vehicleVIN VARCHAR(25);
CONSTRAINT SALES_FK1 FOREIGN KEY (customerID) REFERENCES CUSTOMERS(customerID),
CONSTRAINT SALES_FK2 FOREIGN KEY (vehicleVIN) REFERENCES VEHICLES(vehicleVIN);
编辑:这是我尝试过的:
SELECT DISTINCT v.VEHICLEMAKE, COUNT(*) OVER (PARTITION BY s.VEHICLEVIN) "SALES_BY_MAKE", c.CUSTOMERFULLNAME, COUNT(*) OVER (PARTITION BY c.CUSTOMERZIP)"CUSTOMERS"
FROM SALES s, VEHICLES v, CUSTOMERS c
WHERE s. VEHICLEVIN = v. VEHICLEVIN
and c. CUSTOMERID = s. CUSTOMERID
ORDER BY 2 DESC;
问题是,这给了我整个列表,而不是 MAX 值。我不确切知道在哪里或如何实施 MAX 语句,以仅包含购买最多的 VEHICLE MAKE。
按照我问过的另一个人的建议,我也尝试过这个,但无法理解它并且它没有正确执行。
SELECT vc.*
FROM (SELECT vc.*, MAX(SALES_BY_MAKE) OVER () as MAX_SALES_BY_MAKE
FROM (SELECT v.VEHICLEMAKE, c.CUSTOMERFULLNAME,
COUNT(*) OVER (PARTITION BY s.VEHICLEVIN) as SALES_BY_MAKE
FROM SALES s JOIN
VEHICLES v
ON s.VEHICLEVIN = v VEHICLEVIN JOIN
CUSTOMERS c
ON c.CUSTOMERID = s.CUSTOMERID
) vc
) vc
WHERE SALES_BY_MAKE = MAX_SALES_BY_MAKE
ORDER BY VEHICLEMAKE;
我认为我尝试的第一个方法是正确的方法,因为它确实提供了我需要的列表,但是它不仅选择了 MAX 值,而是提供了所有值和将它们从高到低排序。我考虑过添加一个 LIMIT,但这不允许出现“平局”。
我真的只需要关于在哪里/如何实施 MAXcount 以获得最高输出的指导。
【问题讨论】:
-
这不是代码/SQL/正则表达式编写服务,您可以在其中发布您的需求和选择的语言列表,然后代码猴子会为您生成代码。我们非常乐意提供帮助,但我们希望您首先努力自己解决问题。 (不,我会上传它,但是... 不算努力,就像 诚实,我做了功课,但我的狗吃了它)。完成后,您可以解释您遇到的问题,包括您工作的相关部分,并提出具体问题,我们会尽力提供帮助。祝你好运。
-
是的!你可以做到的。
-
I'd upload what I've tried急于看到这一点,它不会让我们感到困惑。 -
我很抱歉。我真的认为这会增加混乱。不会再犯这种错误了。不要试图让你“免费”工作。编辑后的帖子包括我尝试过的内容以及我需要帮助的具体问题。再次感谢。
-
看看
GROUP BY