【问题标题】:Ordering output by custom order with GridDB使用 GridDB 按自定义顺序对输出进行排序
【发布时间】:2023-03-18 11:51:01
【问题描述】:

我正在尝试运行 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')";

在任何一种情况下,都会收到输入不是有效语法的错误。

【问题讨论】:

    标签: php nosql griddb


    【解决方案1】:

    GridDB 的 TQL 不支持 ORDER BY CASE,但通过多查询,您可以快速/高效地执行此操作。

    请原谅我的 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())
    
    

    【讨论】:

      【解决方案2】:

      您现在可以将 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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-12-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多