我的数据库项目包含它们的规格(id、名称、长度、高度、重量、数量等)。
我想要
SELECT id, name, length*3 + height*5 as 'newVar'
FROM items
ORDER BY newVar DESC
但是,为了让我的公式在计算中起作用newVar
,如果“长度”小于 10,我希望它在计算中反映为 10。“高度”也是如此:如果它大于 10,我需要在计算中将其反映为 10。
我怎样才能做到这一点?
您可以通过几个CASE
条件来完成它,它们分别返回10
iflength
或height
are< 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
一种选择是使用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
可以更简单:
SELECT id, name, GREATEST(length, 10) * 3 + LEAST(height, 10) * 5 AS newVar
FROM items
ORDER BY newVar DESC
GREATEST
并且LEAST
不在 SQL 标准中,但大多数 RDBMS 都有它们。