Заказ вывода по индивидуальному заказу с GridDB

Я пытаюсь выполнить запрос ORDER BY, но хочу, чтобы вывод был упорядочен в соответствии с пользовательской схемой. В SQL это часто делается с помощью системы case, но в зависимости от БД существуют и другие реализации. Как мне добиться сортировки, описанной ниже, с помощью 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')";

В любом случае вы получите сообщение об ошибке, что введенный синтаксис неверен.

1 ответ

Решение

TQL GridDB не поддерживает 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())

Теперь вы можете использовать ORDER BY CASE с интерфейсом SQL V4.5CE:

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
Другие вопросы по тегам