MySQL - 在左连接中使用不带Where的计数

标签 mysql database left-join

我的表格如下所示:

产品

 id       title      price 
--------------------------------------
  5       777        15         
  6       777        16
  7       777        14

产品详情

 id       pid      quantity       color
--------------------------------------
  1       5       5               red
  2       5       5               yellow
  3       5       5               green
  4       6       6               yellow
  5       6       5               red
  6       7       5               red
  7       7       4               pink

我想得到以下输出:

期望的结果

  id      title      price  numberofdetails quantity
------------------------------------------------------
  5       777        15         3           15
  6       777        16         2           11
  7       777        14         2           9

为了得到这个,我正在运行以下 mysql 查询:

查询

SELECT p.id, p.title, p.price, COUNT(pd.id), SUM(pd.quantity) 
FROM products as p 
LEFT JOIN productdetails as pd 
ON p.id = pd.pid

编写此查询时假设由于我已经定义了 products.id 和 Productdetails.pid 之间的关系,因此 COUNT(pd.id) = 3。它不是只计算匹配的行,而是显示“7”,行。如何修复我的查询以获得如上所示的所需结果。

最佳答案

你们已经很接近了。我认为你只需要GROUP BY:

SELECT p.id, p.title, p.price, COUNT(pd.id), SUM(pd.quantity)
FROM products p LEFT JOIN
     productdetails pd
     ON p.id = pd.pid
GROUP BY p.id, p.title, p.price;

在大多数数据库中,您的查询将返回错误。但是,MySQL 扩展了 SQL 的定义,以允许 SELECT 中的列(例如 p.id )不在 GROUP BY 中。由于聚合函数,您有一个聚合查询。如果没有 GROUP BY,它总是返回一行,汇总所有数据。

关于MySQL - 在左连接中使用不带Where的计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39723824/

相关文章:

php/pdo/mysql - 访问被拒绝

php - 返回多于 1 行的子查询

database - pgadmin4 允许使用错误密码以管理员用户身份登录

mysql - JOINing 表同时忽略重复项

mysql - 使用另一个表中函数的最大结果更新表

PHP/MySQL : Import data and store in hierarchical nested set for use with jsTree

单个查询中的 MySQL JOIN 和 COUNT

Grails,左外连接

mysql - 如何在 MARIADB/MYSQL 中为函数/过程声明表到变量?

c# - 我怎么知道什么时候到达数据读取器的末端?