我想写一个查询,它将根据多个条件对结果进行排序。
请参考下表
我想在表上方排序
1-通过已知域yahoo
后跟gmail
然后Rest。
所以我想把结果行分成三部分。
第一部分的行具有yahoo
作为域,然后在第二部分的行中,最后剩下的行具有gmail
域。
2-按字母顺序排列,所有特殊字符位于末尾。
每个部分都应该在name
字段上按字母顺序进一步排序,末尾有特殊字符。
结果应如下表所示。
我已经用下面的查询按字母顺序对结果进行排序,底部有特殊符号,但我无法获得正确排序的第一部分,即按已知域排序。
SELECT * FROM table1
ORDER BY
CASE WHEN name GLOB '[A-Za-z]*'
THEN name
ELSE '~' || name
END COLLATE NOCASE
可能不是最有效的解决方案,但在这种特殊情况下,它应该与工会合作:
(
SELECT
*
FROM
table1
WHERE
domain like 'yahoo'
ORDER BY
name desc
)
UNION
(
SELECT
*
FROM
table1
WHERE
domain like 'gmail'
ORDER BY
name desc
)
UNION
(
SELECT
*
FROM
table1
WHERE
domain not like 'yahoo'
OR domain not like 'gmail'
ORDER BY
domain desc,
name desc
)
第1部分-要首先按特定值排序,可以执行以下操作
SELECT * FROM table1
ORDER BY CASE
WHEN domain = 'yahoo' then 0
WHEN domain = 'gmail' then 1
ELSE 2
END ASC
第2部分-然后在其中,您希望按名称排序,因此将您现有的名称排序添加到我们的ORDER by中,这样我们就有了:
SELECT * FROM table1
ORDER BY CASE
WHEN domain = 'yahoo' then 0
WHEN domain = 'gmail' then 1
ELSE 2
END ASC,
CASE WHEN name GLOB '[A-Za-z]*'
THEN name
ELSE '~' || name
END COLLATE NOCASE
在ORDER BY子句中使用布尔表达式:
SELECT * FROM table1
ORDER BY domain = 'yahoo' DESC,
domain = 'gmail' DESC,
name GLOB '[A-Za-z]*' DESC,
LTRIM(LTRIM(name, '.'), '_');
这些布尔表达式中的每一个都计算为1
表示true
或0
表示false
。
请参见演示
问题内容: 我有一个列表,其中每个元素都是形式。例如,列表的元素可能看起来像这样。 我想通过以下条件对包含描述的元素类型的列表进行排序: 如果两个元素的整数列表(即)的长度不同,则整数列表较小的元素是较小的元素。 否则,如果整数列表的长度相同,则较小的元素是第一个整数的较小整数,这两个元素的整数列表都不同。例如: [[1,1,99,100],-1] <[[1,1,100,1],-1],因为99 <
问题内容: 我有一个包含Quote对象的数组列表。我希望能够按名称,更改和更改百分比的字母顺序进行排序。如何排序我的数组列表? 问题答案: 创建一个合适的对象,它将根据你所需的条件比较两个项目。然后在你的上使用 。 如果以后要按其他条件排序,请使用不同的再次调用。
我想这样做: 我在想有没有更干净的方法来写这种东西。我期待一些东西像签名,它需要一个可比变量并选择第一个非零。
我有以下代码: 我的问题是我想让我的列表按多个东西排序: 1。)将它们分组为未来事件和过去事件(通过检查ystem.current毫秒()是否大于结束时间戳)2。)通过开始升序排序未来事件3。)通过结束降序排序过去事件 我可以用Java 8 Lambda来做这件事吗?或者我需要另一种排序项目的方法吗?
我用的是拉威尔的背包,积垢舱。 如何将orderby()用于多列? 例子: 我看到src和orderby只接受一个参数。 有什么建议吗?
问题内容: 我有一个成员数组/切片: 我的问题是如何按,然后按。 问题答案: 使用sort.Slice(从Go 1.8开始可用)或sort.Sort函数对值的切片进行排序。 通过这两个功能,应用程序提供了一个功能,用于测试一个切片元素是否小于另一个切片元素。要按姓氏和名字排序,请比较姓氏和名字: less函数是使用带有sort.Slice的匿名函数指定的: less函数通过带有sort.Sort函