Je cherche un moyen de boucler sur des colonnes dans une table MYSQL en utilisant une chaîne concaténée pour indexer les noms de colonnes dans une boucle. Un exemple des données de la table pourrait ressembler à ceci:MYSQL: Comment est-ce que je peux itérer sur des colonnes de table en utilisant une chaîne concaténée comme nom de colonne?
R1 R2 R3 R4
0.68 0.08 0.04 4.24
0.15 1.17 3.06 0.57
1.59 0.48 1.39 1.00
1.59 0.77 1.13 0.22
0.90 0.23 0.73 0.52
Les noms de colonnes sont simplement le caractère « R » et un numéro (en fin de compte le nombre de colonnes varie de sorte que le nombre pourrait être jusqu'à 100) . Je voudrais parcourir les colonnes pour compter le nombre de valeurs dans chaque colonne qui dépassent un seuil (j'utilise trois seuils: 3.0, 5.0 et 10.0). Le résultat de l'appel de la procédure devrait être quelque chose comme ce qui suit:
str2 total ThreeCount FiveCount TenCount
`R1` 8772 794 153 1
str2 total ThreeCount FiveCount TenCount
`R2` 8772 382 42 0
etc.
J'utilise le code suivant comme une procédure stockée pour tester le processus (j'utilise 5 pour le test et donc itérer au cours des cinq premières colonnes de valeurs de données):
BEGIN
DECLARE x INT;
DECLARE str1 VARCHAR(1);
DECLARE str2 VARCHAR(5);
DECLARE str3 VARCHAR(1);
SET x = 1;
SET str1 = "R";
SET str2 = "";
SET str3 = "`";
WHILE x <= 5 DO
SET str2 = CONCAT(str3,str1,x,str3);
select str2,
count(*) total,
sum(case when str2 > 3.0 then 1 else 0 end) ThreeCount,
sum(case when str2 > 5.0 then 1 else 0 end) FiveCount,
sum(case when str2 > 10.0 then 1 else 0 end) TenCount
from test_dat;
SET x = x + 1;
END WHILE;
END
Cependant, la procédure renvoie zéro des valeurs (sauf pour le total) à moins que je remplace « str2 » avec les noms de colonnes réels (par exemple, remplacer str2 avec R1
, R2
etc.). Cependant je préfère ne pas utiliser les noms de colonnes réels.
Que faire pour que ma chaîne concaténée (str2) soit reconnue comme un nom de colonne? J'ai essayé diverses combinaisons de concaténation telles que:
SET str2 = CONCAT(str1,x);
Mais n'ont pas de comptes non-zéro avec l'un de ceux-ci.
Merci pour toute aide que vous êtes en mesure d'offrir.
Ce genre de problème ne peut pas se produire dans un SGBDR. Une table de base de données n'est pas une feuille de calcul. Normalisez votre schéma. – Strawberry