2017-01-31 2 views
2

У меня есть три таблицы, как те, нижеКак получить количество строк по отношению к другому столбцу?

Область применения:

+----+------+--------+ 
| 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 protected] |                | 
+----+----------+-------------------+--------------------------------------------------------------+ 

Каждый раз, когда кто-то устанавливает приложение, оно является добавлен в таблицу установочных файлов и отметит время.

Я знаю, что могу получить количество установок отдельных приложений, делая

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 | 
+------+----------+ 
+0

Хорошо спрошенный, плохо исследованный. – shmosel

ответ

3

Это на самом деле основной GROUP BY запрос с 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 хранит все приложения для автора, даже если установки не установлены.
2

Использование INNER JOIN witho ет фильтр

SELECT a.NAME, 
     Count(*) AS installs 
FROM applications a 
     JOIN installs i 
     ON a.id = i.app 
Смежные вопросы