Mysql SUMA y GROUP BY de 3 mesas

Pamela:

Tengo 3 tablas de la base de la siguiente manera:

proyectos:

id

project_name

project_location

status

project_expenses

id

project_id

expense_category

expense_subcategory

amount

userid

date

payment_status

project_status

project_income

id

project_id

project_income

date

userid

project_status

projects.id, project_expenses.project_id y project_income.project_id están relacionados.

Necesito crear una consulta que muestra PROJECT_ID, Project_Name, SUM de Project_Income, SUM de Project_expenses

Probé la siguiente consulta, pero no obtener resultado correcto.

SELECT p.id AS id, p.project_name AS project_name, SUM(i.project_income) AS income, SUM(e.amount) AS expenses
FROM project_income i, project_expenses e, projects p
WHERE i.project_id = p.id AND e.project_id = p.id AND p.status = 'Active'
GROUP BY id

Tengo actualmente en 2 filas project_income y 4 filas en project_expenses. El resultado es project_income pantallas doble de los valores. Algo está mal con mi JOIN.

Siendo un novato que soy incapaz de entender lo que estoy haciendo mal ?? Solicitando ayuda ...

Andreas:

Utilice sub-selecciona en las columnas de resultados de la consulta. No hay necesidad de GROUP BY.

SELECT p.id
     , p.project_name
     , ( SELECT SUM(i.project_income)
           FROM project_income i
          WHERE i.project_id = p.id
       ) AS income
     , ( SELECT SUM(e.amount)
           FROM project_expenses e
          WHERE e.project_id = p.id
       ) AS expenses
  FROM projects p
 WHERE p.status = 'Active'

El problema con la consulta en la pregunta se explica mejor con un ejemplo.

Usted dice que hay 2 filas project_incomey 4 filas en project_expenses. Digamos que los ingresos 2 son 1000 y 1500, y los gastos son 4 615, 750, 840, y 900.

Dado que no existen restricciones entre ellos, lo que significa que obtendrá la combinación cruzada, es decir, 8 registros:

income  expense
1000    615
1000    750
1000    840
1000    900
1500    615
1500    750
1500    840
1500    900

Ahora, cuando usted resume incomea obtener 4 veces el valor que desee, y cuando usted resume el gasto se obtiene 2 veces el valor que desee.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=339406&siteId=1
Recomendado
Clasificación