2013-03-21 2 views
1

В SQL Я хочу получить, какой процент обращений к сайту приходил от каждого пользователя. Для этого мне нужно получить сумму столбца site hits, но мой запрос использует GROUP By в другом столбце.Получите общее количество столбцов и общую сумму GROUP BY

Как я могу получить сумму для всего столбца, в дополнение к каждому user_id в GROUP BY?

набор данных:

User Page Hits Page 
---- --------- ---- 
a  10   home 
a  10   profile 
b  8   home 
b  2   profile 
c  6   home 
c  4   profile 

Результат:

User  Site Hits  pct of total site hits 
----  ---------  --------------- 
a  20    50% 
b  10    25% 
c  10    25% 

Запрос:

SELECT 
user, 
SUM(page_hits) AS site_hits, 
SUM(page_hits)/total_page_hits <-- How do I get sum of 'page hits' for total_page_hits ???? 
FROM hit_data 
GROUP BY user 

ответ

2

Один из вариантов: использовать подзапрос.

SELECT 
user, 
SUM(page_hits) AS site_hits, 
SUM(page_hits)/(select sum(page_hits) from hit_data) 
FROM hit_data 
GROUP BY user 
+0

Можете ли вы использовать подзапрос так, как вы его показали? Я думал, что подзапрос должен быть частью оператора FROM или JOIN? –

+0

Да, это правильный способ, о котором я говорил. Подзапросы могут использоваться в JOIN/WHERE или в SELECT в качестве столбца. – davidethell

+0

Нет, его можно использовать для возврата скаляров практически в любом месте запроса. –

0

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

+0

Как насчет использования JOIN? –

+1

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

0

Это может работать, и это более разумно, чем это может показаться:

SELECT user, SUM(page_hits) AS site_hits, 
     SUM(page_hits)/(select sum(page_hits) from hit_data) 
FROM hit_data 
GROUP BY user 

Поскольку подзапрос не коррелирует с записью, ядро ​​базы данных может сначала запустить подзапрос, а затем использовать его в качестве константа во внешнем запросе.

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