Как использовать GroupBy во вложенном соединении в SQL - PullRequest
0 голосов
/ 28 октября 2018

Следующий оператор SQL возвращает имя пользователя, IP-адрес, продолжительность, объем трафика и последний визит.

            SELECT username, SUBSTRING_INDEX( callingstationid, '=', 1 ) as IP,
                   SUM(acctsessiontime) as `duration`, count(username) as Count, 
                   (SUM(`acctinputoctets`)+SUM(`acctoutputoctets`))/1000/1000/1000 as GBytes, 
                   MAX(acctstoptime) as `last visit`
            FROM radacct
            GROUP BY username

enter image description here

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

Я не могу получить право на объединение:

    SELECT  c.country, 
            round(GBytes, 2),  
            Count, 
            duration as `Total Time Spent`,
            `last visit`
            FROM (
                SELECT username, 
                       SUBSTRING_INDEX( callingstationid, '=', 1 ) as IP,        
                       SUM(acctsessiontime) as `duration`, count(username) as Count,                  
                       (SUM(`acctinputoctets`)+SUM(`acctoutputoctets`))/1000/1000/1000 as GBytes,
                       MAX(acctstoptime) as `last visit`
                FROM radacct
                GROUP BY username
            ) filtered_radacct
            JOIN u_cache_db.`global_ip` c ON c.ip = filtered_radacct.IP
            GROUP BY c.country
            order by GBytes DESC;

Я знаю, что эти цифры не могут быть правильными.

enter image description here

1 Ответ

0 голосов
/ 28 октября 2018

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

SELECT  c.country, 
        round(SUM(GBytes), 2),  
        SUM(Count), 
        SUM(duration) as `Total Time Spent`,
        MAX(`last visit`)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...