CREATE TEMP VIEW people ASSELECT p.person_ID,p.full_name,p.phoneFROM person pORDER BY p.last_name;SELECT p.*,h.address,h.appraisalFROM people pleft JOIN homes h ON h.person_ID = p.person_IDORDER BY p.last_name,h.appraisal;
这里显而易见的问题是,当我去执行最终的ORDER BY时,p.last_name不再可用.
如何对最终查询进行排序,以便人员视图的原始序列跟进到最终查询?
这里的简单解决方案是将p.last_name包含在视图中.我不想这样做 – 我的真实世界的例子(更复杂)使这成为一个问题.
我过去和临时表做过类似的事情.例如,我使用CREATE TEMP table测试WITH OIDS创建表,然后执行ORDER BY testing.oID以传递原始序列.
是否有可能对视图做同样的事情?
解决方法 如果你使用row_number()over(),这是可能的.这是一个例子:
SELECT p.*,h.appraisalFROM (SELECT *,row_number() over() rn FROM people) pleft JOIN homes h ON h.person_ID = p.person_IDORDER BY p.rn,h.appraisal;
这是您可以测试的SQL Fiddle.
正如@Erwin Brandstetter正确指出的那样,使用rank()将产生正确的结果并允许对其他字段进行排序(在这种情况下,评估).
SELECT p.*,rank() over() rn FROM people) pleft JOIN homes h ON h.person_ID = p.person_IDORDER BY p.rn,h.appraisal;
用这种方式考虑一下,使用row_number(),它总是只按该字段排序,而不管其他任何排序参数.通过使用rank(),其中tIE是相同的,可以很容易地搜索其他字段.
祝好运.
总结以上是内存溢出为你收集整理的带有VIEW的PostgreSQL ORDER BY全部内容,希望文章能够帮你解决带有VIEW的PostgreSQL ORDER BY所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)