У меня есть две такие таблицы:
table1
email, file_id
useremail1@mydomain.com, qUvGRdixBN
useremail2@mydomain.com, aIirUAqKwm
useremail3@mydomain.com, njeOMonYyb
table2
file_id, event_name
qUvGRdixBN, download
aIirUAqKwm, view
njeOMonYyb, print
Из которых мне нужно знать 1) адреса электронной почты с наибольшим количеством файлов (независимо от активности в таблице 2) или адресов электронной почты с более чем X файлами 2) Для пользователей, которые соответствуют предыдущим критериям, необходимо знать общее количество файлов из таблицы 1, количество файлов без каких-либо событий в таблице 2, и в идеале некоторые процентили, такие как мин / макс и .01 .1 .5 .9 .95. Цель здесь состоит в том, чтобы составить график / график результатов, чтобы проиллюстрировать учетные записи и степень активности журналов для принадлежащих им файлов по сравнению с общим числом принадлежащих им файлов. :
output_table
email, total_num_files, total_num_files_no_logs, percentile_min, percentile_max, percentile_05, ...
Чтобы определить 100 лучших пользователей, я предложил следующее:
SELECT email, count(distinct(file_id)) numFiles
FROM `table1`
GROUP BY email
ORDER BY numFiles DESC
LIMIT 100
Затем для идентификации файлов без активности журнала я сохранил, что первый в виде представления и создал второй запрос, подобный следующему:
WITH top_100_users AS (
SELECT email
FROM `top_100_fileowners_view`
)
SELECT u.email, f.file_id, f.name, f.mimeType
FROM top_100_users u
LEFT JOIN `table1` f
ON f.email = u.email
LEFT JOIN `table2` a
ON a.file_id = f.file_id
WHERE a.drive.doc_id is null
Это говорит мне, сколько файлов у пользователей с наибольшим количеством файлов без активности журнала в table2, но в виде отдельной таблицы как первая запрос. Теперь, чтобы добавить в процентили, и я полностью потерян. Подозреваю, что попасть туда, где я нахожусь, было не самым эффективным sql. Любая помощь приветствуется.