2011-01-23 11 views
7

Tengo una base de datos MYSQL que contiene datos sobre los clientes de mi empresa, ya que utilizan nuestros servicios cada día.cuenta de mysql (*) de varias tablas

cada tabla en la base de datos representa un período de 24 horas y todas las transacciones de clientes que tuvieron lugar en ese período.

me gustaría contar con el total de movimientos durante varios días

hasta ahora tengo una instrucción SELECT que hace lo siguiente

select 
    (
    select count(customer) from 2010Dec28 
    where customer='<customer name>' 
) as t1, 
    (
    select count(customer) from 2010Dec29 
    where customer='<customer name>' 
)as t2;` 

pero esto devuelve el resultado como dos cargos separados

| t1 | t2 | 
| 1438 | 16282 | 
1 row n set (0.00 sec)` 

Mi pregunta es cómo puedo generar la suma de estos dos resultados sin tener que hacerlo en mi código de aplicación.

+4

Creo que "cada tabla en la base de datos representa un período de 24 horas" es el punto donde debe detenerse y reconsiderar su diseño. –

+1

Siga los consejos que la gente le brinda y arregle su diseño. No deberías tener una tabla separada para cada fecha. A lo sumo, puede tener una tabla para datos en vivo y una tabla para datos archivados. La fecha es una columna en varias filas en una tabla, no el nombre de una tabla. Entonces consultar por recuentos por fecha es sencillo como puede ser. Si necesita una solución provisional hasta que pueda arreglar su diseño, use una consulta 'UNION ALL' para combinar múltiples consultas en una, luego ajuste toda la unión en otra' SELECT' a 'SUM' todas las cuentas. –

+0

cada tabla para cada día es una de las peores ideas que he visto, ineficiente, inmanejable – Svisstack

Respuesta

11

¡Tyler tiene razón, seguramente el diseño está equivocado!

Pero es posible ..

select 
    sum(a.count) 
from 
    (select count(*) as count from table1 
    union all 
    select count(*) as count from table2) a 
+0

Gracias por la sugerencia, pero esto me da un error como ERROR 1248 (42000): cada tabla derivada debe tener su propio alias –

+0

bien, eso varía según rdbms y no estoy tan familiarizado con mysql , he editado para agregar un alias. –

+0

Ok, esto funciona para mysql, gracias por la ayuda, esto se usará en el corto plazo mientras yo diseño el db nuevamente. –

10

Corrija el diseño de su base de datos. A menos que esté realizando algún tipo de almacenamiento masivo de datos en billones de filas, una tabla separada por día es muy incorrecta.

4

sólo cambio la combinación cruzada para un sub sub + directa, por debajo. Mucho más fácil que hacer uniones o uniones

select 
    (
    select count(customer) from 2010Dec28 
    where customer='<customer name>' 
) + (
    select count(customer) from 2010Dec29 
    where customer='<customer name>' 
) 
Cuestiones relacionadas