mysql - 对多连接表求和

标签 mysql sql left-join inner-join

我有4张 table

customers
sales
sale_items
stock_items

我想列出我所有的客户。对于每个客户,我想要购买的总金额 - 我希望 sql 查询创建的字段(xxx 作为 totalSales)

我尝试选择客户作为主表并加入其他表。我尝试选择 sales 作为主表以及 sale_items。我得到了正确的总和计算,但它会先显示第一个客户。

这是我的表格的样子:

*TABLE customers*
id
customer_name
email

*TABLE sales*
id
customer_id
transaction_date

*TABLE sale_items*
id
sale_id
stock_item_id

*TABLE stock_items*
id
item_name
price

我要

  • 创建一个包含所有客户的列表,按销售额(值(value))最高的客户排在最前面。不是销售额的数量,而是销售额的总金额(销售额)
  • 在客户名称下显示每位客户购买的商品。这不是针对每个订单,而是针对所有销售。因此,如果客户 X 购买了一 jar 咖啡,每次订购超过 4 次,则该 jar 咖啡将显示 4 次。不过,如果可能的话,我希望列出 a-z 的项目。

我已经在内部连接了彼此的表,所以我会得到所有交易的列表。我试过 SELECT * FROM customers,试过 FROM sales,试过 sale_items。我试过 GROUP_BY customer_id,但我会得到不正确的计数。

我想这样显示数据。

CUSTOMER                    ITEMS                   TOTAL VALUE
John Doe                    Coffee
                            Milk
                            Tea
                            Milk
                            Bread
                            Coffee                  500

Jane Doe                    Coffee
                            Milk
                            Coke                    350

Denver Doe                  Coffee
                            Milk
                            Bread
                            Bread                   125

我不想使用 PHP 查询每个“事物”。我正在尝试运行一两个查询。

最佳答案

我不认为你能够像你展示的那样将它们完全放在单独的行中(除非你查看 ROLLUP 函数),但这可能不是必需的给你。

我认为您应该使用 GROUP_CONCAT,它是一种类似于 SUM 的聚合函数,但它会创建一个由所有值组成的逗号分隔列表:

SELECT 
*
SUM(sale_amount) as total_sales,
GROUP_CONCAT(item_name) as item_names
FROM customers c
JOIN sales s USING (customer_id)
JOIN sale_items si USING (sale_id)
JOIN stock_items sit USING (stock_item_id)
GROUP BY customer_id

您应该看到的示例行是:

Denver Doe     Coffee,Milk,Bread,Bread     125

(我必须编写一些列名称,例如 sale_amount,但我敢肯定您必须在其中包含这些名称。您必须对这些名称进行一些调整,也许还需要对我进行连接的方式进行调整,但如果我了解您的需求,这应该可以进行一些更改。

关于mysql - 对多连接表求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50589370/

相关文章:

mysql - 有人可以向我解释一下这个 mysql select 查询值的逻辑吗?

mysql - 如何在 ubuntu 10.4 中使用终端使用 phpmyadmin mysql 数据库?

mysql - 未除以数字的行数

sql - Hive中的连接行为不同吗?

php - 减少 MySQL JOIN 语句执行时间

sql-server - JOIN 中的 IS NULL 条件与查询中的 WHERE 之间的区别

php - 我的客户的部分信息被插入到数据库中,而有些则没有。

mysql - Amazon RDS Mysql max_used_connections 只有 3

mysql - 如何在现有列中添加前导零?

sql - MODIFY 是否保留 MariaDB 中的其他列属性?