MySQL计算一行中的2列并与另一个查询联接

MySQL计算一行中的2列并与另一个查询联接,mysql,sql,join,count,union,Mysql,Sql,Join,Count,Union,我有一个表访问如下: +--------------+-------------+------+-----+---------------------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------------+-------------+------+-----+---------------------+--------

我有一个表
访问
如下:

+--------------+-------------+------+-----+---------------------+----------------+
| 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                |                |
+--------------+-------------+------+-----+---------------------+----------------+
+------------+-------------+------+-----+---------------------+----------------+
| 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 |                |
+------------+-------------+------+-----+---------------------+----------------+
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
+----------+-----------+----------+
| count_in | count_out | fname    |
+----------+-----------+----------+
|      118 |       224 | Bo       |
|       27 |        64 | James    |
|      147 |       138 | Jeremy   |
|       23 |        37 | Jim      |
|      182 |       172 | Robert   |
|      120 |       158 | Tom      |
+----------+-----------+----------+
还有一个表
用户
,如下所示:

+--------------+-------------+------+-----+---------------------+----------------+
| 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                |                |
+--------------+-------------+------+-----+---------------------+----------------+
+------------+-------------+------+-----+---------------------+----------------+
| 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 |                |
+------------+-------------+------+-----+---------------------+----------------+
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
+----------+-----------+----------+
| count_in | count_out | fname    |
+----------+-----------+----------+
|      118 |       224 | Bo       |
|       27 |        64 | James    |
|      147 |       138 | Jeremy   |
|       23 |        37 | Jim      |
|      182 |       172 | Robert   |
|      120 |       158 | Tom      |
+----------+-----------+----------+
我希望能够计算每个用户在
in\u username
out\u username
中的次数。。。我以前使用的查询如下所示:

+--------------+-------------+------+-----+---------------------+----------------+
| 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                |                |
+--------------+-------------+------+-----+---------------------+----------------+
+------------+-------------+------+-----+---------------------+----------------+
| 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 |                |
+------------+-------------+------+-----+---------------------+----------------+
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
+----------+-----------+----------+
| count_in | count_out | fname    |
+----------+-----------+----------+
|      118 |       224 | Bo       |
|       27 |        64 | James    |
|      147 |       138 | Jeremy   |
|       23 |        37 | Jim      |
|      182 |       172 | Robert   |
|      120 |       158 | Tom      |
+----------+-----------+----------+
但这只返回用户名中有多少个
。。。如果可能的话,我希望在同一个查询中同时使用这两种方法,以便得到如下结果:

+--------------+-------------+------+-----+---------------------+----------------+
| 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                |                |
+--------------+-------------+------+-----+---------------------+----------------+
+------------+-------------+------+-----+---------------------+----------------+
| 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 |                |
+------------+-------------+------+-----+---------------------+----------------+
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
+----------+-----------+----------+
| count_in | count_out | fname    |
+----------+-----------+----------+
|      118 |       224 | Bo       |
|       27 |        64 | James    |
|      147 |       138 | Jeremy   |
|       23 |        37 | Jim      |
|      182 |       172 | Robert   |
|      120 |       158 | Tom      |
+----------+-----------+----------+
其中
count\u in
是他们的用户名在
访问中出现的次数。in\u username
count\u out
是他们的用户名在
访问中出现的次数。out\u username


我用
UNION
尝试的所有方法似乎都将计数相加,或者出于某种原因删除了行。有什么想法吗?

进行子查询以获得每个总数,将它们与
UNION
组合,然后将它们与
SUM()
合并


太好了,这正是我需要的。。。我以前没有看到过
combined
,这是MySQL关键字吗?子查询需要有别名,仅此而已。