[英]Unexpected results with ROW_NUMBER doing Inner Join
我建立了这个SQL请求,
SELECT
distinct c_users.id,
c_photos.user_id,
c_photos.pic_filename,
c_users.user_first_name,
c_users.user_last_name,
c_users.description,
c_users.curriculum_diploma_1,
ROW_NUMBER() OVER(ORDER BY c_users.id ASC) AS rank
FROM
c_users
INNER JOIN
c_photos
ON
c_users.id=c_photos.user_id
WHERE
lower(location_town) LIKE '%lille%'
AND
(c_photos.pic_type='profile' OR c_photos.pic_type='photo')
LIMIT
9
;
这是输出,
rank列有一些意外的结果,我希望它是1、2、3等,而不是94、84、25等。我不知道该怎么做。
谢谢,
伦纳德
如果要按特定顺序生成结果,则需要按order by
。 我建议:
order by c_users.id
要么
order by rank
编辑:
我不确定row_number()
如何与distinct
。 我对group by
比较满意。 但是,就您的情况而言,我怀疑是否需要消除重复(除非用户有两张同名照片)。
SELECT u.id, p.user_id, p.pic_filename, u.user_first_name, u.user_last_name,
u.description, u.curriculum_diploma_1,
ROW_NUMBER() OVER (ORDER BY u.id ASC) AS rank
FROM c_users u INNER JOIN
c_photos p
ON u.id = p.user_id
WHERE lower(location_town) LIKE '%lille%' AND
p.pic_type in ('profile', 'photo')
LIMIT 9 ;
你可以加:
GROUP BY u.id, p.user_id, p.pic_filename, u.user_first_name, u.user_last_name,
u.description, u.curriculum_diploma_1
如有必要。
with CTE as
(
SELECT
distinct c_users.id,
c_photos.user_id,
c_photos.pic_filename,
c_users.user_first_name,
c_users.user_last_name,
c_users.description,
c_users.curriculum_diploma_1,
ROW_NUMBER() OVER(ORDER BY c_users.id ASC) AS rank
FROM
c_users
INNER JOIN
c_photos
ON
c_users.id=c_photos.user_id
WHERE
lower(location_town) LIKE '%lille%'
AND
(c_photos.pic_type='profile' OR c_photos.pic_type='photo')
)
select *
from CTE
where rank <=9
要么将其打包在CTE /查询中,然后使用row_number,要么按新列排序(根据Gordon的回答),以使限制达到预期效果。
引起这种情况的独特声明。 您可以尝试以下方法:
SELECT *, ROW_NUMBER() OVER(ORDER BY c_users.id ASC) AS rank from (
SELECT
distinct c_users.id,
c_photos.user_id,
c_photos.pic_filename,
c_users.user_first_name,
c_users.user_last_name,
c_users.description,
c_users.curriculum_diploma_1
FROM
c_users
INNER JOIN
c_photos
ON
c_users.id=c_photos.user_id
WHERE
lower(location_town) LIKE '%lille%'
AND
(c_photos.pic_type='profile' OR c_photos.pic_type='photo')
) as data
LIMIT
9
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.