Estoy escribiendo un script que obtiene un recuento de filas para algunas tablas, sin embargo, para algunas tablas solo quiero obtener un recuento de filas donde se establece un indicador (en este caso activo = 1). ¿Hay alguna manera de hacer esto en una consulta?
P.ej:
La tabla users
tiene una columna llamada activa
La tabla clients
no tiene una columna llamada activa
Quiero obtener un recuento de usuarios donde active = 1 y solo obtener un recuento de clientes.
Antes de decir "solo codifíquelo", esta es una consulta que va dentro de un script de Python que podría ejecutarse en numerosas bases de datos diferentes y no tengo forma de saber qué tablas seleccionará mi script y si tienen una columna llamada active
, y Preferiría tener solo una consulta para hacerlo todo en lugar de dos separadas y confiar en mysql para arrojar un error, así que sé usar la otra.
Respuestas:
Mi primer pensamiento sería usar el
INFORMATION_SCHEMA
primero, para que pueda saber (en una consulta para todas las tablas en la instancia de MySQL) qué tablas tienen unaactive
columna y luego usar esa información para construir sus consultas. Y este es probablemente el enfoque más sensato.Sin embargo, hay otra forma complicada que funciona sin importar si la tabla tiene o no una columna de este tipo:
Probado en SQL-Fiddle ¿Cómo funciona?
Si la tabla tiene una columna llamada
active
, la consulta se "traduce" como si tuviera:Si la tabla no tiene una columna llamada
active
, la consulta se "traduce" como si tuviera:fuente
Recuento de clientes por ID de usuario con Gran total utilizando solo la
users
tabla:Si la tabla de clientes ha eliminado registros, haga esto:
Para
users
tablas que no tienen unaactive
columna:o
Debería ejecutar estas consultas en cada base de datos y
UNION ALL
los resultados.Si desea aprovechar la base de datos INFORMATION_SCHEMA, aquí hay una conjetura:
Darle una oportunidad !!!
fuente
Me gustaría complementar la respuesta de @ ypercubeᵀᴹ, pero no puedo escribir comentarios debido a las restricciones.
Si no sabe qué nombre de columna se usa y necesita obtener su valor máximo, puede hacerlo:
fuente