Mysql 多联接表上的求和

Mysql 多联接表上的求和,mysql,sql,left-join,inner-join,Mysql,Sql,Left Join,Inner Join,我有四张桌子 customers sales sale_items stock_items 我想列出我所有的客户。对于每个客户,我希望购买的总金额-我希望sql查询创建的字段(xxx作为totalSales) 我尝试选择客户作为主表,并将其他表连接到主表中。我尝试选择sales作为主表,也选择sales\u项目。我得到了正确的总和计算,但它会首先显示第一个客户 这就是我的桌子的样子: *TABLE customers* id customer_name email *TABLE sales*

我有四张桌子

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

我尝试选择客户作为主表,并将其他表连接到主表中。我尝试选择sales作为主表,也选择sales\u项目。我得到了正确的总和计算,但它会首先显示第一个客户

这就是我的桌子的样子:

*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
我想

  • 创建所有客户的列表,首先按销售额(价值)最高的客户排序。不是销售数量,而是销售总额(销售价值)
  • 在客户名称下显示每个客户购买的项目。这不是针对每个订单,而是针对所有销售。因此,如果客户X购买了一罐咖啡,每个订单数为4,那么这罐咖啡将显示4次。如果可能的话,我想把项目列在a-z中
我已将这些表相互内部联接,因此我将获得所有事务的列表。我尝试过从客户处选择*,从销售处选择*,从销售物品处选择。我尝试了按客户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对每一个“东西”进行查询。我正在尝试运行一到两个查询。

我认为您无法像您所显示的那样将它们分成单独的行(除非您查看
汇总功能),但这可能不是您的要求

我认为您应该使用
GROUP\u 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,但我确信您必须在其中填写。您必须对这些名称进行一些调整,也许还需要对我如何进行连接进行调整,但如果我了解您的需要,这应该会有一些更改)。

请检查