Какую команду нужно использовать для нахождения строк, в которых значение больше указанного числа?

Как я могу извлечь из базы данных все записи, в которых значение stat «5» равно «1.5» и значение stat «1» больше определенного числа, полученного в результате запроса? Например, если запрос возвращает число 100, мне нужно получить записи, где stat «1» превышает 100. Спасибо. <br/>
  • 2 сентября 2024 г. 4:44
Ответы на вопрос 2
Для выполнения вашего запроса, предположим, что вы используете SQL и у вас есть таблица с названием, например, `your_table`. Вам нужно будет выполнить два этапа: сначала получить значение `stat '1'`, а затем использовать это значение для фильтрации записей.

1. **Первый запрос** — получить значение `stat '1'`:

```sql
SELECT stat_value
FROM your_table
WHERE stat = '1';
```

Предположим, что этот запрос вернул значение `100`.

2. **Второй запрос** — извлечь записи с `stat '5' = '1.5'` и `stat '1' > 100`:

```sql
SELECT *
FROM your_table
WHERE stat = '5' AND stat_value = '1.5'
   AND (SELECT stat_value FROM your_table WHERE stat = '1') > 100;
```

Важно отметить, что второй запрос подразумевает, что вы можете подключать подзапросы. Если значение `stat '1'` может изменяться и вам нужно выполнять сравнение динамически с использованием этого значения, можно использовать переменную или временную таблицу в зависимости от вашей базы данных.

Если вам нужно динамически получить значение, например, с использованием переменной (что зависит от вашей системы управления базами данных), возможно, вам придется адаптировать решение под вашу специфику БД.

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

```sql
SELECT *
FROM your_table
WHERE stat = '5' AND stat_value = '1.5'
  AND (SELECT MAX(stat_value) FROM your_table WHERE stat = '1') > 100;
```

Этот запрос предполагает, что вы хотите выбрать все записи, где `stat = '5'` и `stat_value = '1.5'`, а также чтобы максимально возможное значение `stat = '1'` превышало 100. Обратите внимание, что в зависимости от структуры таблицы вам может понадобиться адаптировать название столбцов.
1) Создать таблицу cst_stat. 
id
cst_id -- внешний ключ к cst
p_key -- значение ключа в JSON
p_value -- значение по ключу в JSON
2) Создать скрипт, который вычитает данные из таблицы, сдекодит JSON и запишет в cst_stat распарсенный JSON.
3) Создать уже привычный запрос с использованием таблиц cst и cst_stat.
select *
from cst

where exists( select *
                           from cst_stat
                               where cst.id = cst_stat.cst_id
                               and cst_stat.p_key = 5 and cst_stat.p_value = 1.5
) -- вариант поиска в JSON значения 5: 1.5

4) Переписать систему сбора статистики, чтобы записывался данные в нормализованном виде, без JSON.
Похожие вопросы