Вверх ↑
Ответов: 517
Рейтинг: 166
#1: 2025-02-19 11:01:34 ЛС | профиль | цитата
Gunta писал(а):
Запрос должен быть чуть другим

Этот вариант у меня работает . Windows 11 Pro 24H2. Версия sqlite3 3.49.1
Ответ ИИ по этому вопросу, может кому будет интересно

В SQLite можно использовать подзапрос или оконную функцию `ROW_NUMBER()` (если версия SQLite поддерживает оконные функции, начиная с версии **3.25.0**). Вот как это можно сделать:

### 1. **С использованием оконной функции `ROW_NUMBER()` (рекомендуется, если версия SQLite ≥ 3.25.0):**

```sql
SELECT
ROW_NUMBER() OVER (ORDER BY name) AS номер_по_порядку,
name,
city
FROM myTable;
```

Этот запрос добавит нумерацию строк, отсортированных по столбцу `name`.

---

### 2. **С использованием подзапроса (подходит для всех версий SQLite):**

Если у вас старая версия SQLite, которая не поддерживает оконные функции, можно использовать подзапрос для нумерации строк:

```sql
SELECT
(SELECT COUNT(*) FROM myTable t2 WHERE t2.rowid <= t1.rowid) AS номер_по_порядку,
name,
city
FROM myTable t1
ORDER BY name;
```

Этот запрос работает следующим образом:
- Подзапрос `(SELECT COUNT(*) FROM myTable t2 WHERE t2.rowid <= t1.rowid)` считает количество строк, у которых `rowid` меньше или равен текущему `rowid`, что и создает нумерацию.
- `ORDER BY name` сортирует строки по столбцу `name`.

---

### 3. **С использованием временной таблицы (альтернативный способ):**

Если вам нужно сохранить порядок, можно создать временную таблицу с нумерацией:

```sql
-- Создаем временную таблицу с нумерацией
CREATE TEMP TABLE temp_table AS
SELECT
ROW_NUMBER() OVER (ORDER BY name) AS номер_по_порядку,
name,
city
FROM myTable;

-- Выбираем данные из временной таблицы
SELECT * FROM temp_table;

-- Удаляем временную таблицу (если больше не нужна)
DROP TABLE temp_table;
```

---

### Пример результата:

Для таблицы `myTable`:

| name | city |
|----------|---------|
| Петров | Москва |
| Иванов | Минск |
| Сидоров | Киев |
| Смирнов | Киров |
| Малевич | Сидней |

Результат запроса будет:

| номер_по_порядку | name | city |
|------------------|----------|---------|
| 1 | Петров | Москва |
| 2 | Иванов | Минск |
| 3 | Сидоров | Киев |
| 4 | Смирнов | Киров |
| 5 | Малевич | Сидней |

---

### Важно:
- Если вы используете `ORDER BY`, убедитесь, что он соответствует вашим требованиям к сортировке.
- Если версия SQLite старая (ниже 3.25.0), используйте подзапрос или временную таблицу.
карма: 4

0