Pregunta

SELECT
  ( SELECT
       SUM(IF(status = 'Active', 1, 0)) AS `univ_active`,
       SUM(IF(status = 'Inactive', 1, 0)) AS 'univ_inactive',
       Count(*)
    FROM online_university
  ) 
 AS tot_university,
( SELECT 
    SUM(IF(status = 'Active', 1,0)) AS `user_active`,
    SUM(IF(status = 'Inactive', 1,0)) AS 'user_inactive'
    Count(*)
  FROM online_register_user)
AS tot_users

El resultado debe ser

univ_active=4 univ_inactive=2 tot_university=6
user_active=10 user_inactive=3 tot_users = 13

¿Cómo puedo conseguir esto? La consulta anterior ERROR volver: Operando debe contener 1 columna (s)

Esta preparar el informe para un proyecto de todas las tablas que regresan, Inactivo, Activo Total de entradas de la tabla. Si este método es equivocado entonces ¿qué he de usuario? Cualquier sugerencia.

¿Fue útil?

Solución

Las subconsultas sólo puede devolver una columna. Usted ya sea necesidad de hacer varias subconsultas, una combinación, o un truco barato concat (CONCAT_WS(',', SUM(IF(status = 'Active', 1,0)), SUM(IF(status = 'Inactive', 1,0))) en un solo sub consulta.

Otros consejos

Como dice el error, que está seleccionando una subconsulta que devuelve dos columnas.

SELECT (one_thing, another_thing) AS combined_thing

no existe en SQL. Usted tendría que poner cada sub consulta en su propia:

SELECT (
    SELECT SUM(IF(status='Active', 1, 0)) FROM online_university
) AS univ_active, (
    SELECT SUM(IF(status='Inactive', 1, 0)) FROM online_university
) AS univ_inactive, (
    SELECT SUM(IF(status='Active' OR status='Inactive', 1, 0)) FROM online_university
) AS tot_university, (
    SELECT SUM(IF(status='Active', 1, 0)) FROM online_register_user
) AS user_active, (
    -- and so on

Sin embargo, en realidad no hay beneficio para hacer todo esto en una sola consulta. Mucho más fácil decir:

SELECT COUNT(*) FROM online_university WHERE status='Active';  -- univ_active
SELECT COUNT(*) FROM online_university WHERE status='Inactive';  -- univ_inactive
SELECT COUNT(*) FROM online_university;  -- tot_university
SELECT COUNT(*) FROM online_register_user WHERE status='Active';  -- user_active
    -- and so on

luego presentar estos resultados juntos en la capa de aplicación. Una cláusula WHERE es más rápida y se puede utilizar índices adecuados, que una expresión calculada como SUM / SI no puede.

Más simple aún:

SELECT status, COUNT(*) FROM online_university GROUP BY status;
SELECT status, COUNT(*) FROM online_register_user GROUP BY status;

Como BipedalShark dijo, sus consultas debe tener 1 columna y tienen 2 ahora. Pero además de eso usted debe pensar en utilizar la cuenta (*) y donde cláusula. Por lo tanto, debe ser algo bajo la siguiente manera:

select
 (select count(*) from online_university where status = 'Active') as univ_active,
 (select count(*) from online_university where status = 'Inactive') as univ_inactive,
 (select count(*) from online_register_user where status = 'Active') as user_active,
 (select count(*) from online_register_user where status = 'Active') as user_inactive

por estructura la consulta como acabo de hacer en la cuestión, se hace muy evidente que el tot_university alias, por ejemplo, estaría asociado con dos columnas, que no es posible ...

Además de este error de sintaxis / lógica, toda la consulta parece mal estructurado para producir el resultado deseado.

Se parece mucho a la tarea, o auto asignado el aprendizaje, por lo que no voy a estropearlo con una consulta ya hecho, en cambio aquí hay algunos consejos.

  • la información proviene de dos, tablas no relacionadas distintas, tal vez utilizar UNION para obtener resultados en una sola consulta (mientras se ejecuta efectivamente dos consultas) (que entonces utilizaría una columna adicional con un texto como 'Univ', 'Público' a diferenciar las dos líneas)
  • la suma (si la columna = x, 1,0) es un buen truco para contar valores particulares, sin tener que hacer un grupo por, esencialmente "enrollar" los recuentos en un solo paso.
  • el concat () truco es bueno si su atención se centra exclusivamente en los resultados de tipo texto, por ejemplo, para escribir, tal cual, en un informe, de lo contrario, sería preferible mantener los resultados en columnas separadas, para su posterior procesamiento , la exhibición en las tablas etc ...
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top