sql - PostgreSQL:按字母数字字符串和小数字段排序

标签 sql postgresql sorting pg

希望你们一切都好!

我有一个包含 200 万条记录的表items,结构如下所示:

id (int) | price (decimal) | priority (int)
-------------------------------------------
10001    |  59000.25       |    1
10002    |  73000.91       |    2
10003    |  1000.23        |    1
10004    |  9567.18        |    1

我正在寻找的解决方案非常简单:如何按 ASC|DESC 顺序按 price+priority 对表进行排序?

当前有效的解决方案:我正在使用ORDER BY priority ASC, price ASC。但据我所知,对多列进行排序很慢,而且不是经过优化的方法(因此我面临着实时缓慢的问题)。

我尝试过的解决方案:我在这个表中添加了一个临时列:

id (int) | price (decimal) | priority (int) | new_priority (varchar)
--------------------------------------------------------------------
10001    |  59000.25       |    1           | a59000.25
10002    |  73000.91       |    2           | b73000.91
10003    |  1000.23        |    1           | a1000.23
10004    |  9567.18        |    1           | a9567.18

我已经替换了 1 => a, 2 => b, 3 => c 直到 10(我在数据库中的最大数量)

现在,每当我尝试使用以下 SQL 时,它们都不起作用

SELECT * FROM items
ORDER BY new_priority ASC

SELECT * FROM items
ORDER BY new_priority::bytea

SELECT * FROM items
ORDER BY SUBSTRING(new_priority FROM '^(.*?)( \\d+)?$'),
     COALESCE(SUBSTRING(new_priority FROM ' (\\d+)$')::INTEGER, 0)

请指教!

我引用的链接:

  1. Postgresql sorting mixed alphanumeric data
  2. Alphanumeric Sorting in PostgreSQL
  3. Alphanumeric sorting with PostgreSQL
  4. Alphanumeric case in-sensitive sorting in postgres

最佳答案

如何创建一个 index ?索引是一种提高数据库性能的机制。创建索引可能会很慢并且可能会持续几个小时,但您会注意到进一步查询中的差异。

关于sql - PostgreSQL:按字母数字字符串和小数字段排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44392447/

相关文章:

php - 将多个var值插入到同一个mysql表中

c# - 突出显示文本中的关键字

winforms - 为什么我的列不会在 winforms .NET 数据网格中排序?

R - 基于匹配(模板)重新排序列

ios - 如何按用户对 PFObjects 进行分组,然后对它们进行排序?

php - 使用 SQLDeveloper 而不是 MySQL 为 php 操作表更新

mysql - MySQL 是否支持括号通配符?

sql - 如何在 PostgreSQL 中将可变小时数添加到日期?

sql - Postgresql generate_series 的月份

mysql - 使用 mysql_fdw 或将表从 Postgres 连接到 MySQL