Я работаю над запросом (и не имею большого опыта), который почти делает то, что я хочу.
У меня есть таблица, которая содержит логины для каждого пользователя на устройство (таблица 1) и таблицу с набором пользователей, для которых я хочу получить результаты (таблица 2). Я хочу подсчитать, сколько раз пользователь x из таблицы 2 вошел в систему на устройстве в таблице 1.
Table 1 (data):
username
device_id
logon_date
Table 2 (users):
username
Мой запрос выглядит так:
SELECT data.device_id
, COUNT(data.username)
, data.username
FROM data
, users
WHERE data.username = users.username
GROUP
BY data.device_id
Но это только перечисляет каждое устройство один раз. Я знаю, что некоторые пользователи вошли в систему на одном устройстве. Поэтому я ожидал, что устройство будет упомянуто более одного раза.
device user login count
PC1 - user1 - 12
PC2 - user2 - 20
etc
Если бы я выписал свой запрос, он бы выглядел так: для каждого пользователя в таблице 2 подсчитывать каждый логин в таблице 1 и подсчитывать логины на устройство.
Поэтому он должен выглядеть так:
device user login count
PC1 - user1 - 12
PC1 - user2 - 60
PC2 - user1 - 5
PC2 - user2 - 20
PC2 - user3 - 14
etc
Что я делаю неправильно?
"Я ожидал, что устройство будет упомянуто более одного раза".
Группа "group by" в поле device_id специально делает это так, чтобы строки для каждого устройства были сгруппированы в одну строку, а затем вы подсчитываете, сколько раз это устройство появляется в необработанных данных.
Я думаю, возможно, вы хотите сгруппировать как device_id, так и имя пользователя, например:
SELECT data.device_id
, data.username
, COUNT(data.username)
FROM data
, users
WHERE data.username = users.username
GROUP
BY data.device_id, data.username