Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL从具有最大/最小字段的行获取字段_Mysql_Sql - Fatal编程技术网

Mysql SQL从具有最大/最小字段的行获取字段

Mysql SQL从具有最大/最小字段的行获取字段,mysql,sql,Mysql,Sql,所以有一个学校项目,我完全停留在最后一步。 这是我的密码: 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

所以有一个学校项目,我完全停留在最后一步。 这是我的密码:

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
现在我有了一个类似于:

Consumidor.number Soma.soma 
123               90
456               70
789               70
预期结果应为Consumidor.number-s,其中Soma.Soma为min

即,对于本表,结果应为:

Consumidor.number
456     
789
此查询中使用的所有表都有原始架构:

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)
更新。 我没有坚持解决方案-有解决方案:

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)
只需将整个Soma查询放在WHERE子句上。有了这个,我得到了预期的结果。但这看起来很难看,我在寻找更优雅的方式


注意:不要扔西红柿-在项目陈述之后,我不能在FROM子句中使用子查询,但如果对我的整个代码有一些观察,我将不胜感激。

因此,没有真正的其他方法来解决它

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子句check中查询整个表,检查哪个组的COMPAS总和小于或等于当前表中所有组的COMPAS总和。
它可以标记为任何可能问题的副本。

您知道当前from子句包含子选择,对吗?请包含一些示例输入和输出数据。@Jacobm001我的意思是不允许有fromselect…之类的选择,我的所有子选择现在都在联接中clause@TimBiegeleisen你对什么感兴趣?我已经包括了我当前代码的输出表和一些操作后的预期输出,这些操作是关于您有一个双重嵌套查询的,我无法在脑海中分解这个问题。你需要明白我们没有你的数据。