2013-05-21 46 views
1

我的第一個SQL查詢是:使用留下了2個不同的查詢組參加由

SELECT username,COUNT(username) as total_active_users FROM users WHERE active = '1' GROUP BY referrer // $act_user 

要算活躍用戶爲每個引薦

第二個SQL查詢:

SELECT COUNT(orders) as total_user_orders FROM users_orders GROUP BY $act_user['username'] // the username from the first query. 

要計算每個用戶的訂單總數,我從第一個查詢中獲得

我正在嘗試要做到這一點使用LEFT JOIN只計算誰擁有1爲了活躍用戶至少

的問題是:我有2個不同的GROUP BY第一個是「引薦」,第二是「用戶名」

我試圖做類似:

SELECT u.username, COUNT(u.username) as total_active_users, COUNT(b.orders) as 
total_user_orders FROM users u LEFT JOIN users_orders b on u.username = b.username 
WHERE u.active = '1' AND total_user_orders >= '1' GROUP BY (u.referrer for u) and (b.username for b) 

有什麼想法嗎?

回答

1

你可以這樣做,而不是:

SELECT 
    a.username, 
    COUNT(u.username) as total_active_users, 
    COUNT(b.orders) as total_user_orders 
FROM 
(
    SELECT username FROM users_orders WHERE total_user_orders >= '1' 
    UNION ALL 
    SELECT username FROM users  WHERE u.active = '1' 
) AS a 
LEFT JOIN users  AS u ON a.username = u.username 
LEFT JOIN users_orders AS b on u.username = b.username 
GROUP BY a.username; 
0

假設用戶名是唯一的,並且對於用戶來說至少有一個順序的含義一樣爲他們至少有一個排的users_orders表,你可以做到以下幾點:

SELECT 
    u.referrer, 
    COUNT(DISTINCT u.username) AS usercount 
FROM users u 
INNER JOIN users_orders uo ON u.username = uo.username 
WHERE u.active = 1 
; 

的加入充當過濾器usersusers_orders之間(除了那對active狀態)。它可能會產生重複的用戶名,但COUNT(DISTINCT)只會計入唯一的條目。