[英]Get percentage from row values
I am using PHP with ORACLE. 我在ORACLE中使用PHP。
SELECT AIP.TERMID, (select count(RAU.TERMNAME) FROM REPORT_API_USAGE RAU WHERE RAU.TERMID = AIP.TERMID AND RAU.VOCID = 21) as page_views , COUNT(case when aip.ctype = 'download' then 1 else null end) as page_download , COUNT(case when aip.ctype = 'event' then 1 else null end) as page_event FROM REPORT_API_PAGES AIP GROUP BY AIP.TERMID
This is my query to get details. 这是我的查询以获取详细信息。 I need to find the percentage of
page_views
, page_download
, & page_event
我需要找到
page_views
, page_download
和page_event
Oracle 11g R2 Schema Setup : Oracle 11g R2架构设置 :
CREATE TABLE REPORT_API_USAGE
("VOCID" int, "TERMNAME" varchar2(9))
;
INSERT ALL
INTO REPORT_API_USAGE ("VOCID", "TERMNAME")
VALUES (21, 'blah')
INTO REPORT_API_USAGE ("VOCID", "TERMNAME")
VALUES (21, 'blah')
INTO REPORT_API_USAGE ("VOCID", "TERMNAME")
VALUES (21, 'blah')
INTO REPORT_API_USAGE ("VOCID", "TERMNAME")
VALUES (21, 'blah')
INTO REPORT_API_USAGE ("VOCID", "TERMNAME")
VALUES (21, 'blah')
INTO REPORT_API_USAGE ("VOCID", "TERMNAME")
VALUES (21, 'blah blah')
INTO REPORT_API_USAGE ("VOCID", "TERMNAME")
VALUES (21, 'blah blah')
INTO REPORT_API_USAGE ("VOCID", "TERMNAME")
VALUES (21, 'blah blah')
INTO REPORT_API_USAGE ("VOCID", "TERMNAME")
VALUES (21, 'blah blah')
INTO REPORT_API_USAGE ("VOCID", "TERMNAME")
VALUES (21, 'blah blah')
INTO REPORT_API_USAGE ("VOCID", "TERMNAME")
VALUES (21, 'blah blah')
INTO REPORT_API_USAGE ("VOCID", "TERMNAME")
VALUES (21, 'blah blah')
INTO REPORT_API_USAGE ("VOCID", "TERMNAME")
VALUES (21, 'blah blah')
SELECT * FROM dual
;
Query 1 : 查询1 :
SELECT
TERMNAME
, COUNT(TERMNAME) as count_of
, (COUNT(TERMNAME) * 100.0) / MAX(TOTCOUNT) as pct
FROM (
SELECT
AP.TERMNAME
, COUNT(AP.TERMNAME) OVER() as TOTCOUNT
FROM REPORT_API_USAGE AP
WHERE AP.VOCID = '21'
)
GROUP BY TERMNAME
| TERMNAME | COUNT_OF | PCT |
|-----------|----------|-------------------|
| blah | 5 | 38.46153846153846 |
| blah blah | 8 | 61.53846153846154 |
longer string version: 较长的字符串版本:
SELECT TERMNAME , COUNT(TERMNAME) as count_of , (COUNT(TERMNAME) * 100.0) / MAX(TOTCOUNT) as pct FROM ( SELECT AP.TERMNAME , COUNT(AP.TERMNAME) OVER() as TOTCOUNT FROM REPORT_API_USAGE AP WHERE AP.VOCID = '21' ) GROUP BY TERMNAME
Generating sample data to work with is something the asker should provide because we have to largely guess what goes in the tables. 询问者应该提供生成要使用的样本数据的原因,因为我们必须在很大程度上猜测表中的内容。 With many reservations I created a sample and trialed the following approach.
由于很多保留,我创建了一个样本并尝试了以下方法。
Note I am offering the SQL portion only, manipulating this into suitable PHP you must do. 注意:我仅提供SQL部分,将其处理为您必须执行的适当PHP。
Oracle 11g R2 Schema Setup : Oracle 11g R2架构设置 :
CREATE TABLE REPORT_API_USAGE
(TERMID int, VOCID int, TERMNAME varchar2(1))
;
INSERT ALL
INTO REPORT_API_USAGE ("TERMID", "VOCID", "TERMNAME")
VALUES (1, 21, 'x')
INTO REPORT_API_USAGE ("TERMID", "VOCID", "TERMNAME")
VALUES (1, 21, 'x')
INTO REPORT_API_USAGE ("TERMID", "VOCID", "TERMNAME")
VALUES (1, 21, 'x')
INTO REPORT_API_USAGE ("TERMID", "VOCID", "TERMNAME")
VALUES (1, 21, 'x')
INTO REPORT_API_USAGE ("TERMID", "VOCID", "TERMNAME")
VALUES (1, 21, 'x')
INTO REPORT_API_USAGE ("TERMID", "VOCID", "TERMNAME")
VALUES (1, 21, 'x')
INTO REPORT_API_USAGE ("TERMID", "VOCID", "TERMNAME")
VALUES (1, 21, 'x')
INTO REPORT_API_USAGE ("TERMID", "VOCID", "TERMNAME")
VALUES (1, 21, 'x')
INTO REPORT_API_USAGE ("TERMID", "VOCID", "TERMNAME")
VALUES (1, 21, 'x')
SELECT * FROM dual
;
CREATE TABLE REPORT_API_PAGES
(TERMID int, CTYPE varchar2(8))
;
INSERT ALL
INTO REPORT_API_PAGES ("TERMID", "CTYPE")
VALUES (1, 'download')
INTO REPORT_API_PAGES ("TERMID", "CTYPE")
VALUES (1, 'event')
INTO REPORT_API_PAGES ("TERMID", "CTYPE")
VALUES (1, 'download')
INTO REPORT_API_PAGES ("TERMID", "CTYPE")
VALUES (1, 'event')
INTO REPORT_API_PAGES ("TERMID", "CTYPE")
VALUES (1, 'download')
INTO REPORT_API_PAGES ("TERMID", "CTYPE")
VALUES (1, 'event')
INTO REPORT_API_PAGES ("TERMID", "CTYPE")
VALUES (1, 'download')
INTO REPORT_API_PAGES ("TERMID", "CTYPE")
VALUES (1, 'event')
SELECT * FROM dual
;
Query 1 : 查询1 :
SELECT
AIP.TERMID
, RAU.page_views
, COUNT(CASE
WHEN aip.ctype = 'download' THEN 1
ELSE NULL
END) AS page_download
, COUNT(CASE
WHEN aip.ctype = 'event' THEN 1
ELSE NULL
END) AS page_event
, (COUNT(CASE
WHEN aip.ctype = 'download' THEN 1
ELSE NULL
END) * 100.0) / RAU.page_views as dnload_pt
, (COUNT(CASE
WHEN aip.ctype = 'event' THEN 1
ELSE NULL
END) * 100.0) / RAU.page_views as event_pct
FROM REPORT_API_PAGES AIP
LEFT JOIN (
SELECT
TERMID
, COUNT(*) AS page_views
FROM REPORT_API_USAGE
WHERE VOCID = 21
GROUP BY TERMID
) RAU ON RAU.TERMID = AIP.TERMID
GROUP BY
AIP.TERMID
, RAU.page_views
| TERMID | PAGE_VIEWS | PAGE_DOWNLOAD | PAGE_EVENT | DNLOAD_PT | EVENT_PCT |
|--------|------------|---------------|------------|-------------------|-------------------|
| 1 | 9 | 4 | 4 | 44.44444444444444 | 44.44444444444444 |
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.