【发布时间】:2013-03-15 17:18:58
【问题描述】:
我所拥有的是一个 Skus 模型/表格,其中有几个代表类别的列。还有三列用于描述主要、次要、微格式的版本号。
我想根据三个 Sku 类别选择每个 Sku 的最高版本。
最初我尝试使用 MAX 和 'group',但在三个版本号列中效果不佳(0 0 5 被认为大于 0 1 0)。所以我在三个版本列上使用“order by”,然后使用“group by”执行“select”,得到我想要的结果:
SELECT * FROM
(
SELECT *
FROM skus
WHERE category1_id = 3
ORDER BY ver_major, ver_minor, ver_micro
)
GROUP BY category2_id, category3_id, category4_id
我想知道的是,这是否特别低效(因为嵌套选择或其他原因)?
最重要的是,我将如何使用 Rails ActiveRecord 编写这个(或更好的)查询?
感谢您的帮助
【问题讨论】:
-
它没有解决您的问题,但是您的表是否有关于 ver_major、ver_minor、ver_micro、category2_id、category3_id 和 category4_id 的索引?它将帮助您的数据库引擎计算 ORDER BY 和 GROUP BY。
-
这也不能解决您的问题,但最好养成避免“SELECT *”的习惯,除非您需要每一列的数据。只选择你需要的列,你的查询时间会小很多。
-
感谢您的回复。我确实有关于类别的索引。我也不会将 * 用于 SELECT,但会简化问题。我的主要问题是如何使用 Rails ActiveRecord 方法来表示这样的东西。
标签: mysql sql ruby-on-rails activerecord