Die Abfrage und die Formel bilden die gesamte Tabelle mit neuen Spalten, wobei die neuen Spalten Formeln sind, die andere bedingte Spaltenwerte beinhalten
P粉178894235
P粉178894235 2024-04-06 21:23:40
0
2
845

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)
;

P粉178894235
P粉178894235

Antworte allen(2)
P粉302160436

在 mysql 5.7 中,您可以使用子查询来达到目的,视图似乎比新表更好,但由于选择是相等的,您可以选择

db小提琴此处 p>

P粉627027031
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 |
+----------+---------+-------+----------------+

这使用了窗口函数,意味着它需要 MySQL 8.0,这是自 2018 年以来 MySQL 的当前版本。


回复您的评论:使用类别中最低 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 |
+----------+---------+-------+----------------+
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage