2017-11-20 1 views
0

그래서 학교 프로젝트가 있으며 마지막 단계를 완전히 마쳤습니다. Soma.soma는 분입니다 Consumidor.number (-s)해야SQL은 최대/최소 필드가있는 행에서 필드를 가져옵니다.

Consumidor.number Soma.soma 
123    90 
456    70 
789    70 

예상 결과 : 그래서 지금 내가 같은 테이블이

SELECT Consumidor.numero, Soma.soma 
FROM Consumidor 
JOIN 
    (SELECT compra.consumidor, SUM(Eco.eco*compra.quantidade) as soma 
    FROM compra 
    JOIN 
    (SELECT composto.produto, composto.prodMarca, Produto.nome, 
    sum(Elemento.pegadaEcologica * composto.percentagem/100) AS eco 
    FROM composto 
    JOIN Produto 
    ON composto.produto = Produto.codigo 
    AND composto.prodMarca = Produto.marca 
    JOIN Elemento 
    ON composto.elemento = Elemento.codigo 
    GROUP BY composto.produto, composto.prodMarca) Eco 
    ON compra.produto = Eco.produto AND compra.prodMarca = Eco.prodMarca 
    GROUP BY compra.consumidor) Soma 
ON Consumidor.numero = Soma.Consumidor 

: 내 코드가있다.

e.e. 이 테이블의 결과를해야한다 :

Consumidor (PK numero, email, sexo, nascimento) 
Elemento (PK codigo, nome, pegadaEcologica, saude) 
Produto (PK codigo, FK PK Marca.numero marca, nome, tipo, comercioJusto) 
compra (FK PK Produto.codigo produto, FK PK Produto.marca prodMarca, Consumidor.numero, quantidade) 
composto (FK PK Produto.codigo produto, FK PK Produto.marca prodMarca, FK PK Elemento.codigo elemento, percentagem) 

업데이트 :이 쿼리에 사용 된 모든 테이블에 대한 원래의 스키마가있다

Consumidor.number 
456  
789 

. 은 내가 솔루션 붙어 didnt한다 - 해결책이 :

SELECT Consumidor.numero, Soma.soma 
FROM Consumidor 
JOIN 
    (SELECT compra.consumidor, SUM(Eco.eco*compra.quantidade) as soma 
    FROM compra 
    JOIN 
    (SELECT composto.produto, composto.prodMarca, Produto.nome, 
    sum(Elemento.pegadaEcologica * composto.percentagem/100) AS eco 
    FROM composto 
    JOIN Produto 
    ON composto.produto = Produto.codigo 
    AND composto.prodMarca = Produto.marca 
    JOIN Elemento 
    ON composto.elemento = Elemento.codigo 
    GROUP BY composto.produto, composto.prodMarca) Eco 
    ON compra.produto = Eco.produto AND compra.prodMarca = Eco.prodMarca 
    GROUP BY compra.consumidor) Soma 
ON Consumidor.numero = Soma.Consumidor 
WHERE Soma.soma <= ALL 
    (SELECT SUM(Eco.eco*compra.quantidade) as soma 
    FROM compra 
    JOIN 
    (SELECT composto.produto, composto.prodMarca, Produto.nome, 
    sum(Elemento.pegadaEcologica * composto.percentagem/100) AS eco 
    FROM composto 
    JOIN Produto 
    ON composto.produto = Produto.codigo 
    AND composto.prodMarca = Produto.marca 
    JOIN Elemento 
    ON composto.elemento = Elemento.codigo 
    GROUP BY composto.produto, composto.prodMarca) Eco 
    ON compra.produto = Eco.produto AND compra.prodMarca = Eco.prodMarca 
    GROUP BY compra.consumidor) 

간단히 말해서 전체 소마 쿼리 WHERE 절에 설치해도. 이 메신저로 예상 리셋 되네. 그러나 이것은보기 흉하게 보이고 좀 더 우아한 방법을 찾고 있습니다.

P. 토마토를 던지지 마십시오 - 프로젝트 진술에 따라 FROM 절에 하위 쿼리를 사용할 수 없지만 전체 코드에 대한 관찰이 있다면 감사하겠습니다.

+2

현재 'from' 조항에 subselect가 있다는 것을 알고 있습니까? – Jacobm001

+2

몇 가지 샘플 입력 및 출력 데이터를 포함하십시오. –

+0

@ Jacobm001 나는 선택의 여지가 없다는 것을 의미한다. (선택 ....). 내 모든 subselects가 join 절 –

답변

-1

그래서 당신이 HAVING 절에이 모든 테이블을 쿼리가 현재 테이블에서 최소 값으로 필드를 얻으려면 그것을

SELECT Consumidor.numero 
FROM compra 
JOIN Consumidor 
ON compra.consumidor = Consumidor.numero 
JOIN 
    (SELECT composto.produto, composto.prodMarca, Produto.nome, 
    sum(Elemento.pegadaEcologica * composto.percentagem/100) AS eco 
    FROM composto 
    JOIN Produto 
    ON composto.produto = Produto.codigo 
    AND composto.prodMarca = Produto.marca 
    JOIN Elemento 
    ON composto.elemento = Elemento.codigo 
    GROUP BY composto.produto, composto.prodMarca) Eco 
ON compra.produto = Eco.produto AND compra.prodMarca = Eco.prodMarca 
GROUP BY compra.consumidor 
HAVING SUM(Eco.eco*compra.quantidade)<= ALL 
    (SELECT SUM(Eco.eco*compra.quantidade) 
    FROM compra 
    JOIN Consumidor 
    ON compra.consumidor = Consumidor.numero 
    LEFT JOIN Dependente 
    ON Dependente.consumidor = Consumidor.numero 
    JOIN 
     (SELECT composto.produto, composto.prodMarca, Produto.nome, 
     sum(Elemento.pegadaEcologica * composto.percentagem/100) AS eco 
     FROM composto 
     JOIN Produto 
     ON composto.produto = Produto.codigo 
     AND composto.prodMarca = Produto.marca 
     JOIN Elemento 
     ON composto.elemento = Elemento.codigo 
     GROUP BY composto.produto, composto.prodMarca) Eco 
    ON compra.produto = Eco.produto 
    AND compra.prodMarca = Eco.prodMarca 
    GROUP BY compra.consumidor); 

를 해결 할 정말 다른 방법이 없습니다 (확인 compras 어떤 그룹 SUM 이하 또는 현재 테이블의 모든 그룹에있는 compras의 합계). 의심되는 질문과 중복되는 것으로 표시 할 수 있습니다.

관련 문제