BEARBEITEN: Die Formel sollte die Spalte ?Wert“ sein – die Spalte ?Wert“ mit der niedrigsten Benutzer-ID basierend auf der Kategorie.
Zeile 2 wird also 0,04 sein, weil die Spalte ?value“ der niedrigsten ?user_id“ für Kategorie ?A“ 0,01 ist.
Entschuldigung.
Ich m?chte alles aus der Tabelle abrufen und eine weitere Spalte hinzufügen, die Formeln enth?lt, die Informationen enthalten, die auf anderen Spalten basieren. Hier ist das Originalformular:
Kategorie | Benutzer-ID | Wert |
---|---|---|
eins | 1 | 0,01 |
eins | 2 | 0,05 |
B | 4 | 0,34 |
B | 7 | 0,27 |
Die neue Spalte muss der Mindestwert ?user_id“ der Spalte ?value“ jeder Zeile abzüglich der ?category“ sein . Für die zweite Zeile betr?gt der Wert also (0,05 – 1), da die Kategorie ?A“ ist und die niedrigste ?user_id“ von ?A“ 1 ist.
Es gibt noch viele weitere Zeilen und Spalten, dies ist nur ein Beispiel.
Welche Formel würde ich verwenden?
Das ist es, was ich bisher habe, nur um zu zeigen, dass ich in der Lage bin, neue Spalten zu erstellen, aber ohne die richtige Formel:
CREATE TABLE new_table AS (select * FROM table_1); ALTER TABLE new_table ADD COLUMN `new_column` DECIMAL(3,2) GENERATED ALWAYS AS (table_1.value-table_1.value) STORED; select * from new_table;
Das gibt mir natürlich die neue Spalte, aber bei 0 (weil sie sich selbst subtrahiert).
Was ist die richtige Formel?
Das ist die Architektur:
CREATE TABLE table_1 ( `category` VARCHAR(2), `user_id` INT(2), `value` DECIMAL(3,2) ); INSERT INTO table_1 (`category`, `user_id`, `value`) VALUES ('A', 1, 0.01), ('A', 2, 0.05), ('B', 4, 0.34), ('B', 7, 0.27) ;
在 mysql 5.7 中,您可以使用子查詢來達(dá)到目的,視圖似乎比新表更好,但由于選擇是相等的,您可以選擇
db小提琴此處 p>
mysql> create view new_table as select category, user_id, value, value - min(user_id) over (partition by category) as adjusted_value from table_1; mysql> select * from new_table; +----------+---------+-------+----------------+ | category | user_id | value | adjusted_value | +----------+---------+-------+----------------+ | A | 1 | 0.01 | -0.99 | | A | 2 | 0.05 | -0.95 | | B | 4 | 0.34 | -3.66 | | B | 7 | 0.27 | -3.73 | +----------+---------+-------+----------------+
這使用了窗口函數(shù),意味著它需要 MySQL 8.0,這是自 2018 年以來 MySQL 的當(dāng)前版本。
回復(fù)您的評論:使用類別中最低 user_id 中的 value
列:
mysql> create or replace view new_table as select category, user_id, value, value - first_value(value) over (partition by category order by user_id) as adjusted_value from table_1; mysql> select * from new_table; +----------+---------+-------+----------------+ | category | user_id | value | adjusted_value | +----------+---------+-------+----------------+ | A | 1 | 0.01 | 0.00 | | A | 2 | 0.05 | 0.04 | | B | 4 | 0.34 | 0.00 | | B | 7 | 0.27 | -0.07 | +----------+---------+-------+----------------+