这里的SQLFiddle:http://sqlfiddle.com/#!9/b88d1a/1/0 ---注意由于8000个字符的限制,我无法在SQLFiddle中加载足够的插入,并且没有最少量的数据,查询无法运行。因此SQL插入文件位于此pastebin文件中:https://pastebin.com/MfhJ0Svc - 我无法将这些320插入行粘贴到Fiddle或SO抱歉。
我有一个表,然后是一个名为“已审核”的视图,其中包含一个只包含唯一用户名的列。该表名为RebasedQuestions,目前包含大约40000条记录。
该表用于计算人们对人们进行的一系列评论。
查询需要生成一个最终表,该表以百分比形式给出supervisor,own,peer和subordinate的值,然后作为6之外的值(审阅问题选项范围从1到6)。每种评论类型的权重是:
import tflearn
以下是视图的DDL:
Supervisor: 30%
Own: 0%
Peer: 40%
Subordinate: 30%
主表的DDL:
CREATE VIEW Reviewed AS
SELECT DISTINCT `t1`.`Reviewed` AS `Reviewed`
FROM `edsdb`.`RebasedQuestions` `t1`
ORDER BY `t1`.`Reviewed`;
这是我的查询,但我认为它远非优化,所以请告诉我如何加快速度,特别是每当提交新评论时主表增长20行:
create table RebasedQuestions
(
Reviewed varchar(50) null,
ReviewType varchar(20) null,
BU int null,
RebasedValue double null
)
;
我甚至不能将插入物粘贴在体内。
可以在此pastebin链接上找到它们:https://pastebin.com/MfhJ0Svc
答案 0 :(得分:1)
这是一个建议,你应该能够适应你的需要。
SELECT
innerQuery.Reviewed,
innerQuery.BU,
(CASE WHEN (innerQuery.supcount=0) then null else
innerQuery.suptot/innerQuery.supcount end) as sup,
(CASE WHEN (innerQuery.supcount=0) then null else
(6*innerQuery.suptot)/(100*innerQuery.supcount) end) as sup6
...
(CASE WHEN (innerQuery.supcount=0) then 1.8 else sup6*0.3 end)+ ... as totaled
from
(SELECT
Reviewed,
BU,
(SUM(ReviewType='Supervisor') then RebasedValue else 0 end) as
suptot
(COUNT(ReviewType='Supervisor') then RebasedValue else 0 end) as
supcount,
...
FROM RebasedQuestions GROUP BY Reviewed, BU) innerQuery