sum

uurv41yg  于 2021-06-23  发布在  Mysql
关注(0)|答案(1)|浏览(331)

我有四张table

customers
sales
sale_items
stock_items

我想列出我所有的顾客。对于每个客户,我希望购买的总金额—我希望sql查询创建的字段(作为totalsales)
我尝试选择customers作为主表,并将其上的其他表连接起来。我试着选择sales作为主表,也选择sale\u项。我有点正确的总和计算,但它会显示我的第一个客户第一。
我的table是这样的:


* 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来查询每一个“东西”。我正在尝试运行一个或两个查询。

ecfdbz9o

ecfdbz9o1#

我不认为你能像你所展示的那样把它们分成不同的行(除非你仔细观察 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\u amount,但我肯定你必须有这些列名称。您必须对这些名称进行一些调整,也许还需要对我如何进行连接进行调整,但如果我了解您的需求,则应该进行一些更改。

相关问题