2015-05-21 2 views
1

Иметь действительно липкую проблему. Как я могу подсчитать общее количество пользователей, предоставленных этим.Mysql сумма подсчета счётными сгруппированными по месяцам

SELECT 
MONTH(VisitTime) AS mon, 
COUNT(distinct IP) AS usersbymonth 
FROM stats 
WHERE 
YEAR(VisitTime) = YEAR( current_date ) 
GROUP BY mon 

хитрый пар есть, что накопительный пакет и количество (отличный IP) обеспечивают низкую количества (отчетливое в целый году). Это потому, что GROUP BY mon позволяет использовать один и тот же IP-адрес в течение нескольких месяцев.

Теперь результат показывает основы права. Номер месяца | usersbymonth, и если вы сделаете запрос, нацеленный в прошлом году, его результат составит 12 месяцев с пользователями до месяца.

Итак, как я могу подсчитать количество пользователей в байтах?

+0

так что если у вас есть пользователь X поступающий с IP в январе и марте, вы только хотите, чтобы считаться 1, где ваш текущий запрос учитывает это как 2 разных посещения? вам придется делать отдельный запрос и группу по году вместо этого, так как группировка за месяц уничтожает любую возможность делать отдельные на этих «разных» посещениях. –

+0

Основной запрос показывает все, что я хочу. Пользователь, посещающий марш и январь, считается 2. Я всего лишь хочу подсчитать общую сумму всех месяцев, чтобы я мог подсчитать% пользователей в месяц –

ответ

1

Am i right?

SELECT mon, SUM(usersbymonth) FROM 
    (SELECT 
    MONTH(VisitTime) AS mon, 
    COUNT(distinct IP) AS usersbymonth 
    FROM stats 
    WHERE 
    YEAR(VisitTime) = YEAR( current_date ) 
    GROUP BY mon) 

Если вы хотите за каждый месяц просто добавить GROUP BY mon UPDATE

SELECT 
     MONTH(VisitTime) AS mon, 
     COUNT(distinct IP) AS usersbymonth 
    FROM stats 
    WHERE 
     YEAR(VisitTime) = YEAR( current_date ) 
    GROUP BY mon 
    UNION -- Last ROW 
    SELECT mon, SUM(usersbymonth) FROM (
    SELECT 
     MONTH(VisitTime) AS mon, 
     COUNT(distinct IP) AS usersbymonth 
    FROM stats 
    WHERE 
     YEAR(VisitTime) = YEAR( current_date ) 
    GROUP BY mon) 
+0

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

+0

, то есть вы хотите, чтобы итоговый результат был в последнем ряду? –

+0

yeap. как это. jan 50, feb 50, mar 50 и т. д. всего 150 и по-прежнему различаются по месяцам –

Смежные вопросы