小编典典

Rails:按两列的总和排序

sql

因此,我有一个Photo可以在full_size和下载的模型presentation_size。用户下载照片时,我会在照片的full_downloadspresentation_downloads属性上进行跟踪。

很好

有时候,我想知道已经下载了多少个文件。我有一个简单的方法,total_downloads看起来像这样:

def total_downloads
  self.full_downloads + self.presentation_downloads
end

我的问题是:
我希望能够通过所有这三种方式(完整,演示文稿,总下载量)订购照片。前两个很容易,但是如何按两列的总和来排序?请注意,这至少需要同时与SQLite和PG兼容。

附带的问题是,使该total_downloads方法成为查询会更快吗?如果是的话,编写该方法的最佳方法是什么?我知道对您可以调用的类进行总结Photo.sum(...),但是我不确定如何对一条记录中的两列执行此操作。

谢谢!


阅读 154

收藏
2021-05-23

共1个答案

小编典典

您可以尝试以下方法:

Photo.order('full_downloads + presentation_downloads')

它将运行以下SQL查询:

SELECT "photos".* FROM "photos" ORDER BY full_downloads + presentation_downloads

但是,这可能很慢。如果数据集很大并且经常使用此排序顺序,则应考虑创建一个total_downloads列,并在记录full_downloadspresentation_downloads列发生更改时重新计算其值。

2021-05-23