我正在学习SQL(一点一点!)尝试对我们的数据库执行查询并添加一个count函数,通过计算内部联接查询来显示针对客户ID显示的总订单。
不知何故,它将所有数据汇总到一个拥有count函数的客户身上。
有人可以建议我哪里出错吗?
SELECT tbl_customers.*, tbl_stateprov.stprv_Name, tbl_custstate.CustSt_Destination, COUNT(order_id) as total
FROM tbl_stateprov
INNER JOIN (tbl_customers
INNER JOIN (tbl_custstate
INNER JOIN tbl_orders ON tbl_orders.order_CustomerID = tbl_custstate.CustSt_Cust_ID)
ON tbl_customers.cst_ID = tbl_custstate.CustSt_Cust_ID)
ON tbl_stateprov.stprv_ID = tbl_custstate.CustSt_StPrv_ID
WHERE tbl_custstate.CustSt_Destination='BillTo'
AND cst_LastName LIKE '#URL.Alpha#%'
答案 0 :(得分:3)
您需要在此声明中使用GROUP BY
子句才能获得所需内容。您需要确定要将其分组的级别,以便选择要添加到group by子句的字段。如果你只想在每个客户的基础上看到它,并且customers表有一个id
字段,它将看起来像这样(在你的SQL的最后):
GROUP BY tbl_customers.id
现在你可以按照更多字段分组,这取决于你想要如何分割结果。
答案 1 :(得分:0)
在您的select语句中,您使用的格式如tableName.ColumnName,但不是COUNT(order_id)
它应该是COUNT(tableOrAlias.order_id)
希望有所帮助。
答案 2 :(得分:0)
由于您是SQL的新手,也可能值得考虑您的连接的可读性 - 您上面提到的嵌套/括号连接很难阅读,我也会亲自为您的表添加别名以使查询更多访问:
SELECT
tbl_customers.customer_id
,tbl_stateprov.stprv_Name
,tbl_custstate.CustSt_Destination
,COUNT(order_id) as total
FROM tbl_stateprov statep
INNER JOIN tbl_custstate state ON statep.stprv_ID = state.CustSt_StPrv_ID
INNER JOIN tbl_customers customer ON customer.cst_ID = state.CustSt_Cust_ID
INNER JOIN tbl_orders orders ON orders.order_CustomerID = state.CustSt_Cust_ID
WHERE tbl_custstate.CustSt_Destination='BillTo'
AND cst_LastName LIKE '#URL.Alpha#%'
GROUP BY
tbl_customers.customer_id
,tbl_stateprov.stprv_Name
,tbl_custstate.CustSt_Destination
--And any other columns you want to include the count for