Объединить 3 таблицы до подсчета самого высокого пользователя в одной таблице - PullRequest
0 голосов
/ 04 декабря 2018

Я пробую 3 таблицы соединения, чтобы я мог сообщить, у кого самые высокие звонки для каждого отдельного клиента, см. Таблицы ниже

+-------+--+------------+
| users |  |            |
+-------+--+------------+
| id    |  | first name |
| 1     |  |  Bill      |
| 2     |  |  Ben       |
| 3     |  |  Bob       |
| 4     |  |  Barry     |
+-------+--+------------+

вторая таблица - это таблица звонков

+-----------+--+-------------------+
| customers |  |                   |
+-----------+--+-------------------+
| id        |  | Company           |
| 1         |  |  windows company  |
| 2         |  |  glass company    |
+-----------+--+-------------------+

третья таблица - это место записи звонков

+-------------+--+--------+--------------+
| callrecords |  |        |              |
+-------------+--+--------+--------------+
| id          |  | userid |   company id |
| 1           |  |  1     |   1          |
| 2           |  |  1     |   1          |
| 3           |  |  1     |   1          |
| 4           |  |  2     |   1          |
| 5           |  |  2     |   2          |
| 6           |  |  2     |    2         |
+-------------+--+--------+--------------+

Итак, как вы можете видеть в таблице записей звонков, компания id 1, которая является оконной компанией, имела 4 звонка, но пользователь 1 сделалбольше всего для того, чтобы компании мне нужно было отобразить счет компании с идентификатором 2, а стекольной компании нужно отобразить идентификатор пользователя 2, потому что они сделали всего 2 вызова, а не идентификатор пользователя 1, потому что они только сделали 1 вызов

, поэтому mysqlзапрос, который мне нужно сделать, должен циклически повторяться, чтобы отчет выглядел следующим образом

Windows Company - большинство звонков Bill Bill Glass - большинство звонков Ben

1 Ответ

0 голосов
/ 04 декабря 2018

Если вы хотите один запрос, который будет получать записи.Вы можете проверить ниже запрос.Это даст вам наибольшее количество звонков для каждого отдельного клиента.

SELECT CR.companyid, C.company, U.first_name, COUNT(CR.userid) AS callCount
FROM callrecords AS CR
INNER JOIN customers AS C ON (C.id= CR.companyid)
INNER JOIN users AS U ON (U.id= CR.userid)
GROUP BY C.id,CR.userid  HAVING callCount = (
    SELECT count(callrecords.userid) as count
    FROM callrecords
    WHERE callrecords.companyid = CR.companyid
    GROUP BY callrecords.userid
    ORDER BY count DESC
    LIMIT 1
);

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

...