回答

收藏

如何在一个查询中计算2个不同的数据

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

我需要在一个查询中计算两列中某些数据的出现总数。数据库位于SQL Server 2005中。$ o6 d  G% \/ I" Y! g
例如,我有此表:
3 Q; Q/ q- ^- w9 i5 bPerson: Id, Name, Age
" z) n$ q0 W9 y6 T; x! Q/ @我需要查询一个结果:; G9 K. f: R6 s5 V, o% e, w
1.名为“约翰”的人数
$ @2 T. x9 H& g: `" p9 J6 c, H3 F% Q3 Q2.年龄超过30岁的“约翰”的人数。
8 g3 ^9 y( k# ~我可以通过这种方式对子查询进行操作(这只是示例):
/ ?8 k0 h) r6 M# E9 BSELECT (SELECT COUNT(Id) FROM Persons WHERE Name = 'John'),
- X0 t9 A% c3 t% r  (SELECT COUNT (Id) FROM Persons WHERE Name = 'John' AND age > 30)
2 T/ a( _0 j, }FROM Persons9 G2 c- H, w$ A
但这非常慢,我正在寻找更快的方法。
  D7 a) G$ z0 E与使用子查询相比,您是否知道一种更好的方法来计算一个查询中的少量计数?
7 B) ?4 {' @  D' y                ! ?; a# `* ~) m  p7 J/ U! l
解决方案:
/ m0 ~0 [" N- p               
9 B+ n$ I9 H! A6 m: k$ @9 g( T* q7 l4 G: ]$ H
+ r' T* S2 a- ~8 M' }
                使用CASE语句,您可以在单个查询中计算所需的内容:
, K& d/ x. I! rSELECT5 r/ ~  }& m' r% o* h" T0 |
    SUM(CASE WHEN Persons.Name = 'John' THEN 1 ELSE 0 END) AS JohnCount,
# a$ ]( Z4 j7 `1 `7 ^- r* X0 Z    SUM(CASE WHEN Persons.Name = 'John' AND Persons.Age > 30 THEN 1 ELSE 0 END) AS OldJohnsCount,. D9 f; ~9 G0 d0 D" K; |7 {9 J, O" \
    COUNT(*) AS AllPersonsCount
+ R0 {: k7 w, |+ I- Q, ?+ E, ~' }- gFROM Persons
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则