web-dev-qa-db-fra.com

Additionner les valeurs d'une seule ligne?

J'ai une requête MySQL qui renvoie une seule ligne qui est une série de 1 et de 0. C'est pour un indicateur de barre de progression. J'en ai maintenant la somme dans le code, mais j'ai essayé de faire la somme des valeurs dans une requête et j'ai réalisé que je ne pouvais pas utiliser SUM (), car ce sont plusieurs colonnes mais une seule ligne.

Existe-t-il un moyen de résumer cela automatiquement dans la requête? C'est comme ça:

item_1 | item_2 | item_3 | item_4
-------+--------+--------+--------
     1 |      1 |      0 |      0

Edit: j'ai oublié de mentionner, item_1 Et ainsi de suite ne sont pas de simples valeurs de champ, mais chacun est plutôt une expression, comme SELECT IF( field_1 = 1 and field_2 IS NOT NULL, 0, 1 ) AS item_1 ..., il semble donc que je doive faire une requête imbriquée :

SELECT ( item_1 + item_2 ... ) FROM ( SELECT IF( field_1 = y and field_2 IS NOT NULL, 1, 0 ) AS item_1 ... ) AS alias

Correct?

23
user151841
select item_1 + item_2 + item_3 + item_4 as ItemSum
from MyTable

S'il peut y avoir des valeurs nulles, vous devrez les gérer comme ceci:

select ifnull(item_1, 0) + ifnull(item_2, 0) + ifnull(item_3, 0) + ifnull(item_4, 0) as ItemSum
from MyTable
48
RedFilter

Vous ne pouvez pas vraiment le faire plus simplement que:

SELECT item_1 + item_2 + item_3 + item_4
FROM Table1

Si vous avez beaucoup de colonnes, il faudra un certain temps pour taper. Je suppose que cela a également pris beaucoup de temps pour créer la table.

À l'avenir, concevez vos tables différemment afin que chaque étape du processus soit une ligne et non une colonne. En d'autres termes, au lieu de cela:

id, item_1, item_2, item_3, item_4

Votre table pourrait ressembler à ceci:

id, item_number, value

Et puis vous pouvez l'interroger comme ceci:

SELECT SUM(value)
FROM Table1
WHERE id = @id

En fait, vous n'avez probablement même pas besoin de la colonne de valeur. La présence ou l'absence de la ligne est une information suffisante. Votre requête devient donc:

SELECT COUNT(*)
FROM Table1
WHERE id = @id

Il est peut-être un peu tard pour vous cette fois, mais si vous avez encore une chance de changer la conception, alors cela vaut la peine d'envisager cela.

5
Mark Byers