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