我有4张桌子
customers
sales
sale_items
stock_items
我想列出所有客户。对于每个客户,我想要购买的总金额 - 我希望sql查询创建的字段(xxx as totalSales)
我尝试选择客户作为主表并加入其他表。我尝试选择销售作为主要表格以及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
我想
我内心加入了彼此的表格,所以我会得到所有交易的清单。我尝试过SELECT * FROM客户,尝试过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并查询每一个"事情"。我正在尝试运行一两个查询。
答案 0 :(得分:1)
我不认为您能够像他们一样显示(除非您查看<strong>Value</strong>
函数),但是那个&# 39;可能不是你的要求。
我认为你应该使用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
(我必须编写一些列名,比如sale_amount,但你必须在那里有那些我确定。你必须对这些名称进行一些调整,也许我必须如何做也可以加入,但如果我了解您的需求,这应该会有一些变化。