Je cette requête:Aidez-moi à réécrire cette requête
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")
Comme vous pouvez le voir, je produis les clarity_score
et cut_score
colonnes à la volée afin que je puisse les utiliser dans ma clause WHERE. Tout d'abord, cela me donne une erreur en me disant que clarity_score
n'existe pas. Donc je pensais que c'est peut-être un de ces cas où je dois utiliser HAVING à la place?
donc je changé ma clause 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")
Je suis pas d'erreur, mais 0 ... Cela devrait être au-dessus de 100K retournaient. Donc j'ai écrit quelque chose de mal quelque part?
AVANT de COMMENCER cela, cependant, je NE veux PAS CHOISIR ces 2 champs générés, est-ce que je peux l'écrire afin que je ne récupère pas ces 2 champs, juste en les utilisant dans la clause where?
+1: Pourrait utiliser la table de temp si l'information n'est pas nécessaire ailleurs. La seule modification que je ferais serait d'utiliser 'COALESCE (clarity_lookup.clarity_score, -1)', etc. –