2010-04-02 4 views
6

J'ai une table avec deux colonnes:Puis-je le faire dans une requête MySQL?

column A column B 
    1    2 
    1    2 
    2    1 

Je veux revenir total de ceux = 3 total de twos = 3

Le meilleur que je peux venir avec est de deux requêtes comme ceci:

SELECT sum(CASE WHEN columnA =1 THEN 1 ELSE 0 END) 
    + sum(CASE WHEN columnB =1 THEN 1 ELSE 0 END) 

SELECT sum(CASE WHEN columnA =2 THEN 1 ELSE 0 END) 
    + sum(CASE WHEN columnB =2 THEN 1 ELSE 0 END) 

Est-ce que cela peut être fait dans une requête? Merci

Répondre

1
SELECT SUM(IF(columnA=1, 1, 0) + IF(columnB=1, 1, 0)) as ones, 
    SUM(IF(columnA=2, 1, 0) + IF(columnB=2, 1, 0)) as twos 
FROM myTable; 

C.

+0

Merci c'est la solution qui a fonctionné et je suis à peu près capable de comprendre – bsandrabr

-1

En général, vous comptez les choses comme ceci:

SELECT columnA, COUNT(*) FROM myTable 
GROUP BY columnA 

pour obtenir le nombre de toutes les valeurs différentes COLUMNA.

+0

+1 J'ajouterais 'WHERE COLUMNA IN (1,2) ' – soulmerge

0

Pour obtenir tout dans une requête, je voudrais essayer quelque chose comme ça.

SELECT Result.Val, COUNT(Result.Val) AS Count 
FROM (
    SELECT ColumnA AS Val 
    FROM TableName 

    UNION 

    SELECT ColumnB AS Val 
    FROM TableName 
) AS Result 
GROUP BY Result.Val 
+0

Je reçois une erreur de syntaxe avec ceci. Je ne sais pas si je l'ai bien compris. Résultat et val sont utilisés asis? – bsandrabr

+0

Laissez-moi jeter un oeil. J'ai l'habitude de travailler dans SQL Server, alors j'étais peut-être un peu optimiste quant à la façon dont cela pourrait se traduire en MySQL. – mcliedtk

+0

J'ai confirmé que cela fonctionne dans MS SQL Server, mais je suis incapable de tester cela dans MySQL. Donc, toute personne qui pourrait être intéressée par cette réponse, s'il vous plaît soyez conscient que cette solution peut fonctionner uniquement dans SQL Server. Je vais le laisser ici au cas où cela pourrait aider quelqu'un. – mcliedtk

2

Vous n'avez pas spécifié si vous voulez faire cela comme 2 lignes ou comme 2 valeurs d'affilée.

Deux lignes sont un peu évident (juste union ensemble toutes les valeurs de chaque colonne, et compter (1) groupe en valeur par rapport au résultat de l'union;. Donc je suppose que vous voulez faire une ligne

Si vous avez seulement 1 ou de 2 s, il est simple:

SELECT SUM(A+B-2) 'twos', SUM(4-A-B) 'ones' FROM myTable 
+0

pouvez-vous expliquer que pour moi, je n'obtiens pas le 4 – bsandrabr

+0

Si A = B = 1, alors la première somme contiendra 0 (donc sans compter vers deux) et la deuxième somme contiendra 2 (en comptant donc 2) – DVK

+0

Si A = B = 2, alors la première somme contiendra 2 (comptant ainsi 2 twos) et la deuxième somme contiendra 0 (donc zéro) – DVK

-1
SELECT COUNT(*) FROM table WHERE columnA=1 or columnB=1 
+0

Merci, mais qu'en est-il des deux? – bsandrabr

Questions connexes