【问题标题】:MySQL count 2 columns in a row and join with another queryMySQL 连续计算 2 列并与另一个查询连接
【发布时间】:2013-10-05 04:50:27
【问题描述】:

我有一张这样的桌子visits

+--------------+-------------+------+-----+---------------------+----------------+
| 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_username 中的次数 AND out_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 尝试的所有操作似乎都将计数加在一起,或者出于某种原因删除了行。有什么想法吗?

【问题讨论】:

    标签: mysql sql join count 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
    

    【讨论】:

    • 好极了,这正是我所需要的……我以前没见过combined,那是MySQL的关键字吗?
    • 子查询需要有别名,仅此而已。
    猜你喜欢
    • 1970-01-01
    • 2013-04-23
    • 1970-01-01
    • 1970-01-01
    • 2011-08-18
    • 2013-10-03
    • 1970-01-01
    • 1970-01-01
    • 2011-08-24
    相关资源
    最近更新 更多