Я хотел бы создать ограничение, которое проверяет, является ли значение (из столбца «номинальная_значение»), классифицированное как «минимальное» в столбце «stats_type», равным или меньшим чем значение, классифицированное как «среднее», когда все значения в других столбцах равны. Другими словами, учитывая соответствующие кортежи, за исключением столбцов «oid», «stats_type» и «nominal_value», я хотел бы удостовериться, что значение «минимум» всегда равно или меньше значения, обозначенного как «среднее».Ограничение значений с разными метками, когда все остальные столбцы равны
Это трудно объяснить, так что я сделал пример ниже:
CREATE TABLE price (
oid SERIAL NOT NULL,
product INTEGER NOT NULL,
territory INTEGER NOT NULL,
stats_type INTEGER NOT NULL,
year INTEGER NOT NULL,
nominal_value NUMERIC(6,2) NOT NULL,
data_source INTEGER NOT NULL,
CONSTRAINT pk_price PRIMARY KEY (oid),
CONSTRAINT price_1 UNIQUE (product, territory, stats_type, year, data_source),
CONSTRAINT price_2 CHECK (nominal_value > 0)
);
INSERT INTO price (oid, product, territory, stats_type, year, nominal_value, data_source) VALUES (1, 55, 5611, 1, 2014, 120, 3);
INSERT INTO price (oid, product, territory, stats_type, year, nominal_value, data_source) VALUES (2, 55, 5611, 2, 2014, 160, 3);
INSERT INTO price (oid, product, territory, stats_type, year, nominal_value, data_source) VALUES (3, 55, 5615, 1, 2014, 60, 3);
INSERT INTO price (oid, product, territory, stats_type, year, nominal_value, data_source) VALUES (4, 55, 5611, 3, 2014, 180, 3);
INSERT INTO price (oid, product, territory, stats_type, year, nominal_value, data_source) VALUES (5, 62, 5615, 1, 2013, 1500, 3);
INSERT INTO price (oid, product, territory, stats_type, year, nominal_value, data_source) VALUES (6, 62, 5615, 2, 2013, 1300, 3);
В '' stats_type метки: 1 = минимальное, 2 = средний, 3 = максимум.
Глядя на первые две строки; они равны, за исключением «oid», «stats_type» и «номинальная_значение»; поэтому я хотел бы проверить: это 120 (что помечено как минимум в первой строке) меньше или равно 160 (значение, обозначенное как среднее)? В этом случае ответ «да», поэтому он прошел проверку.
Теперь последние две строки (5 и 6) также имеют соответствие по продуктам столбцов, 'территории', 'года' и 'data_source'. Однако бывает, что номинальное значение 1500 в строке 5 не должно быть меньше 1300 в строке 6 (поскольку 1500 должно было быть минимальным, а 1300 - средним значением).
Как я могу это сделать? Можно ли выполнить эту задачу, используя ограничение 'check'?
_I можно ли выполнить эту задачу, используя ограничение 'check'? _ No –