jay*_*jay 12 sql postgresql ruby-on-rails
这似乎比它应该更难:
我希望能够通过它的copy_count对表进行排序,然后只选择具有唯一标题的事件,并将该查询限制为前99个.
Event.order("copy_count DESC").select("DISTINCT ON (events.title) *").limit(99)
Run Code Online (Sandbox Code Playgroud)
这会引发错误:
ActiveRecord::StatementInvalid: PG::Error: ERROR: SELECT DISTINCT ON expressions must match initial ORDER BY expressions
Run Code Online (Sandbox Code Playgroud)
哪个建议我需要将copy_count添加到DISTINCT ON,但这也只会拉回可能相同的唯一copy_count记录!
注意:copy_count的顺序必须先发生.
谢谢
Igo*_*nko 10
对于纯SQL,它看起来像:
SELECT *
FROM (SELECT DISTINCT ON (events.title) *
FROM events
ORDER BY events.title, events.copy_count DESC) top_titles
ORDER BY events.copy_count DESC
LIMIT 99
Run Code Online (Sandbox Code Playgroud)
但我不知道,如何在RoR中编写它.
尝试这个:
Event.select("DISTINCT ON (events.title) *").order("events.title, copy_count DESC").limit(99)
Run Code Online (Sandbox Code Playgroud)
发生这种情况的原因是,当您使用语句DISTINCT ON时,必须在ORDER BY表达式中使用其表达式(例如events.title)。
SQL ERROR: SELECT DISTINCT ON expressions must match initial ORDER BY expressions
Run Code Online (Sandbox Code Playgroud)
因此,您只需要在order语句中的events.title之后添加copy_count列
归档时间: |
|
查看次数: |
8165 次 |
最近记录: |