2015-08-06 4 views
0

Мой запрос являетсяПолучить сумму столбца в SQL

SELECT 
    AIP.TERMID, 
    (SELECT COUNT(RAU.TERMNAME) 
    FROM REPORT_API_USAGE RAU 
    WHERE RAU.TERMID = AIP.TERMID AND RAU.VOCID = 4) AS page_views 
FROM REPORT_API_PAGES AIP 
GROUP BY AIP.TERMID 

Мне нужно, чтобы получить в общей сложности колонны page_views. Как я могу его получить? Пожалуйста помоги. PHP и ORACLE.

enter image description here

мне нужно всего page_views как 2 (1 + 1). Мне нужно получить его как новую строку без изменения существующего запроса.

SELECT 
    AIP.TERMID, 
    (SELECT COUNT(RAU.TERMNAME) 
    FROM REPORT_API_USAGE RAU 
    WHERE RAU.TERMID = AIP.TERMID AND RAU.VOCID = 4) AS page_views, 
    (SELECT SUM(COUNT(RAU.TERMNAME)) 
    FROM REPORT_API_USAGE RAU 
    WHERE RAU.VOCID = 4 GROUP BY AIP.TERMID) AS page_views 
FROM REPORT_API_PAGES AIP 
GROUP BY AIP.TERMID` 

Я попытался это, но дает результат 4 вместо 2

enter image description here

+4

Пожалуйста, добавьте некоторые данные. – SNC

+0

Также: какие СУБД вы используете? Postgres? Oracle? –

+0

в вашем примере это ** НЕТ ** 'СУММА, есть ли это опечатка? – WiiMaxx

ответ

1

Что именно вы хотите показать? Общее количество просмотров страниц на TERMID?

SELECT aip.TERMID, 
    COUNT(rau.TERMNAME) AS PAGE_VIEWS 
FROM REPORT_API_PAGES aip 
    JOIN REPORT_API_USAGE rau ON rau.TERMID = aip.TERMID 
WHERE rau.VOCID = 4 
GROUP BY aip.TERMID 

Хотя, с текущим запросом, присоединиться даже не нужна (если у вас есть строки в REPORT_API_USAGE без какого-либо родителя в REPORT_API_PAGES)

SELECT rau.TERMID, 
    COUNT(rau.TERMNAME) AS PAGE_VIEWS 
FROM REPORT_API_USAGE rau 
WHERE rau.VOCID = 4 
GROUP BY rau.TERMID 

EDIT: Итак, на основе обновления вашего вопрос, если вы хотите только общее количество просмотров страниц, вы можете использовать

SELECT COUNT(rau.TERMNAME) AS page_views 
FROM REPORT_API_PAGES aip 
    JOIN REPORT_API_USAGE rau ON rau.TERMID = aip.TERMID 
WHERE rau.VOCID = 4 

(Объединение не является необходимым, это позволяет рассчитывать только просмотры страниц для страниц, где TERMID определяется в REPORT_API_PAGES таблицы)

EDIT2: Основываясь на свое второе обновлении, я предлагаю вам использовать SUM(PAGE_VIEWS) OVER() на ваш подзапросе

SELECT TERMID, 
    PAGE_VIEWS, 
SUM(PAGE_VIEWS) OVER() AS TOTAL_PAGE_VIEWS 
FROM (
    SELECT aip.TERMID, 
    COUNT(rau.TERMNAME) AS PAGE_VIEWS 
    FROM REPORT_API_PAGES aip 
    LEFT OUTER JOIN REPORT_API_USAGE rau ON (rau.TERMID = aip.TERMID AND rau.VOCID = 4) 
    GROUP BY aip.TERMID) 

Очевидно, что вы можете заменить подзапрос с исходным запросом, а также.

+0

с его участием он может и, безусловно, получит другой результат, если 'aip' и' rau' не содержат одного и того же 'TERMID' – WiiMaxx

+0

Он может получить больше строк, но количество просмотров страниц на TERMID всегда будет одинаковым (это то, что я указал между скобками) –

1
SELECT AIP.TERMID, 
(
    select count(RAU.TERMNAME) 
    FROM 
     REPORT_API_USAGE RAU 
    WHERE 
     RAU.TERMID = AIP.TERMID AND RAU.VOCID = 4 
) as page_views 
from 
    REPORT_API_PAGES AIP 
GROUP BY 
    AIP.TERMID 

просто попробуйте изменить это нравится

select sum(page_views) 
(
    SELECT AIP.TERMID, 
    (
    select count(RAU.TERMNAME) 
    FROM 
     REPORT_API_USAGE RAU 
    WHERE 
     RAU.TERMID = AIP.TERMID AND RAU.VOCID = 4 
) as page_views 
    from 
    REPORT_API_PAGES AIP 
    GROUP BY 
    AIP.TERMID 
) from dual; 
Смежные вопросы