所以,我想创建一个按流行度排序的公式,但我不想创建存储过程或函数。我希望这个功能只是在我的查询中。
那么,有没有办法做类似
的事情SELECT cols
FROM tables
WHERE conditions
ORDER BY function(){ logic using cols } DESC LIMIT 10
或类似的东西?
答案 0 :(得分:2)
我不想创建存储过程或函数
你想调用一个函数,但你不想定义一个函数?好...
您可以在ORDER BY子句中使用表达式,包括非常强大的CASE
:
SELECT cols
FROM tables
WHERE conditions
ORDER BY CASE WHEN col1 BETWEEN a AND b THEN 1
WHEN col1 BETWEEN c AND d THEN 2
...
END
DESC LIMIT 10
但是,通常更容易在选择列表中进行计算,然后按计算列进行排序:
SELECT cols, POW(col1, col2) AS calc1
FROM tables
WHERE conditions
ORDER BY calc1 DESC LIMIT 10