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 userstiene una columna llamada activa
La tabla clientsno 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_SCHEMAprimero, para que pueda saber (en una consulta para todas las tablas en la instancia de MySQL) qué tablas tienen unaactivecolumna 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
userstabla:Si la tabla de clientes ha eliminado registros, haga esto:
Para
userstablas que no tienen unaactivecolumna:o
Debería ejecutar estas consultas en cada base de datos y
UNION ALLlos 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