美文网首页
SQL Order By Count 2021-11-12

SQL Order By Count 2021-11-12

作者: 9_SooHyun | 来源:发表于2021-11-12 11:26 被阅读0次

场景

一张表host,包含hostID和campus两个字段,若干host归属不同的园区
目标:将host查出来,且host数量越多的园区的host记录在前。也就是按园区的host数量对查询结果进行排序

实现

如果上来就想用简单的单层sql去实现,逻辑上还是有点困惑的。count group by campus是很自然的想法,但是group by每组仅返回一条记录,并不能得到期待的host排序列表
实际上,这是按照【额外字段count】对表记录进行排序,字段count是virtual的

思路:还是分治,一步一步拆解

  • 按照园区的host数量排序,首先要得到每个园区的host数量,可以通过select count(1) as count from host group by campus获取
  • 获得每个园区的host数量之后,如果把这个count拼接到host_table,那就很容易了
    | hostID | campus | count |
  • 怎么实现字段拼接?表join。join就是为了字段拼接而存在的

于是,我们可以通过以下sql实现目的

SELECT
  host.*, counter.count
FROM
  host
LEFT JOIN (
  SELECT
    host.campus, count(1) as count
  FROM
    host
  GROUP BY
    host.campus
) counter ON counter.campus = host.campus
ORDER BY
  counter.count DESC;

总结

这个问题本质上是【基于额外字段排序】的问题
问题的通解就是,先在另一个临时表上把额外字段构造出来,然后join,从而变成普通表的排序查询

相关文章

网友评论

      本文标题:SQL Order By Count 2021-11-12

      本文链接:https://www.haomeiwen.com/subject/cgwnzltx.html