2015-10-17 140 views
0

指望我有以下查詢:SQL - 選擇DISCINT並從聯接查詢

SELECT u.* 
     (SELECT sum(trs.amount) 
     FROM transactions trs 
     WHERE u.id = trs.user AND trs.type = 'Recycle' AND 
       trs.TIME >= UNIX_TIMESTAMP(CURDATE()) 
     ) as amt 
    FROM (SELECT DISTINCT user_by 
      FROM xeon_users_rented 
     ) AS xur JOIN 
     users u 
     ON xur.user_by = u.username 
     LIMIT 50 

從我的數據庫中選擇一些數據。上述查詢工作正常。不過,我想xeon_users_rented選擇count(*)其中user_by = u.username這是我曾嘗試:

SELECT u.* 
     (SELECT sum(trs.amount) 
     FROM transactions trs 
     WHERE u.id = trs.user AND trs.type = 'Recycle' AND 
       trs.TIME >= UNIX_TIMESTAMP(CURDATE()) 
     ) as amt, 
     (SELECT DISTINCT count(*) 
      FROM xeon_users_rented 
     WHERE xur.user_by = u.username 
     ) AS ttl 
    FROM (SELECT DISTINCT user_by 
      FROM xeon_users_rented 
     ) AS xur JOIN 
     users u 
     ON xur.user_by = u.username 
     LIMIT 50 

但是,這給了我在xeon_users_rentedttl行數 - 不總明顯行在哪裏username = user_by

+0

您是否試過SELECT COUNT(DISTINCT(user_by)) – Neo

+1

如果您願意,請考慮遵循以下簡單的兩步操作步驟:1.如果您尚未這樣做,請提供適當的CREATE和INSERT語句(和/或一個sqlfiddle),這樣我們可以更容易地複製問題。 2.如果您尚未這樣做,請提供與步驟1中提供的信息相對應的所需結果集。 – Strawberry

回答

0

我認爲你可以做你想做的事情,只需稍微修改你的子查詢。也就是說,改變select distinctgroup by

SELECT u.*, xur.cnt, 
     (SELECT sum(trs.amount) 
     FROM transactions trs 
     WHERE u.id = trs.user AND trs.type = 'Recycle' AND 
       trs.TIME >= UNIX_TIMESTAMP(CURDATE()) 
     ) as amt 
FROM (SELECT user_by, COUNT(*) as cnt 
     FROM xeon_users_rented 
     GROUP BY user_by 
    ) xur JOIN  
    users u 
    ON xur.user_by = u.username 
LIMIT 50; 

一些注意事項:

  • SELECT DISTINCT是不是真的有必要,因爲你可以做使用GROUP BY相同的邏輯。所以,瞭解GROUP BY更重要。
  • 您正在使用LIMIT沒有ORDER BY。這意味着每次運行查詢時都可以獲得一組不同的行。糟糕的做法。