#mysql #sql
#mysql #sql
Вопрос:
CREATE TABLE example
(
x INT,
y INT,
PRIMARY KEY (x, y));
Я пытаюсь добавить в эту таблицу новую строку с именем Z, которая вычисляет следующее:
(1 / count number of times value of x is in the row x) * 100
Как вы можете видеть на картинке, которую я предоставил, моя попытка сработала, но она не показала все 6 строк. Я пытаюсь показать все 6 строк и добавить Z в таблицу как сгенерированное поле
Ответ №1:
Вы можете сделать это с помощью запроса:
select e.*, 100.0 / count(*) over (partition by x) as z
from example e;
Оконные функции не допускаются в качестве сгенерированных столбцов. Вы можете поместить это в представление:
create view v_example as
select e.*, 100.0 / count(*) over (partition by x) as z
from example e;
Комментарии:
1. Есть ли способ генерировать ответы без десятичных знаков? например; 25 вместо 25.0000
2. Вы можете использовать
floor()
:floor(100 / count(*) over (partition by x)) as z
.