sql - 有没有办法替代 GROUP BY

标签 sql database postgresql

我正在使用两个表: comporder(数量,cod(Fk on cod(产品),cod_ship); 产品(鳕鱼(Pk),价格); 我需要生成一个查询,该查询将为我提供每个 cod_ship 的 comporder 表中产品价格的总和; 我想出了这个查询:

SELECT sum(p.price),c.cod_ship
FROM product as p JOIN comporder as c
ON(p.cod=c.cod)
GROUP BY c.cod_ship;

但是我不允许使用 GROUP BY 功能,而且我似乎无法获得数量超过 1 的价格。 例如,如果在我的压缩表中,我有:

  quantity     cod     cod_ship   
     2     "1234567890"   27       
     3     "1234567890"   28       
     2     "7894561230"   28       
     1     "5678324515"   28       
     4     "1234567890"   27       
     1     "1234567890"   27    

如果在我的产品表中有:

     cod          price
 "1234567890"     20.00
 "7894561230"     19.99 
 "5678324515"     25.99

如果我应用我的查询,结果将是:

 sum     cod_ship
 60        27
 65.979    28

当实际结果应该是,根据表中产品的数量:

sum    // cod_ship//
140      // 27//
125,97    //28//

所以我似乎无法弄清楚如何根据产品的数量和没有 GROUP BY 函数来获得总和,我应该只将总和显示为“输出”,有人可以帮助我了解如何我可以做吗?

回复评论: 由于分配,我不能使用 group by。 我正在使用 PostgreSQL 12.1

最佳答案

按照 OP 在评论中的要求,这里是一个使用 GROUP BY 的解决方案:

SELECT SUM(price * quantity) as sum, cod_ship FROM comporders
INNER JOIN products ON products.cod = comporders.cod
GROUP BY cod_ship;

编辑:

下面是没有 GROUP BY 的解决方案:

SELECT DISTINCT 
  (
    SELECT SUM(price * quantity)
       FROM products
    INNER JOIN comporders ON products.cod = comporders.cod
    WHERE cod_ship = results.cod_ship
  ) AS sum,
  cod_ship
FROM comporders AS results;

它的工作原理是首先选择一个唯一的 cod_ship id 列表(我们之前对查询进行分组的依据)。 然后我们使用 cod_ship id 执行子查询来计算每列的总和。我们使用表别名 results 来引用子查询的父查询中的值。

SQL Fiddle Link

关于sql - 有没有办法替代 GROUP BY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60623068/

相关文章:

java - 如何使用 Hibernate 映射 PostgreSQL 数组

postgresql - 如何在事务模式下使用 pgBouncer 的 statement_timeout

mysql - 按周分组的记录数的累计总和

PHP/mySQL count($array[id]) = 1 即使表中有 8 个元素

mysql - 用于获取唯一条目的 SQL 查询。查询是否正确、高效?

database - 如何从多个 SQLite 数据库中选择所有列

php - 尝试将数据插入数据库时​​出错。简单的形式

php - 在 laravel 中迁移我的表时出现错误

sql - 创建具有日期/时间范围约束的表以防止重叠

sql - 使用 GROUP BY ALL 的缺点?