【发布时间】:2010-08-06 20:37:30
【问题描述】:
我有这个问题:
SELECT diamond_id, carat, clarity, color, cut,
CASE clarity
WHEN "FL" THEN 0
WHEN "IF" THEN 1
WHEN "VVS1" THEN 2
WHEN "VVS2" THEN 3
WHEN "VS1" THEN 4
WHEN "VS2" THEN 5
WHEN "SI1" THEN 6
WHEN "SI2" THEN 7
WHEN "I1" THEN 8
WHEN "I2" THEN 9
WHEN "I3" THEN 10
ELSE -1
END AS clarity_score,
CASE cut
WHEN "ideal" THEN 0
WHEN "excellent" THEN 1
WHEN "very good" THEN 2
WHEN "good" THEN 3
WHEN "fair" THEN 4
WHEN "poor" THEN 5
ELSE -1
END AS cut_score
FROM rapnet_diamonds
WHERE
shape IN ("round","princess","oval")
AND (carat BETWEEN ".1" AND "5")
AND (color BETWEEN "D" AND "Z")
AND (clarity_score BETWEEN "0" AND "10")
AND (cut_score BETWEEN "0" AND "5")
如您所见,我动态生成了 clarity_score 和 cut_score 列,因此我可以在 WHERE 子句中使用它们。
首先,这给了我一个错误,告诉我clarity_score 不存在。所以我想也许这是我需要使用 HAVING 的情况之一?
所以我将 where 子句更改为:
WHERE
shape IN ("round","princess","oval")
AND (carat BETWEEN ".1" AND "5")
AND (color BETWEEN "D" AND "Z")
HAVING
(clarity_score BETWEEN "0" AND "10")
AND (cut_score BETWEEN "0" AND "5")
我没有收到错误,但结果为 0... 这应该返回超过 100K。所以我在某处写错了?
然而,在你开始重写之前,我不想选择这两个生成的字段,有没有办法可以编写它,这样我就不会检索这两个字段,只是在 where 子句中使用它们?
【问题讨论】: