2010-04-02 25 views
6

Tengo una tabla con dos columnas:¿Puedo hacer esto en una consulta Mysql?

column A column B 
    1    2 
    1    2 
    2    1 

quiero volver total de los = 3 total de dos en dos = 3

lo mejor que puedo llegar a es dos consultas de este modo:

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) 

¿Se puede hacer esto en una consulta? Gracias

Respuesta

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

Gracias esa es la solución que funcionó y yo soy casi capaz de desarrollar – bsandrabr

-1

En general, debería contar cosas así:

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

para obtener el recuento de todos los valores diferentes en columna.

+0

1 yo añadiría 'DONDE EN COLUMNA (1,2) ' – soulmerge

0

Para obtener todo en una consulta, probaría algo como esto.

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

Estoy obteniendo un error de sintaxis con esto. No sé si lo he entendido correctamente. El resultado y el val se usan como? – bsandrabr

+0

Déjame echar un vistazo. Estoy acostumbrado a trabajar en SQL Server, así que tal vez estaba un poco optimista sobre cómo esto podría traducirse a MySQL. – mcliedtk

+0

Confirmé que esto funciona en MS SQL Server, pero no puedo probar esto en MySQL. Entonces, cualquiera que esté interesado en esta respuesta, tenga en cuenta que esta solución solo puede funcionar en SQL Server. Lo dejaré aquí en caso de que pueda ser útil para alguien. – mcliedtk

2

No especificó si desea hacer esto como 2 filas o como 2 valores seguidos.

Dos filas son algo obvio (justo unión juntos todos los valores de cada columna, y contar (1) Grupo de valor frente al resultado de la unión;. Por lo que voy a suponer que usted quiere hacer una fila

Si sólo tiene 1s o 2s, es simple:

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

puede explicar que, para mí, no obtengo el 4 – bsandrabr

+0

Si A = B = 1, entonces la primera suma contendrá 0 (por lo tanto, no contará hacia dos) y la segunda suma contendrá 2 (contando así 2) – DVK

+0

Si A = B = 2, entonces la primera suma contendrá 2 (contando 2 pares) y la segunda suma contendrá 0 (contando cero) – DVK

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

Gracias, pero ¿y los dos? – bsandrabr

Cuestiones relacionadas