Mysql 如何获取与另一列相关的行数?
我有三张和下面一样的桌子 应用程序:Mysql 如何获取与另一列相关的行数?,mysql,sql,select,join,Mysql,Sql,Select,Join,我有三张和下面一样的桌子 应用程序: +----+------+--------+ | id | name | author | +----+------+--------+ | 1 | App1 | 1 | | 2 | App2 | 1 | | 3 | App3 | 1 | +----+------+--------+ 安装: +-----+----+---------------------+ | app | id | timestamp
+----+------+--------+
| 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 |
+------+----------+
使用
内部联接
而不使用过滤器
SELECT a.NAME,
Count(*) AS installs
FROM applications a
JOIN installs i
ON a.id = i.app
这实际上是一个基本的
groupby
查询,带有JOIN
和WHERE
:
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