DB2-行数函数-需要输出中的第一个分区行
我尝试了下面的SQL,但它不起作用 问题:它没有给出第一个分区行 我正在添加表详细信息和SQL。这是针对DB2数据库的DB2-行数函数-需要输出中的第一个分区行,db2,row-number,Db2,Row Number,我尝试了下面的SQL,但它不起作用 问题:它没有给出第一个分区行 我正在添加表详细信息和SQL。这是针对DB2数据库的 Books Table: book_id rating title isbn publisher_id WITH cte_books AS ( SELECT publisher_id, ROW_NUMBER() OVER ( PARTITION BY publisher_id
Books Table:
book_id
rating
title
isbn
publisher_id
WITH cte_books AS (
SELECT
publisher_id,
ROW_NUMBER() OVER (
PARTITION BY publisher_id
ORDER BY rating DESC
) row_num,
book_id,
rating,
title
FROM
books
WHERE
publisher_id IS NOT NULL
)
SELECT
*
FROM
cte_books
WHERE
row_num >= 1 AND
row_num >= 2;
实际上是行数>=2
WHERE
row_num = 1
将返回第一行
编辑:
如果您希望为那些有多行的人提供所有行,这是一种方法:
WITH cte_books AS (
SELECT
publisher_id,
ROW_NUMBER() OVER (
PARTITION BY publisher_id
ORDER BY rating DESC
) row_num,
book_id,
rating,
title
FROM
books
WHERE
publisher_id IS NOT NULL
)
SELECT *
FROM cte_books t
WHERE exists (SELECT 1
FROM cte_books
WHERE row_num > 1
AND pubisher_id = t.publisher_id)
将
ROW_NUMBER()
更改为COUNT(1)
,删除ORDER BY
,并在ROW_num>1的位置使用。嗨,Mike,我需要输出至少有2个分区的发布者id记录。row_num=1对我不起作用。好的,谢谢你的澄清-我已经编辑了我的答案-检查是否可以修改此SQL以提供输出,其中row_num=1还将显示至少有两个分区的记录?我已将CTE添加到我的答案中-我不理解你的评论-它将为有分区的记录显示所有记录不止一个出版商叫迈克!这正是我想要的。谢谢!
WITH cte_books AS (
SELECT
publisher_id,
ROW_NUMBER() OVER (
PARTITION BY publisher_id
ORDER BY rating DESC
) row_num,
book_id,
rating,
title
FROM
books
WHERE
publisher_id IS NOT NULL
)
SELECT *
FROM cte_books t
WHERE exists (SELECT 1
FROM cte_books
WHERE row_num > 1
AND pubisher_id = t.publisher_id)