gpt4 book ai didi

使用来自 GROUP 或 RANK 的 WHERE 的 SQL 语句(第 2 部分)

转载 作者:行者123 更新时间:2023-12-04 21:09:29 26 4
gpt4 key购买 nike

我最近在这里发布了一个关于 SQL Where 语句/分组的问题:

SQL statement using WHERE from a GROUP or RANK

现在我有了一些跟进。

与上一个问题非常相似,让我们假设我有一个包含这些列的 35,000 行表:

销售代表 |父帐户 ID|帐户 ID |契约(Contract)总值(value) |日期

每一行都是单独的帐户 ID,但多个帐户 ID 可以属于一个父帐户 ID。

与第一个问题的回答类似,这可能是一张 table ,一张 table 。所以首先,一切都必须按销售代表分组。从那以后,一切都需要按父帐户 ID 分组,其中所有帐户的分组总契约(Contract)值(value) >= 10,000。然后所有内容都将按父帐户 ID 的总 TCV 显示和排名,我需要代理的前 35 个父帐户 ID。

因此,前几行数据可能如下所示:

销售代表 |父帐户 ID|帐户 ID |契约(Contract)总值(value) |日期 |秩
约翰·多伊 |父ABC12345 | ABC425 | 5,000 | 1/2/2013 |1
约翰·多伊 |父ABC12345 | ABC426 | 10,000 | 1/2/2013 |1
约翰·多伊 |父DJE12345 | DJE523 | 11,000 | 1/2/2013 |2
约翰·多伊 |父FBC12345 | FBC6723 | 4,000 | 1/2/2013 |3
约翰·多伊 |父FBC12345 | FBC6727 | 4,000 | 1/2/2013 |3

请注意基于父帐户 ID 的排名是如何工作的。帐户 ID DJE523 具有最大的单个 TCV,但在 b/c 中排名第二,父帐户 ID ParentABC12345 的分组值更大。因此,将有 35 个父帐户 ID 的排名,但在该排名中,它们可以说是 100 多行实际数据。

有什么想法吗?

最佳答案

总是很高兴跟进。 “父等级”添加为 INNER JOIN .

编辑:正如 Dan Bracuk 正确提到的,my first answer不正确。我更改了查询以满足正确的条件。我还将时间跨度应用于父帐户。

DECLARE @minimumValue decimal(20,2) = 10000
DECLARE @numberOfAccounts int = 35
DECLARE @from datetime = '1/1/2013'
DECLARE @till datetime = DATEADD(MONTH, 1, @from)

SELECT
[sub].[Sales Rep],
[sub].[Rank],
[sub].[Account ID],
[sub].[Total Contract Value],
[sub].[Parent Account ID],
[sub].[Total],
[sub].[ParentRank]
FROM
(
SELECT
[s].[Sales Rep],
[s].[Account ID],
[s].[Total Contract Value],
DENSE_RANK() OVER (PARTITION BY [s].[Sales Rep] ORDER BY [s].[Total Contract Value] DESC) AS [Rank],
[p].[Parent Account ID],
[p].[Total],
[p].[ParentRank]
FROM [Sales] [s]
INNER JOIN
(
SELECT
[Parent Account ID],
SUM([Total Contract Value]) AS [Total],
RANK() OVER(ORDER BY SUM([Total Contract Value]) DESC) AS [ParentRank]
FROM [Sales]
WHERE[Date] > @from AND [Date] < @till
GROUP BY [Parent Account ID]
HAVING SUM([Total Contract Value]) > @minimumValue
) AS [p] ON [s].[Parent Account ID] = [p].[Parent Account ID]
WHERE [Date] > @from AND [Date] < @till
) AS [sub]
WHERE [sub].[Rank] <= @numberOfAccounts
ORDER BY
[Sales Rep] ASC,
[ParentRank] ASC,
[Rank] ASC

And here is a new Fiddle .

关于使用来自 GROUP 或 RANK 的 WHERE 的 SQL 语句(第 2 部分),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14696413/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com