【问题标题】:How do I get the number of rows in relation to another column?如何获取与另一列相关的行数?
【发布时间】:2017-01-31 02:31:49
【问题描述】:

我有如下三张表

应用:

+----+------+--------+
| id | name | author |
+----+------+--------+
|  1 | App1 |      1 |
|  2 | App2 |      1 |
|  3 | App3 |      1 |
+----+------+--------+

安装:

+-----+----+---------------------+
| app | id | timestamp           |
+-----+----+---------------------+
|   3 |  1 | 2017-01-27 19:12:05 |
+-----+----+---------------------+

用户:

+----+----------+-------------------+--------------------------------------------------------------+
| id | username | email             | password                                                     |
+----+----------+-------------------+--------------------------------------------------------------+
|  2 | name     | email@address.com |                                                              |
+----+----------+-------------------+--------------------------------------------------------------+

每当有人安装一个应用程序时,它就会被添加到安装表中并加盖时间戳。

我知道我可以通过这样做来获得单个应用的安装量

SELECT a.name,COUNT(b.id) as installs FROM applications a,installs b WHERE a.id=3 AND b.app=3;

我会得到的

+------+----------+
| name | installs |
+------+----------+
| App3 |    30000 |
+------+----------+

我想要的是能够从某个作者那里获得所有应用程序的名称,以及应用程序的安装,在一个结果集中,如下所示:

+------+----------+
| name | installs |
+------+----------+
| App1 |    10000 |
| App2 |    20000 |
| App3 |    30000 |
+------+----------+

【问题讨论】:

  • 问得好,研究得少。

标签: mysql sql select join


【解决方案1】:

这实际上是一个基本的GROUP BY 查询,带有JOINWHERE

SELECT a.name, COUNT(i.id) as installs
FROM applications a LEFT JOIN
     installs i
     ON a.id = b.app
WHERE a.author = 1
GROUP BY a.name;

注意事项:

  • 从不FROM 子句中使用逗号。 始终使用正确、明确的JOIN 语法。
  • 您的表别名应该是表名的缩写,而不是像b 这样的随机字母。
  • JOIN 条件使用两个表中的列。
  • LEFT JOIN 为作者保留所有应用程序,即使没有安装。

【讨论】:

    【解决方案2】:

    使用不带过滤器的INNER JOIN

    SELECT a.NAME,
           Count(*) AS installs
    FROM   applications a
           JOIN installs i
             ON a.id = i.app 
    

    【讨论】:

      猜你喜欢
      • 2015-02-10
      • 2020-06-18
      • 1970-01-01
      • 2013-06-04
      • 2017-06-11
      • 2018-09-14
      • 2017-02-21
      • 1970-01-01
      • 2013-11-26
      相关资源
      最近更新 更多