J'essaie d'utiliser l'instruction CASE dans Mysql, et bien que MySQL ne se plaint pas de ma requête, elle ne parvient pas à fournir les bons résultats.Pourquoi MySQL Switch-Case ne sélectionne pas les bonnes valeurs?
Ce que j'essaie de faire est l'équivalent de:
if value < 20 then 1
elseif value < 30 then 2
elseif value < 40 then 3
.
.
.
else value < 90 then 45
ce qui est ma déclaration MySQL:
SELECT
UM.DA,
UM.PA,
IF((UM.DA - UM.PA) > 25, UM.DA, UM.PA) AS "PS",
CASE
WHEN "PS" < 20 THEN 1
WHEN "PS" < 30 THEN 2
WHEN "PS" < 40 THEN 3
WHEN "PS" < 50 THEN 5
WHEN "PS" < 60 THEN 8
WHEN "PS" < 70 THEN 12
WHEN "PS" < 80 THEN 20
WHEN "PS" < 90 THEN 30
WHEN "PS" >= 90 THEN 45
END AS "Points",
FROM
Table1 UM
et ceci est mon jeu de résultats:
+-------+-------+--------+--------+
| UM.DA | UM.PA | PS | Points |
+-------+-------+--------+--------+
| 19.21 | 18.39 | 18.39 | 1 |
+-------+-------+--------+--------+
| 24.80 | 34.91 | 34.91 | 1 |
+-------+-------+--------+--------+
| 29.72 | 35.89 | 35.89 | 1 |
+-------+-------+--------+--------+
Voici à quoi devrait ressembler mon résultat:
+-------+-------+--------+--------+
| UM.DA | UM.PA | PS | Points |
+-------+-------+--------+--------+
| 19.21 | 18.39 | 18.39 | 1 |
+-------+-------+--------+--------+
| 24.80 | 34.91 | 34.91 | 3 |
+-------+-------+--------+--------+
| 29.72 | 35.89 | 35.89 | 3 |
+-------+-------+--------+--------+
Alors quelle est la bonne façon d'utiliser « CASE » dans les requêtes MySQL (ceci est une requête, et non une procédure stockée)
En outre, en termes de performance est-il préférable de mettre cette logique dans le SQL requête, ou devrais-je filtrer les résultats dans le langage de programmation de mon choix?
Merci!
Pourquoi appliquez-vous le format PS entre guillemets dans l'instruction Case-When? C'est un nom de colonne. –
Parce que MySQL se plaint si je ne sais pas – ILikeTacos