У меня есть a small Facebook card game, где пользователи могут оценивать друг друга.Рассчитать коэффициент в одной таблице и сохранить его в другой таблице
Эти рейтинги хранятся в таблице pref_rep
PostgreSQL 8.4.13 как логическое значение nice
, которое может быть нулевым тоже:
# \d pref_rep;
Table "public.pref_rep"
Column | Type | Modifiers
-----------+-----------------------------+-----------------------------------------------------------
id | character varying(32) | not null
author | character varying(32) | not null
nice | boolean |
comment | character varying(256) |
rep_id | integer | not null default nextval('pref_rep_rep_id_seq'::regclass)
Indexes:
"pref_rep_pkey" PRIMARY KEY, btree (id, author)
Check constraints:
"pref_rep_check" CHECK (id::text <> author::text)
Foreign-key constraints:
"pref_rep_author_fkey" FOREIGN KEY (author) REFERENCES pref_users(id) ON DELETE CASCADE
"pref_rep_id_fkey" FOREIGN KEY (id) REFERENCES pref_users(id) ON DELETE CASCADE
Я хотел бы, чтобы эти рейтинги видны в виде круговой диаграммы на пользовательских аватаров :
Так что я пытаюсь следующий -
Первый Селе кар фактор (хороший/хороший + не приятно) от pref_rep
:
# select id,
(count(nullif(nice, false)) - count(nullif(nice, true)))/count(nice) as rating
from pref_rep
where nice is not null
group by id;
id | rating
-------------------------+--------
DE10072 | -1
DE10086 | 0
DE10087 | 1
DE10088 | -1
DE10095 | 0
DE10097 | 1
DE10105 | 0
Почему не это напечатать 0-к-1 число с плавающей здесь?
И тогда я пытаюсь сохранить этот фактор в pref_users
таблице - из соображений производительности я хочу сделать это каждую ночь cronjob:
# update pref_users u
set rating = s.rating
from (
select
id,
count(nullif(nice, false)) - count(nullif(nice, true))/count(nice) as rating
from pref_rep
where nice is not null
group by id
) s
where u.id = s.id;
UPDATE 25419
Это быстро завершает, но почему все rating
значения в pref_users
установлены в null?