使用另一个表中的Count()值对sql结果进行排序
假设我们有这样一个用户表:使用另一个表中的Count()值对sql结果进行排序,sql,sql-order-by,Sql,Sql Order By,假设我们有这样一个用户表: ID | USERNAME | STATUS | 01 | Aname | 1 | 02 | Bname | 1 | 03 | Cname | 2 | 04 | Dname | 1 | ID | USER | VIDEO | 01 | 01 | aaaa | 02 | 01 | bbbb
ID | USERNAME | STATUS |
01 | Aname | 1 |
02 | Bname | 1 |
03 | Cname | 2 |
04 | Dname | 1 |
ID | USER | VIDEO |
01 | 01 | aaaa |
02 | 01 | bbbb |
03 | 02 | cccc |
04 | 02 | dddd |
05 | 03 | eeee |
06 | 03 | ffff |
07 | 03 | gggg |
还有另外两个表,其中,对于每个用户,记录用户“拥有”的距离、视频和照片的项目,假设视频表如下所示:
ID | USERNAME | STATUS |
01 | Aname | 1 |
02 | Bname | 1 |
03 | Cname | 2 |
04 | Dname | 1 |
ID | USER | VIDEO |
01 | 01 | aaaa |
02 | 01 | bbbb |
03 | 02 | cccc |
04 | 02 | dddd |
05 | 03 | eeee |
06 | 03 | ffff |
07 | 03 | gggg |
照片也一样:
ID | USER | PHOTO |
01 | 01 | aaaa |
02 | 02 | cccc |
03 | 02 | dddd |
04 | 03 | eeee |
05 | 03 | ffff |
06 | 03 | gggg |
现在,我正试图在STATUS
字段中对第一个表的结果进行排序,因此状态为2的用户将在结果的末尾(或开头),但我想根据他们有或没有视频或照片的事实对其他用户进行排序。实际上,对于状态为1的所有用户,我检查他们是否有视频和照片,并显示类似“警告,您没有视频”之类的消息,我还想根据状态以及他们是否有照片或视频来订购所有用户。。。比如:
SELECT id,username,status,NumOfPhotos,NumOfVideos order by status ASC, numOfPhotos ASC, NumOfVideos DESC
其中numofothops
,例如从照片中选择COUNT(*),其中USER=USERS.ID
可能吗?这在一条语句中是可能的吗?这是SQL Server上的一个示例,但类似的东西在其他RDBMS上应该可以很好地工作
SELECT
id, username, status, COALESCE(NumOfPhotos,0) AS NumOfPhotos,COALESCE(NumOfVideos,0) AS NumOfVideos
FROM dbo.Users u
LEFT JOIN (SELECT [USER], COUNT(*) AS NumOfPhotos FROM dbo.Photos GROUP BY [USER]) ph ON ph.[USER] = u.ID
LEFT JOIN (SELECT [USER], COUNT(*) AS NumOfVideos FROM dbo.Videos GROUP BY [USER]) vd ON vd.[USER] = u.ID
ORDER BY status ASC, numOfPhotos ASC, NumOfVideos DESC