Добавление автоматически сгенерированного столбца, который вычисляет частоты

Я хотел бы создать сгенерированный столбец в моей таблице SQL products, значение которого автоматически рассчитывается путем ПОДСЧЕТА частоты значений в другом столбце.

Пожалуйста, смотрите пример ниже, prod_cat_id_count - это результат, который мне нужен:

prod_id prod_name prod_cat_id prod_cat_id_count 1 prod_name_1 1 2 - возвращает частоту prod_cat_id 2 prod_name_2 1 2 3 prod_name_3 2 1 4 prod_name_4 3 3 5 prod_name_5 3 3 6 prod_name_6 3 3 7 prod_name_7 4 2 8 prod_name_8 4 2 9 prod_name_9 5 2 10 prod_name_10 5 2

Что-то вроде

ALTER TABLE products
ADD COLUMN prod_cat_id_count INT GENERATED ALWAYS AS (COUNT(prod_cat_id) VIRTUAL;

Заранее благодарю за любую помощь

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
2
1
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

У вас есть два варианта выбраться из этой кроличьей норы:

  • создайте триггер AFTER INSERT, который проверяет, когда новая запись вставляется в вашу таблицу, и обновляет частоты (но синтаксис для этого решения очень зависит от СУБД)
  • создайте представление, которое лениво вычисляет ваши частоты (отличный вариант, если у вас очень частые операции вставки):
CREATE VIEW prod_frequencies AS 
SELECT prod_id,
       prod_name,
       prod_cat_id,
       COUNT(prod_name) OVER(PARTITION BY prod_cat_id) AS prod_cat_id_count
FROM tab;

Когда вам нужно показать обновленные частоты, это даст вам именно то, что вам нужно, учитывая, что ваша СУБД поддерживает оконные функции.

Я выбрал вариант 2, так как не был уверен в синтаксисе SQL для AFTER INSERT или для части ALTER TABLE. После смены вкладки; к продуктам он работал отлично. Большое спасибо.

BoggyB 06.06.2023 10:12

Здравствуйте @lemon, я заметил этот вопрос и ваше решение, создающее представление. Я создал триггер в Oracle без каких-либо ошибок, но когда я пытаюсь вставить никоим образом, триггер не работает и т. д. Я использую Oracle 21c и Sql Server 2019. Не могли бы вы создать его на сервере Oracle или Sql? Это то, что я сделал в Oracle CREATE OR REPLACE TRIGGER update_cate_trigger перед вкладкой INSERT ON FOR EACH ROW DECLARE l_cate NUMBER; BEGIN SELECT COUNT(*) INTO l_cate FROM вкладка WHERE cat_id = :NEW.cat_id; Вкладка ОБНОВЛЕНИЕ SET cate = l_cate WHERE prod_id = :NEW.prod_id; КОНЕЦ; /

Florin 08.06.2023 13:10

Создайте новый пост и свяжите этот пост как похожий по отношению к вашему текущему сценарию.

lemon 08.06.2023 13:11

@лимон хорошо, спасибо

Florin 08.06.2023 13:14

Другие вопросы по теме