SQL计数 - 第一次

时间:2013-06-04 10:57:41

标签: sql

我正在学习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#%'

3 个答案:

答案 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