【发布时间】:2021-04-19 08:37:24
【问题描述】:
我需要编写一个 SQL 语句来选择和排序按值和名称的优先级排序的数据。请参阅以下标准。
数据库架构:
name : string
isSpecial : boolean
isA1 : boolean
isA2 : boolean
isA3 : boolean
排序优先级(isA1、isA2、isA3的优先级相等,我要从isAx的true数排序)
- 很特别
- 3A(所有 isA 都为真)
- 2A(两个isA为真)
- 1A(只有一个 isA 为真)
- 二级排序:姓名
例子
id, name, isSpecial, isA1, isA2, isA3
1, aaa, false, true, true, true
2, bbb, true, true, true, true
3, ccc, false, false, false, true
4, hhh, false, true, false, true
5, ddd, false, true, true, false
预期顺序是
2 (isSpecial = true)
1 (3A)
5 (2A, name = ddd)
4 (2A, name = hhh)
3 (1A)
您有什么想法或建议吗?
更新 请参阅下面评论中的 SQL 语句。
【问题讨论】:
-
首先,了解您使用的是什么RDBMS; SQL Server 和 Oracle 是 2 个完全不同(且相互竞争)的产品。然后重新标记正确的,并且仅那个。至于你的问题,这里的
ORDER BY有什么问题?您是否尝试过实施一个?如果不是,为什么不呢?如果有,为什么你的尝试没有成功?您做了什么尝试? -
@Larnu 感谢您的编辑。我试图创建一个 SQL 语句。请看我上面的更新。
-
name在您的ORDER BY中出现 5 次;这没有多大意义。如果您已经通过name订购,再次订购不会改变排序顺序。 -
拥有多个包含相同“类型”数据的列以使您以数字后缀结尾(因为您的 isA1、isA2、isA3 列似乎在此处)通常是错误的。它通常表明数据应该在一个具有一列和多行的表中建模(这也使得在出现第四个实例时容纳它变得微不足道,而不必再次更改架构)
-
@Damien_The_Unbeliever 谢谢你的建议。数字后缀是例如。
标签: sql select sql-order-by