2013-09-29 103 views
0

我有一個表visits這樣加入:MySQL的計數2列在一排,並與另一個查詢

+--------------+-------------+------+-----+---------------------+----------------+ 
| Field  | Type  | Null | Key | Default    | Extra   | 
+--------------+-------------+------+-----+---------------------+----------------+ 
| id   | int(11)  | NO | PRI | NULL    | auto_increment | 
| vis_id  | int(11)  | NO |  | NULL    |    | 
| unit   | int(11)  | NO |  | NULL    |    | 
| time_in  | timestamp | NO |  | CURRENT_TIMESTAMP |    | 
| time_out  | timestamp | NO |  | 0000-00-00 00:00:00 |    | 
| in_username | varchar(16) | NO |  | NULL    |    | 
| out_username | varchar(16) | NO |  | NULL    |    | 
+--------------+-------------+------+-----+---------------------+----------------+ 

和一張桌子users這樣的:

+------------+-------------+------+-----+---------------------+----------------+ 
| Field  | Type  | Null | Key | Default    | Extra   | 
+------------+-------------+------+-----+---------------------+----------------+ 
| id   | int(11)  | NO | PRI | NULL    | auto_increment | 
| fname  | varchar(32) | NO |  | NULL    |    | 
| lname  | varchar(32) | NO |  | NULL    |    | 
| date_added | timestamp | NO |  | CURRENT_TIMESTAMP |    | 
| username | varchar(16) | NO |  | NULL    |    | 
| password | varchar(40) | NO |  | NULL    |    | 
| auth_level | int(1)  | NO |  | 1     |    | 
| last_login | timestamp | NO |  | 0000-00-00 00:00:00 |    | 
+------------+-------------+------+-----+---------------------+----------------+ 

我希望能夠到請計算每個用戶有多少次in_usernameout_username ...我以前使用的查詢是這樣的:

select count(*) as "count", u.fname as "fname" 
    from visits v 
     inner join users as u on u.username = v.in_username 
    group by u.username order by u.fname 

但是,只有返回許多in_username的有...我想如何在相同的查詢,如果可能有兩個,所以我可以得到的結果是這樣的:

+----------+-----------+----------+ 
| count_in | count_out | fname | 
+----------+-----------+----------+ 
|  118 |  224 | Bo  | 
|  27 |  64 | James | 
|  147 |  138 | Jeremy | 
|  23 |  37 | Jim  | 
|  182 |  172 | Robert | 
|  120 |  158 | Tom  | 
+----------+-----------+----------+ 

count_in是他們的用戶名多少次出現在visits.in_username,並且count_out是他們的用戶名多少次出現在visits.out_username

一切我已經與UNION試圖似乎計數加在一起,或出於某種原因刪除行。有任何想法嗎?

回答

1

做一個子查詢得到每個總和,將它們與UNION合併,然後將它們與SUM()合併。

SELECT SUM(count_in) count_in, SUM(count_out) count_out, fname 
FROM (SELECT COUNT(*) count_in, 0 count_out, in_username fname 
     FROM visits v 
     GROUP BY fname 
     UNION 
     SELECT 0 count_in, COUNT(*) count_out, out_username fname 
     FROM visits v 
     GROUP BY fname) combined 
+0

非常好,這正是我需要的......我之前沒有見過'combined',是一個MySQL關鍵字嗎? – jmd9qs

+1

子查詢需要有別名,就是這樣。 – Barmar

相關問題