PL/SQL 查询效率提升
Posted
技术标签:
【中文标题】PL/SQL 查询效率提升【英文标题】:PL/SQL Query efficiency improvement 【发布时间】:2014-10-29 11:29:01 【问题描述】:大家好,我希望您能帮助我解决我正在尝试编写的 SQL 查询。我已经完成了我想要的表格,但我必须逐行构建它。这效率不高,当我最终得到 200 行时,这会减慢网站速度。
这是我的表格的样子:
FeedBack Table:
RatingID | RATING| TUTORIAL_ID| TUTORIAL_NAME
5716| 4 | 993| Test002
5717| 3 | 993| Test002
5777| 1 | 994| eClip3
5886| 1 | 994| eClip3
7127| 4 | 1235| FTIR001
7128| 4 | 1235| FTIR001
7169| 3 | 1235| FTIR001
7170| 2 | 1235| FTIR001
7131| 4 | 1235| FTIR001
7187| 3 | 1235| FTIR001
7132| 3 | 1235| FTIR001
我想要生成的是一个包含所有唯一教程名称的表格,然后是特定教程被评分的总次数;
1(not useful), 2(somewhat useful), 3(useful), 4(Very Useful)
所以查询应该是:
Tutorial Name | not Useful | Somewhat Useful| Useful| Very Useful
Test002| 0| 0|1|1
eClip3|2|0|0|0
FTIR001| 0| 1| 3| 3
该表格显示在后面带有 C# 的网页上。目前,我在表格中循环查找各个教程名称的列表,然后对于每个剪辑名称,我选择 Count(*) where rating = 1 etc.. 并逐行构建表格。
我真正想知道的是,是否有办法一次性完成所有这些工作。这将大大提高网站的效率,因为我要显示 200 多个教程的数据。
【问题讨论】:
查看 plsql 分组 psoug.org/definition/GROUPING.htm 或者甚至更好的 linq 分组 msdn.microsoft.com/en-us/library/bb545971.aspx 【参考方案1】:select tutorial_name,
sum(case when rating=1 then 1 else 0 end) "not Useful",
sum(case when rating=2 then 1 else 0 end) "Somewhat Useful",
sum(case when rating=3 then 1 else 0 end) "Useful",
sum(case when rating=4 then 1 else 0 end) "Very Useful"
from feedback
group by tutorial_name;
是您需要的查询。
【讨论】:
完美,正是我所需要的。非常感谢以上是关于PL/SQL 查询效率提升的主要内容,如果未能解决你的问题,请参考以下文章