2017-11-20 10 views
0

学校のプロジェクトがあり、私は最後のステップに完全に突き当たりました。 私のコードがあります:結果はSoma.somaはmin Consumidor.number(-s)でなければなりません期待SQLはmax/minフィールドでフィールドを取得します

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 

は、だから今、私は次のようにテーブルを持っています。

I.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句に全体相馬クエリを置きます。このIMで期待されるリゾルトを得る。しかし、これはとても醜いと私はいくつかのよりエレガントな方法を探して見える。

P.S.トマトを投げないでください - プロジェクトの記述に従います私はFROM節でサブクエリを使用することはできませんが、私のコード全体についていくつかの観察があれば感謝します。

+2

あなたの現在の 'from'節には副選択が含まれていることに気づきました。 – Jacobm001

+2

サンプルの入出力データをいくつか含めてください。 –

+0

@ Jacobm001私は選択できないことを意味します(選択....)、今すぐすべての私のsubselectsは ジョイント句 –

答えて

-1

だから現在のテーブルから最小値を持つフィールドを取得するには

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); 

それを解決するための他の方法は本当に何もありますが(HAVING句でこのテーブル全体を照会する必要はありませ少なくcomprasのでグループSUMを確認しますか、現在の表のすべてのグループのcomprasのSUMの等価)。 可能性のある質問の重複としてマークすることができます。

関連する問題