我的数据库中有一个表,如下所示。请注意,PRV 下有重复的条目。
PRV | MV | AU |
---|---|---|
G-111 | 500 | LR |
G-112 | 400 | LC |
G-112 | 401 | 洛杉矶 |
G-200 | 650 | 李 |
G-115 | 350 | LR |
G-115 | 0 | LC |
G-115 | 0 | 洛杉矶 |
G-116 | 0 | LR |
我使用以下查询语句来获取根据 AU 分组的不同 PRV 的数量。
SELECT
COUNT(*),
AU
FROM
(
SELECT DISTINCT
PRV,
AU
FROM
tablename
WHERE
MV > O
) AS K
GROUP BY
AU
结果:
|
AU |
---|---|
2 | LR |
1 | LC |
0 | 洛杉矶 |
1 | 李 |
我不明白的是如何确保分组不仅仅是基于
MV>0
而且 MV
是重复 PRVs
中的最大值。
对于最后 3 行(其中
PRV = 'G-115'
),我的查询语句工作正常,因为带有
AU = LR 的 MV=350,而其他的则为零。因此,G-115 仅算作一个单位并归入 LR 下。
但是,在第二行和第三行的情况下(其中 PRV = 'G-112'),它确实只算作 1(因为 DISTINCT 关键字),但我希望它被分组为 LA(而不是 LC) )因为 LA 的 MV = 401(大于 LC 行中的 MV=400)。
所以,期望的结果是:
|
AU |
---|---|
2 | LR |
0 | LC |
1 | 洛杉矶 |
1 | 李 |
我读到了
MAX
关键字,但我不知道如何在我的案例中使用它。
在我的实际表格中,
distinct
关键字似乎不适用于第2行和第3行。它们实际上被计算了两次,因为MV > 0
对于两个条目都适用。
根据您上面的原始查询,我想不出一个简单的解决方案。 此方法使用 PARTITION BY(假设您的数据库支持它)。这里我们按 PRV 进行分区,并按 PRV 和 MV 降序排序,因此对于最高的 PRV+MV 组合,结果具有 ROW=1。 然后我们对结果进行相应的求和:
;WITH
data
AS
(
SELECT
*,
ROW_NUMBER() OVER(PARTITION BY PRV ORDER BY PRV, MV DESC) AS ROW
FROM
prv
WHERE MV > 0
)
SELECT
SUM(CASE WHEN ROW = 1 THEN 1 ELSE 0 END),
AU
FROM
data
GROUP BY AU