来自Ruby / Rails背景,我习惯了这种语法:
Model.all.order('col1 + col2 + col3')
因此,假设col1,col2和col3是整数,它会按照这3列的总和对结果进行排序。
是否有类似的方法使用sequelize进行排序?
答案 0 :(得分:7)
使用最新的主人(不确定是否已将更改推送到npm),您可以执行以下操作:
Model.findAll({ order: [[{ raw: 'col1 + col2 + col3 DESC' }]]});
导致
ORDER BY col1 + col2 + col3 DESC
或者你可以这样做:
Model.findAll({ order: [[sequelize.fn('SUM', sequelize.col('col1'), sequelize.col('col2'), sequelize.col('col3')), 'DESC']]});
导致
ORDER BY SUM(`col1`, `col2`, `col3`) DESC
我会推荐第二个版本,它将正确地转义列名称。有关详细信息,请参阅http://sequelizejs.com/documentation#models-finders-limit---offset---order---group
答案 1 :(得分:1)
fcvt d0, s20
或
from spgl1 import spgl1, spg_bp, spg_bpdn
#x01 = psueodinverse of A multiplied by y
x,resid,grad,info = spgl1(A, y, tau = tau, sigma = epsilon, x0 = x01, iter_lim = 150)
答案 2 :(得分:0)
必须在我的模型的 defaultScope 中按 col1+col2 排序,作为答案提供的 SUM 解决方案返回了续集错误 function sum(numeric, numeric) does not exists
(或类似的错误)。
我目前的解决方法:
order: [[ 'col1', sequelize.literal('+'), 'col2', 'DESC']]
将打印出来
ORDER BY "tableName"."col1"+"col2" DESC
只需添加更多的间隔列,并添加 sequelize.literal('+')
以获得更多列。
如果使用包含/连接并且您需要使用表名调用所有列...我尝试了 sequelize.col('col2')
但没有添加表名。我猜测像 'tableName', sequelize.literal('.'), 'columnName'
这样的组合应该可以工作,但您需要知道您的表名/别名。我无法访问我的模型,因为它是在我的用例中定义的。文档中的 {model: 'model', as: 'alias'}
也失败了。