2014-04-23 3 views
0

이 쿼리를 실행했습니다.GROUP BY + SUM where 절

SELECT 
    grupo, 
    solicitante, 
    sum(valuacion) as valuacion, 
    fecha, 
    count(*) as cant, 
    sum(aprobado) as ap, 
    sum(goe) as goe 
FROM 
    presupuestos 
WHERE 
    ap=0 AND 
    goe=cant AND 
    grupo>0 AND 
    elim=0 AND 
    sup=0 
GROUP BY grupo 
ORDER BY fecha_aprobacion ASC 

는 MySQL은 반환

#1054 - Unknown column 'ap' in 'where clause' 

"AP는"합이며 연속 열이 아니기 때문에.

이에 대한 SQL 해결 방법이 있습니까?

답변

6

당신의 HAVING 절에 그 참조해야하고, 별칭은 아직 제작되지 않습니다. 당신은 또한 WHERE에 집계 함수를 사용할 수 없습니다, 대신 HAVING를 사용해야합니다

SELECT 
    grupo, 
    solicitante, 
    sum(valuacion) as valuacion, 
    fecha, 
    count(*) as cant, 
    sum(aprobado) as ap, 
    sum(goe) as goe 
FROM 
    presupuestos 
WHERE 
    grupo>0 AND 
    elim=0 AND 
    aprobado=0 
GROUP BY grupo,solicitante,fecha 
HAVING sum(aprobado)=0 AND sum(goe)= count(*) AND sum(goe)=1 
ORDER BY fecha_aprobacion ASC 
+1

+1을 저주하기 위해 +1. – Zane

0

당신은 쿼리의 선택 부분이 마지막으로 실행되기 때문에 당신은 WHERE 절에 별칭을 참조 할 수 없습니다

SELECT 
    grupo, 
    solicitante, 
    sum(valuacion) as valuacion, 
    fecha, 
    count(*) as cant, 
    sum(aprobado) as ap, 
    sum(goe) as goe 
FROM 
    presupuestos 
WHERE 
    grupo>0 AND 
    elim=0 AND 
    sup=0 AND 
    goe=1 AND 
    aprobado=0 
GROUP BY grupo 
HAVING 
    sum(aprobado) = 0 and 
    count(*) = sum(goe) 
ORDER BY 
    fecha_aprobacion ASC 
+2

이 작동하지 않습니다 - 그들이해야 - u는 여전히'WHERE' 절에'goe'와'cant'이 HAVING 절로 옮겨 갔다. –

+1

이 시나리오에서 'GROUP BY'는 비논리적이라고 지적하고자합니다. 집계 함수에 포함되지 않은 모든 열은 ** GROUP BY에 포함되어야합니다. 나는 MySQL이 당신이 이것을 어쨌든 할 수있게 할 것이라는 것을 알고 있지만 그것이 맞지는 않습니다. – Zane

+0

where 절에서 goe = 1을 제거해야 할 수도 있지만 goe라는 열이 있으므로 작동하게됩니다. –