在sql中得到错误的查询输出

问题描述 投票:0回答:1
名字 年龄
约翰 31
约翰 25
贝蒂 28
大卫 22
罗伯特 22
WITH cte AS (

SELECT first_name,age,

ROW_NUMBER() OVER (PARTITION BY first_name ORDER BY SUM(age) DESC) AS row_num

FROM customers

)

SELECT *

FROM cte

我得到这个输出。任何人都可以解释为什么吗?

名字 年龄 行数
约翰 31 1
sql mysql sql-order-by
1个回答
0
投票

一些评论者指出,您需要在 select 语句中进行一些聚合才能完成这项工作。这个查询应该有效:

WITH cte (first_name, age, row_num) AS (
SELECT
first_name,
sum(age),
ROW_NUMBER() OVER (PARTITION BY first_name ORDER BY SUM(age) DESC) AS row_num
FROM customers
group by first_name
)
SELECT *
FROM cte
;

结果如下所示:

first_name  age row_num
betty   28  1
david   22  1
john    56  1
robert  22  1

由于您选择了

SUM(age)
,因此具有
first_name = 'john'
的行是唯一受到影响的行,因为您的
PARTITION
位于
first_name
旁边,而我添加的
GROUP BY
位于同一列。

顺便说一句,其中一个评论者提供了一个链接,它具有相同的方法(刚刚发现,并且谢天谢地,解决方案基本上是相同的,除了我没有包含为创建临时表的代码)测试;很好,那)。 MySQL fiddle 站点的好处是,如果查询成功运行,您可以看到结果。您确实必须构建自己的临时表,正如评论者所做的那样。

无论哪种方式,如果包含附加聚合,查询都会返回结果。更大的问题是:这些是你想要的结果吗?如果没有,您可能需要解释一下您希望返回的内容,我相信人们会做出相应的回应。

© www.soinside.com 2019 - 2024. All rights reserved.