0

我正在学习 SQL(一点一点!)尝试对我们的数据库执行查询并添加一个计数函数,以通过在内部连接查询中计数来显示针对客户 ID 出现的总订单。

不知何故,它通过计数功能将所有数据集中到一个客户身上。

有人可以建议我哪里出错了吗?

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#%'
4

3 回答 3

3

GROUP BY为了得到你想要的,你需要在这个语句中加入一个子句。您需要确定要对其进行分组的级别,以便选择要添加到分组依据子句的字段。如果您只想按每个客户查看它,并且客户表有一个id字段,它看起来像这样(在您的 sql 的最后):

GROUP BY tbl_customers.id

现在您当然可以按更多字段进行分组,这取决于您希望如何分割结果。

于 2013-06-04T11:01:52.927 回答
0

在您的选择语句中,您使用的是 tableName.ColumnName 之类的格式,但不是 COUNT(order_id)

它应该是 COUNT(tableOrAlias.order_id)

希望有帮助。

于 2013-06-04T11:28:15.597 回答
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
于 2013-06-04T11:30:53.590 回答