我有一个表,根据对url的查询,存储特定文章获取的所有打印件。因此,例如,每当用户阅读articles.aspx?artid = 1中的文章时,它将再存储一行,包括文章的ID,用户的IP地址,日期和时间以及URL引用。
我有一个SQL咨询,它会告诉我上个月查看文章的次数,它还会告诉我总观看次数和独特观看次数(基于不同用户的IP) )。
这是SQL代码:
BlogId Titulo Print Unicas TasaImp TasaImpUnicas
--------------------------------------------------------------------------------
1 Art. 1 20 7 8.97% 3.14%
2 Art. 2 20 6 8.97% 2.69%
3 Art. 3 9 5 4.04% 2.24%
4 Art. 4 17 5 7.62% 2.24%
5 Art. 5 155 113 69.51% 50.67%
8 Art. 6 2 1 0.90% 0.45%
这将带回这张桌子:
(Unicas / Print) * 100
我需要一个咨询,让我通过这个操作来计算真实的讲课率:
BlogId Titulo Print Unicas TasaImp TasaImpUnicas LecturaReal
--------------------------------------------------------------------
1 Art. 1 20 7 8.97% 3.14% 35.00%
2 Art. 2 20 6 8.97% 2.69% 35.00%
3 Art. 3 9 5 4.04% 2.24% 55.56%
4 Art. 4 17 5 7.62% 2.24% 29.41%
5 Art. 5 155 113 69.51% 50.67% 72.90%
8 Art. 6 2 1 0.90% 0.45% 50.00%
这样表就是这样的:
(COUNT(DISTINCT([dbo].[Blog_Stats].[UsrIp])) / COUNT(*)) * 100 AS [LecturaReal]
我已经尝试将此行添加到SQL Consult:
item["oracle_order_number"] = "";
item["oracle_response_message"]="";
item["oracle_response_status"]="";
this.props.publishToOracleEBS(item);
但它将返回该列中0的所有记录。
提前感谢您的时间和帮助。
答案 0 :(得分:2)
您的计算问题是整数除法。如果您使用表别名,您的查询将更容易理解:
SELECT s.BlogId, p.Titulo, COUNT(*) AS [Print],
COUNT(DISTINCT s.UsrIp) AS Unicas,
CONVERT(varchar(10),
CONVERT(numeric(18, 2), COUNT(*) * 100.0 / @total_prints
)
) + '%' AS TasaImp,
CONVERT(varchar(10),
CONVERT(numeric(18, 2), COUNT(DISTINCT s.[UsrIp]) * 100.0 / @total_prints
)
) + '%' AS TasaImpUnicas,
COUNT(DISTINCT s.UsrIp) * 100.0 / COUNT(*) AS [LecturaReal]
FROM dbo.Blog_Stats s INNER JOIN
dbo.Blog_Post p
ON p.ID = s.BlogId
WHERE s.FechaPrint BETWEEN @f1 AND @f2
GROUP BY s.BlogId, p.Titulo;
注意:
DISTINCT
不是函数,因此将以下表达式括在括号中会产生误导。100.0
是避免整数除法的便捷方法。