sql - 根据特定项目出现的次数对表进行排序

标签 sql postgresql multiple-columns

这是一个包含 2 列的示例表。

 id | name
------------
  1 | hello  
  2 | hello  
  3 | hello  
  4 | hello  
  5 | world  
  6 | world  
  7 | sam  
  8 | sam  
  9 | sam  
 10 | ball  
 11 | ball  
 12 | bat  
 13 | bat  
 14 | bat  
 15 | bat  
 16 | bat 

上表中是出现次数

hello  - 4  
world  - 2  
sam    - 3  
ball   - 2  
bat    - 5

如何在 psql 中编写查询,以便输出将从特定名称的最大出现次数排序到最小出现次数?即像这样

bat  
bat  
bat  
bat  
bat  
hello  
hello  
hello  
hello  
sam  
sam  
sam  
ball  
ball  
world  
world

最佳答案

您可以使用临时表来获取所有名称的计数,然后将其JOIN到原始表中进行排序:

SELECT yt.id, yt.name
FROM your_table yt INNER JOIN
(
    SELECT COUNT(*) AS the_count, name
    FROM your_table
    GROUP BY name
) t
ON your_table.name = t.name
ORDER BY t.the_count DESC, your_table.name DESC

关于sql - 根据特定项目出现的次数对表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30657874/

相关文章:

sql - 如何创建考虑匹配的查询,即使它有两个不同的字母

node.js - 在 Nodejs 中使用 postgresql 时,我应该如何从网络服务器查询数据库?

postgresql - 臭名昭著的java.sql.SQLException:未找到合适的驱动程序

mysql - 从 MySQL 中的多行中获取总数

sql - 当所有其他列都相等时,对具有不同标签的值的约束

sql - 以编程方式创建和更新数据库结构

MySQL - 行更新触发错误

asp.net - 在 SQL 查询中使用 LIKE

postgresql - 什么是 Postgres < 9.0 的 DO block 的等价物

html - 如何更改移动布局上的 bootstrap 4 列顺序?