我是SQL新手,表中有一些数据,希望根据第CLASS列和第STATUS列进行分组,条件是基于这两列中的值.它将按最高顺序分组

下表所示

Scenario 1

Table Source :

ID Class Status
001 Platinum ACTIVE
001 Gold ACTIVE
001 Silver ACTIVE
001 Regular ACTIVE

Output after Grouping:

ID Class Status
001 Platinum ACTIVE

Scenario 2

Table Source :

ID Class Status
001 Gold ACTIVE
001 Silver INACTIVE
001 Regular INACTIVE

Output after Grouping:

ID Class Status
001 Gold ACTIVE

所以基本上分组将由CLASSStatus的值决定

对于CLASS,分组的顺序是

对于Status,分组的顺序是

有什么办法吗?

谢谢

推荐答案

可以使用sql case语句定义classsubject的顺序.然后将结果表作为子查询进行排序.

select t1.ID, t1.class, t1.Status from (
    select ID, Class, Status (case when 'Platinum' then 1 when 'Gold' then 2 when 'Silver' then 3 else 4 end) as sort_order1,
        (case when 'active' then 1 else 2 end) as sort_order2
    from table1)
order by t1.sort_order1, t1.sort_order2

Sql相关问答推荐

在请求结束之前,PostgreSQL不会考虑使用中的删除

SQL将 Select 查询作为新列添加到另一个 Select 查询

PostgreSQL基于2个COLS的任意组合 Select 唯一行

如何嵌套两条SQL语句

OVER子句WITH PARTITION BY和ORDER BY忽略主查询的WHERE子句

最近3个月收到的邮箱总数

Oracle中的时间戳

我可以在SQLite3中使用BLOB作为主键吗?

HAVING子句内部过滤的正确方法

如何在AWS Athena中 Select JSON数组的最后一个元素?

改进的SQL子字符串提取

此过程如何在不引用传递的参数值的情况下执行工作?

Postgresql - WHERE 中的 MAX 标准 - 初学者问题

将具有嵌套 XML 的列转换为 SQL 中的表格格式?

如何在Hive SQL中分别按多列进行分组?

在 Oracle 21c 中透视文本值

如何使用最后一个非 NULL 值在 PostgreSQL 列中填充 NULL 值

如何在 postgres 中旋转某些数据字段

从 varchar 列中删除特殊字符后的前面的零和字符时遇到问题

判断是否所有字符都是X