回答

收藏

SQL入门:避免重复表达:

技术问答 技术问答 190 人阅读 | 0 人回复 | 2023-09-14

我对SQL完全陌生,但可以说,在StackExchange Data
; u$ ~: ~7 W# eExplorer上面,我只想根据信誉列出前15名用户,我写了这样的内容:. d, c0 n% F7 T# d: r- A
SELECT TOP 15  DisplayName,Id,Reputation,Reputation/1000 As RepInKFROM  UsersWHERE  RepInK > 10ORDER BY Reputation DESCError: Invalid column name'RepInK我认为这是目前有意义的,因为RepInK不是中的列Users。我可以很容易地说出这个问题WHEREReputation/1000 > 10,基本上是在重复公式。  G2 |- R5 P$ }. n5 N! z3 K
因此,问题是:
8 N9 R* x8 y2 Y) m, b我可以RepInK在WHERE列在条款中实际使用吗?; _9 h0 D0 j. \* T9 W2 G& O
我是否可能需要使用这个列来创建虚拟表/视图SELECT/WHERE查询?

9 P7 B3 K% s1 r9 ^我能命名表达式吗?Reputation/1000,所以我只需要在几个地方重复命名,而不是公式?9 N  b, v% H+ ~, E4 O/ W, z
这个叫什么?替代宏?有功能吗?存储过程?

3 }+ L. O4 n8 j1 ~是否有一个SQL快速表、术语表、语言规范以及我能快速理解语言语法和语义的任何内容?
  ~, D: O& o1 G! j9 [+ v/ F我知道有不同的味道吗?
                                                               
7 A8 E' b" [8 Q0 ?    解决方案:                                                                8 k: o+ I& P% |
                                                                我实际上可以WHERE子句中使用RepInK“列”吗?
3 L- d. o0 G3 v' x不,但你可以放心,(Reputation即使你在 / 1000)SELECT字段中和WHERE所有的句子都使用数据库,数据库也会进行评估。
- w6 K! t- W; ]: L$ J我是否可能需要使用这个列来创建虚拟表/视图并执行它SELECT / WHERE查询?* D7 s5 Z& P, k" A
是的,视图是简化复杂查询的选择。  u- v3 ^* h8 k( w
我可以命名一个表达式,比如声望/ 1000,所以我只需要在几个地方重复命名,而不是公式?
9 C! Y1 E# x7 P1 f您可以创建用户定义的函数,您可以调用此类函数convertToK将rep值作为参数接收并返回该参数除以1000。但是,对于像您的示例中这样的简单情况,通常不切实际。# [3 ^3 w' B( W9 J' _  [( ^
是否有一个SQL快速表、术语表、语言规范以及我能快速理解语言语法和语义的任何内容?
0 c; |' A% ]$ N我建议练习。你可能必须开始遵循它mysql每天都有很多初学者问题。MySQL,如果你认为你有问题,试着找到解决方案。我认为这将帮助你加快速度,提高你对语言功能的理解。你不需要从一开始就发布答案,因为有一些快速的话题,但通过一些练习,我相信你可以理解一些要点:)
7 I' c* W5 F& l9 Y. G我知道有不同的味道吗?+ c/ k+ C1 m6 D( ~6 b- M% h$ E
其实这些味道都是ANSI SQL扩展。数据库供应商通常使用它Transact-) U# }6 `7 t& @, s! x! _4 k
SQL和PL /
2 y0 O$ U) C$ d. @. o; YSQL扩展等SQL语言。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则