sql-server - 内部加入两次后分组 - 按升序排序
问题描述
练习 SQL 并想对我的查询结果进行排序 - 原始查询运行良好,但是当按它分组时无法运行。
使用 SSMS '18 - 使用AdventureWorks
数据库。
SELECT
pp.BusinessEntityID,
pp.FirstName,
pp.MiddleName,
pp.LastName,
ppw.PasswordHash,
ppw.PasswordSalt,
pph.PhoneNumber
FROM
Person.Person AS pp
INNER JOIN
Person.Password AS ppw ON pp.BusinessEntityID = ppw.BusinessEntityID
INNER JOIN
Person.PersonPhone AS pph ON pp.BusinessEntityID = pph.BusinessEntityID
GROUP BY
pp.BusinessEntityID ASC, pp.FirstName, pp.MiddleName, pp.LastName,
ppw.PasswordHash, ppw.PasswordSalt, pph.PhoneNumber;
导致错误:
消息 156,级别 15,状态 1,第 21 行
关键字“ASC”附近的语法不正确。
如果删除 ASC 关键字并按BusinessEntityID
降序分组,则代码将运行。我在这里错过了一些理论吗?
解决方案
这将是 order by 而不是 group by
SELECT
pp.BusinessEntityID,
pp.FirstName,
pp.MiddleName,
pp.LastName,
ppw.PasswordHash,
ppw.PasswordSalt,
pph.PhoneNumber
FROM
Person.Person as pp
inner join Person.Password as ppw on pp.BusinessEntityID=ppw.BusinessEntityID
inner join Person.PersonPhone as pph on pp.BusinessEntityID=pph.BusinessEntityID
order by pp.BusinessEntityID ASC, pp.FirstName, pp.MiddleName, pp.LastName, ppw.PasswordHash, ppw.PasswordSalt, pph.PhoneNumber;
但如果你想使用 group by 那么它将是
SELECT
pp.BusinessEntityID,
pp.FirstName,
pp.MiddleName,
pp.LastName,
ppw.PasswordHash,
ppw.PasswordSalt,
pph.PhoneNumber
FROM
Person.Person as pp
inner join Person.Password as ppw on pp.BusinessEntityID=ppw.BusinessEntityID
inner join Person.PersonPhone as pph on pp.BusinessEntityID=pph.BusinessEntityID
group by pp.BusinessEntityID , pp.FirstName, pp.MiddleName, pp.LastName, ppw.PasswordHash, ppw.PasswordSalt, pph.PhoneNumber;
但是如果没有聚合,则 distinct 更好, group by 用于聚合
推荐阅读
- maven - Maven 测试在本地运行但在 github 操作中失败
- c# - 如何防止应用程序在完成所有即发即弃的任务之前终止?
- php - 重写 URL 并获取参数
- java - 使用 android.support.v4.widget.NestedScrollView 滚动“主”按钮
- react-native - React Native TextInput:如何知道用户键入的字符的索引
- mysql - MYSQL 从 0 开始累积 sum()
- php - 从表中获取空值、空白值
- android-studio - 人脸认证usinf MLKIT android studio
- javascript - 根据条件移动导航选项卡
- postgresql - 如何使用 postgresql 本地密码登录数据库?