2

我是 SQL 的初学者。我只能单独执行所有这些操作,但是当我必须在同一个 SQL 命令中执行所有这些操作时,我感到很困惑。所以你能帮我解决这个问题吗?

我有 3 个表 tbl_user、tbl_sActivity、tbl_client

tbl_user
    user_id | first_name | last_name |
    1       |  name1     |  last1    |
    21      |  name2     |  last2    |
    22      |  name3     |  last3    |

tbl_sActivity
user_id | client_id | act_status | act_date |
 1      |    7      |    cold    | 19/7/12  |
 1      |    7      |   dealed   | 30/7/12  |
 22     |    5      |    cold    | 7/8/12   |
 1      |    6      |    cold    | 16/7/12  |
 1      |    6      |    warm    | 18/7/12  |
 1      |    6      |     hot    | 25/7/12  |
 1      |    6      |   dealed   | 7/8/12   |
 1      |    8      |    warm    | 1/8/12   |
 1      |    8      |   dealed   | 12/8/12  |
 21     |    4      |    warm    | 8/8/12   |
 21     |    4      |   dealed   | 10/8/12  |

tbl_client
client_id | client_price |
4         |     400      |
5         |     500      |
6         |     600      |
7         |     700      |
8         |     800      |

我希望输出看起来像这样

user_id |Count_Client_id |Sum_client_price | Max_act_date|
1       |     3          |     2100        |   12/8/12   |
21      |     1          |      400        |   10/8/12   |
22      |     1          |      500        |    7/8/12   |

非常感谢下面是我的尝试...

SELECT tbl_user.user_id, Count(tbl_client.client_id) AS count_client, 
       Sum(tbl_client.client_price) AS SumOfclient_price, tbl_user.first_name,
       tbl_user.last_name, Max(tbl_sActivity.act_date) AS MaxOfact_date
FROM   (tbl_client INNER JOIN tbl_sActivity ON 
       (tbl_client.client_id=tbl_sActivity.client_id) AND 
       (tbl_sActivity.client_id=tbl_client.client_id)) INNER JOIN tbl_user ON
        tbl_sActivity.user_id=tbl_user.user_id
GROUP BY tbl_user.user_id, tbl_user.first_name, tbl_user.last_name;

这是返回正确输出的 count(distinct client_id)

SELECT tmp.user_id, Count(*) AS count_distinct_clients
FROM (SELECT DISTINCT user_id, client_id FROM tbl_sActivity)  AS tmp
GROUP BY tmp.user_id;
4

2 回答 2

4

久经考验的 Access 2003:

SELECT U.user_id, Count(A.act_status) AS Count_Client_id, Sum(C.client_price) AS
Sum_client_price, Max(A.act_date) AS Max_act_date
FROM (tbl_user AS U INNER JOIN tbl_sActivity AS A ON U.user_id = A.user_id) INNER JOIN 
tbl_client AS C ON A.client_id = C.client_id
GROUP BY U.user_id

更新以根据示例生成输出:

SELECT U.user_id, Count(A.client_id) AS CountOfclient_id, Sum(A.client_price) AS
SumOfclient_price, S.Max_act_date
FROM (tbl_user AS U INNER JOIN [SELECT DISTINCT tbl_SActivity.client_id, 
tbl_SActivity.user_id, tbl_client.client_price
FROM tbl_SActivity INNER JOIN tbl_client ON tbl_SActivity.client_id = 
tbl_client.client_id]. AS A ON U.user_id = A.user_id) INNER JOIN [SELECT MAX(act_date) AS Max_act_date, user_id FROM tbl_sActivity GROUP by user_id]. AS S ON U.user_id = S.user_id
GROUP BY U.user_id, S.Max_act_date
于 2012-08-16T09:06:27.000 回答
-2

试试这个查询。我测试过:

SELECT  a.user_id ,
    COUNT(DISTINCT b.client_ID) Count_Client_id,
    SUM( DISTINCT c.client_Price) Sum_client_price,
    MAX(b.act_date) Max_act_date
FROM    tbl_user a
        INNER JOIN tbl_sActivity b
            on a.user_id = b.user_id
        INNER JOIN tbl_client c
            on b.client_ID = c.client_ID
GROUP BY a.user_ID

请享用。

于 2012-08-16T03:41:32.477 回答