mysql - 如何从两个表中选择并计算数据?

标签 mysql sql database

我有一个facture表和一个fournisseur表,但我想从数据库中选择我所有的fournisseur,并且我想计算字段nvsolde (solde-SUM(facture.montant))。但是当我使用这个请求时,它给出的只是 fournisseur 已经有一个裂缝。

SELECT fournisseur.id
     , fournisseur.nom
     , fournisseur.solde
     , fournisseur.solde-SUM(facture.montant) AS nvsolde 
FROM fournisseur
   , facture 
WHERE facture.id = fournisseur.id 
GROUP BY fournisseur.nom"

最佳答案

根据您描述问题的方式,您需要一个左连接。现在是添加以下建议的好时机:永远不要FROM 子句中使用逗号。 始终使用显式JOIN语法。

SELECT fo.id, fo.nom, fo.solde,
       fo.solde - COALESCE(SUM(fa.montant), 0) AS nvsolde 
FROM fournisseur fo LEFT JOIN
     facture fa
     ON fa.id = fo.id 
GROUP BY fo.id;

一些注意事项:

  • 如果没有匹配项,您需要使用COALESCE()。这会将 NULL 转换为 0
  • 表别名使查询更易于编写和阅读。
  • ORDER BY 使用 id 列,该列在 fornisseurs 中可能是唯一的。在GROUP BY 中使用主键或唯一键是可以接受的,也是一种良好的做法(甚至与 ANSI 标准一致)。但是,使用其他列绝对是一种不好的做法。

关于mysql - 如何从两个表中选择并计算数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33612165/

相关文章:

mysql - 在字段中添加逗号

javascript - MySQL 查询在 PHP 中出现 JSON.parse 问题

SQL : return value in required format

C# MongoDB bulk Upsert - 批量写入操作导致一个或多个错误

php - 错误 1064 (42000) 语法错误 - 哪里?

javascript - 如何将 praat 脚本合并到网页/数据库中

mysql - 为什么需要将表(在 MySQL 中)中的至少一列指定为 PRIMARY KEY,以便表通过 JDBC 接受 UPDATE 和 INSERT 语句?

mysql - 当表有键值对时如何在sql查询中使用IN

MySQL - 存储过程 - 仅使用 while 循环获取最后一条记录

sql - ORA-01438 : value larger than specified precision allows for this column - How do i get which column it is referring to?