26 lines
1.6 KiB
MySQL
26 lines
1.6 KiB
MySQL
|
|
-- ========= АГРЕГИРОВАННЫЕ ПОКАЗАТЕЛИ NPS ПО ДОМУ И ПЕРИОДУ =========
|
||
|
|
-- Сохранение цифр NPS (score, кол-во ответов, промоутеры и т.д.) для отчетов
|
||
|
|
|
||
|
|
CREATE TABLE IF NOT EXISTS nps_building_stats (
|
||
|
|
id BIGSERIAL PRIMARY KEY,
|
||
|
|
building_id VARCHAR(50) NOT NULL REFERENCES buildings(id) ON DELETE CASCADE,
|
||
|
|
period_start DATE NOT NULL,
|
||
|
|
period_end DATE NOT NULL,
|
||
|
|
total_responses INTEGER NOT NULL DEFAULT 0,
|
||
|
|
nps_score INTEGER NOT NULL DEFAULT 0, -- NPS = % промоутеров - % критиков
|
||
|
|
avg_score NUMERIC(4,2) NOT NULL DEFAULT 0, -- средняя оценка 0-10
|
||
|
|
promoters INTEGER NOT NULL DEFAULT 0, -- оценка 9-10
|
||
|
|
passives INTEGER NOT NULL DEFAULT 0, -- оценка 7-8
|
||
|
|
detractors INTEGER NOT NULL DEFAULT 0, -- оценка 0-6
|
||
|
|
promoter_percent NUMERIC(5,2) DEFAULT 0,
|
||
|
|
detractor_percent NUMERIC(5,2) DEFAULT 0,
|
||
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||
|
|
UNIQUE(building_id, period_start, period_end)
|
||
|
|
);
|
||
|
|
|
||
|
|
CREATE INDEX IF NOT EXISTS idx_nps_building_stats_building ON nps_building_stats(building_id);
|
||
|
|
CREATE INDEX IF NOT EXISTS idx_nps_building_stats_period ON nps_building_stats(period_start, period_end);
|
||
|
|
|
||
|
|
COMMENT ON TABLE nps_building_stats IS 'Агрегированные показатели NPS по дому за период (для отчетов жителям)';
|