在同一个表上有两个SQL选择。 1st select显示所需的用户数据。第二个选择查找“首字母”的使用次数。该值往往会多次使用,但不应该
我不希望在查询1中拥有更少的行,而是添加“所有初始计数”
- 显示所有所需数据的第一个查询
SELECT
UserID, Username, Initials
FROM
dbo.Users
此查询可以计算Initaials
SELECT
Initials, count(*) as InitialCount
FROM
dbo.Users
GROUP BY
Initials
输出:
UserID | Username | Initals | Initialcount
----------------------------------------------
1 | Peter Pan | PP | 2
2 | Paul Pax | PP | 2
3 | John Doe | JD | 1
答案 0 :(得分:5)
您可以COUNT()
使用OVER()
来获取每个组的计数(由PARTITION BY
定义),而不是GROUP BY
:
SELECT
UserID
, Username
, Initials
, COUNT(*) OVER(PARTITION BY Initials) AS InitialCount
FROM
dbo.Users
通常称为分析或窗口函数,OVER()
可用于聚合函数,如MIN()
,MAX()
,SUM()
等。
答案 1 :(得分:0)
SELECT UserID, Username, Inititials,
(SELECT COUNT(*) FROM dbo.Users U2 WHERE U2.Inititals = U1.Initials) InitialCount
FROM dbo.Users U1
答案 2 :(得分:0)
因此,请尝试使用关键字distinct,具体取决于您可能需要进行自我加入的数据。我只是学习SQL所以我可能不正确。
SELECT DISTINCT UserID, Username, Initials, count(Initials) as InitialCount
FROM dbo.Users
GROUOP BY UserID