首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查询Rep-琐事

查询Rep-琐事
EN

Code Review用户
提问于 2014-05-16 14:49:12
回答 4查看 189关注 0票数 10

代码应该相对来说是不言而喻的。我想知道网站上的顶级选民在网站上“创造”了多少代表,而他们“拥有”了多少代表。

因此,我创建了一个小的SEDE-查询,我现在想知道,如果我遵循良好的SQL实践,以及如何提高查询的性能(尽管它已经相当简单了.)

代码语言:javascript
复制
WITH Voters AS(
   SELECT DISTINCT UpVotes, DownVotes, Id, Reputation
   FROM Users
   WHERE Reputation != 101 AND Reputation != 1 --Exclude users without repchanges
   )

SELECT TOP ##topX:int?20##
    Users.Id as [UserLink],
    Users.DisplayName as [SortName],
    Voters.Upvotes * 8 as [EstimatedAddedRep], 
    --as there is no split between question and answer votes
    -- we take 8 as median in accordance to the tendency that there are more
    -- answer votes (10 rep) than question votes (5 rep)
    Voters.Downvotes * 3 as [EstimatedDestroyedRep],
    Users.Reputation as [OwnedRep],
    Voters.Upvotes * 8 / Users.Reputation as [Ratio]
FROM Users, Voters
WHERE users.id = Voters.Id
GROUP BY Users.Id, Users.DisplayName, Users.Reputation, Voters.UpVotes, Voters.DownVotes
ORDER BY EstimatedAddedRep DESC

对于任何想要运行最新查询的人,您可以在这里这样做:代表“创建”与topX选民拥有的“代表”

EN

回答 4

Code Review用户

回答已采纳

发布于 2014-05-16 15:09:46

首先,当您选择并想要在上面执行数学时,您应该直接指定您想要做的事情。

而不是

代码语言:javascript
复制
Voters.Upvotes * 8 as [EstimatedAddedRep], 

它应该是

代码语言:javascript
复制
(Voters.Upvotes * 8) AS [EstimatedAddedRep]     

代码语言:javascript
复制
Voters.Upvotes * 8 / Users.Reputation as [Ratio]

应该是

代码语言:javascript
复制
((Voters.Upvotes * 8) / (Users.Reputation)) as [Ratio]

在代码中执行算术时,应该始终使用括号指定,因为它并不总是执行您认为它将完成的任务。

我不会用我的FROMWHERE语句来做这个

代码语言:javascript
复制
FROM Users, Voters
WHERE users.id = Voters.Id

我会这么做的

代码语言:javascript
复制
FROM Users INNER JOIN Voters ON Users.Id = Voters.Id

省去WHERE条款。

对于聊天中提到的问题,您只需要像这样添加它(简单的查询,而不是在select中重复自己的问题)。

代码语言:javascript
复制
((Voters.Upvotes * 8) / Users.Reputation) AS RepCreated --?????

检查您的所有列和表,您有一些奇怪的大小写问题,有时您大写,有时不,这是很难找出什么是正确的

票数 4
EN

Code Review用户

发布于 2014-05-16 15:09:54

虽然它对SQL引擎没有什么区别(几乎没有),但以浮点数的形式生成结果比率对用户来说可能更友好,而不是整数(可能在小数点之后只舍入一两位)。

这对于任何用户来说尤其如此,他们的代表(甚至略高于他们估计的数量)都是如此。向所有这样的用户展示一个0的比率,基本上是让他们在头脑中做一些数学来计算真实比率的概念。

票数 4
EN

Code Review用户

发布于 2014-05-16 17:22:46

我可能弄错了,但我的印象是!=不是很好的SQL实践,而<>更可取。

例如:

代码语言:javascript
复制
WHERE Reputation <> 101 AND Reputation <> 1 --Exclude users without repchanges
票数 4
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/50920

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档