1

我的数据库项目包含它们的规格(id、名称、长度、高度、重量、数量等)。

我想要

SELECT id, name, length*3 + height*5 as 'newVar' 
FROM items 
ORDER BY newVar DESC

但是,为了让我的公式在计算中起作用newVar,如果“长度”小于 10,我希望它在计算中反映为 10。“高度”也是如此:如果它大于 10,我需要在计算中将其反映为 10。

我怎样才能做到这一点?

4

3 回答 3

4

您可以通过几个CASE条件来完成它,它们分别返回10iflengthheightare< 10> 10

SELECT
  id,
  name,
  ((CASE WHEN length < 10 THEN 10 ELSE length END) * 3 + 
  (CASE WHEN height > 10 THEN 10 ELSE height END) * 5)  AS newVar
FROM items
ORDER BY newVar DESC

http://sqlfiddle.com/#!2/2bfb1/2

于 2013-03-26T01:49:17.473 回答
1

一种选择是使用IF(取决于您的 RDBMS):

SELECT id, 
    name, 
    if(length<10,10,length)*3 + if(height>10,10,height)*5 as 'newVar' 
FROM items 
ORDER BY newVar DESC

或者您可以使用CASE

SELECT id, 
    name, 
    case when length<10 then 10 else length end * 3 + 
    case when height>10 then 10 else height end * 5 as 'newVar' 
FROM items 
ORDER BY newVar DESC
于 2013-03-26T01:53:02.330 回答
0

可以更简单:

SELECT id, name, GREATEST(length, 10) * 3 + LEAST(height, 10) * 5 AS newVar
FROM   items
ORDER  BY newVar DESC

GREATEST并且LEAST不在 SQL 标准中,但大多数 RDBMS 都有它们。

于 2013-03-26T02:39:35.500 回答