这是一个包含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中编写查询,以便将输出从特定名称的最大值排序到min?就像这样
bat
bat
bat
bat
bat
hello
hello
hello
hello
sam
sam
sam
ball
ball
world
world
答案 0 :(得分:4)
您可以使用临时表来获取所有名称的计数,然后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
答案 1 :(得分:2)
使用窗口函数的替代解决方案:
select name from table_name order by count(1) over (partition by name) desc, name;
这样可以避免在Tim的解决方案中扫描table_name
两次,并且在table_name
大的情况下可能会有更好的效果。
答案 2 :(得分:0)
如果原始表名为sorted:
,则可以使用时态表创建它create temp table counted as select name, count(name) from sorting group by name;
select sorting.name from sorting, counted where sorting.name = counted.name order by count desc;
答案 3 :(得分:-1)
SELECT count( ID ) cnt, NAME
FROM table_name
GROUP BY NAME
ORDER BY count( ID ) DESC;