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に戻るいくつかの条件でそれを達成することができます。10lengthheight< 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

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

GREATESTSQL標準にLEASTは含まれていませんが、ほとんどのRDBMSに含まれています。

于 2013-03-26T02:39:35.500 に答える