使用 GridDB 按自定义顺序排序输出
Ordering output by custom order with GridDB
我正在尝试 运行 ORDER BY 查询,但我希望根据自定义方案对输出进行排序。
在 SQL 中,这通常是通过案例系统完成的,但根据数据库的不同,还有其他实现。
我将如何使用 GridDB 实现下面解释的排序?
假设我的 GridDB 列出了动物园中的所有动物以及每种动物的数量,
我想要所有有 4 个或更多的动物,按大小,最小的第一个(老鼠),最大的最后一个(大象)。
我尝试过的事情:
$query = $col->query("SELECT * WHERE count >= 4 ORDER BY CASE
WHEN 'mouse' THEN 1
WHEN 'cat' THEN 2
WHEN 'dog' THEN 3
WHEN 'elephant' THEN 4
ELSE 5
END");
$query = $col->query("SELECT * WHERE count >= 4 ORDER BY FIND_IN_SET(animal, 'mouse, cat, dog, elephant')";
在任何一种情况下,都会收到错误消息,指出输入的语法无效。
GridDB 的 TQL 不支持 ORDER BY CASE 但通过多查询你可以执行这个操作 quickly/efficiently.
请原谅我的Python:
queries=[]
queries.append(col.query("select * where count >=4 and animal = 'mouse'"))
queries.append(col.query("select * where count >=4 and animal = 'cat'"))
queries.append(col.query("select * where count >=4 and animal = 'dog'"))
queries.append(col.query("select * where count >=4 and animal = 'elephant'"))
store.fetch_all(queries)
for q in queries:
rs = q.get_row_set()
while rs.has_next():
print(rs.next())
您现在可以使用 ORDER BY CASE 与 V4.5CE SQL 界面:
CREATE TABLE myTable (
key INTEGER PRIMARY KEY,
animal STRING,
count INTEGER
);
INSERT INTO myTable VALUES(1, 'cat', 4); INSERT INTO myTable VALUES(2, 'dog', 1); INSERT INTO myTable VALUES(3, 'mouse', 6);
SELECT * FROM myTable WHERE count >= 4 ORDER BY CASE animal
WHEN 'mouse' THEN 1
WHEN 'cat' THEN 2
WHEN 'dog' THEN 3
WHEN 'elephant' THEN 4
ELSE 5
END;
-->
key | animal | count
----+--------+------
3 | mouse | 6
1 | cat | 4
我正在尝试 运行 ORDER BY 查询,但我希望根据自定义方案对输出进行排序。 在 SQL 中,这通常是通过案例系统完成的,但根据数据库的不同,还有其他实现。 我将如何使用 GridDB 实现下面解释的排序?
假设我的 GridDB 列出了动物园中的所有动物以及每种动物的数量, 我想要所有有 4 个或更多的动物,按大小,最小的第一个(老鼠),最大的最后一个(大象)。
我尝试过的事情:
$query = $col->query("SELECT * WHERE count >= 4 ORDER BY CASE
WHEN 'mouse' THEN 1
WHEN 'cat' THEN 2
WHEN 'dog' THEN 3
WHEN 'elephant' THEN 4
ELSE 5
END");
$query = $col->query("SELECT * WHERE count >= 4 ORDER BY FIND_IN_SET(animal, 'mouse, cat, dog, elephant')";
在任何一种情况下,都会收到错误消息,指出输入的语法无效。
GridDB 的 TQL 不支持 ORDER BY CASE 但通过多查询你可以执行这个操作 quickly/efficiently.
请原谅我的Python:
queries=[]
queries.append(col.query("select * where count >=4 and animal = 'mouse'"))
queries.append(col.query("select * where count >=4 and animal = 'cat'"))
queries.append(col.query("select * where count >=4 and animal = 'dog'"))
queries.append(col.query("select * where count >=4 and animal = 'elephant'"))
store.fetch_all(queries)
for q in queries:
rs = q.get_row_set()
while rs.has_next():
print(rs.next())
您现在可以使用 ORDER BY CASE 与 V4.5CE SQL 界面:
CREATE TABLE myTable (
key INTEGER PRIMARY KEY,
animal STRING,
count INTEGER
);
INSERT INTO myTable VALUES(1, 'cat', 4); INSERT INTO myTable VALUES(2, 'dog', 1); INSERT INTO myTable VALUES(3, 'mouse', 6);
SELECT * FROM myTable WHERE count >= 4 ORDER BY CASE animal
WHEN 'mouse' THEN 1
WHEN 'cat' THEN 2
WHEN 'dog' THEN 3
WHEN 'elephant' THEN 4
ELSE 5
END;
-->
key | animal | count
----+--------+------
3 | mouse | 6
1 | cat | 4