我有以下情况要解决。我有一个包含产品信息的表A,我有一个表B,其中包含客户购买历史记录。现在我需要计算一个新的列" Sum_product_X
"购买频率的总和与每个ClientID
的产品价值。因此,在这种情况下,我们知道客户已经购买Product A
5次,因此我们需要在sum_producta
列中计算5 * 5$
Table A (Product Price Table)
----------------------------
ProductA | ProductB | ProductC
5$ | 10$ | 15$
Table B (Client purchase history)
-----------------------
ClientID | Frequency_ProductA |Frequency_ProductB | Sum_ProductA | Sum_ProductB
Abc123 | 5 | 10 | to be calculated: 5*5 | to be calculated 10*10
我需要补充一点,我发现环境的SQL支持有以下规则:
仅对帐户中的数据扩展或数据视图的SELECT语句 或在父帐户嵌套查询UNION JOIN GROUP BY
表A可以修改。意思是结构可以如下:
Table A
-----------------------
Productname | Price
product A | 5
product B | 10
product C | 15

答案 0 :(得分:1)
在传统的关系数据库中,它都是关于规范化的。换句话说,你应该只有一个权威来源。通过创建新列,您将拥有多个“正确数据”源。例如,如果频率增加,并且您的代码忘记更新列,那么谁说现在哪个值正确?
建议,让RDBMS执行work for you with a VIEW。您当前的架构需要更好地规范化以利用这一点;我将在下面解决这个问题。
CREATE VIEW product_sales AS
SELECT
tabA.product_name,
tabA.product_price,
tabB.clientID,
tabC.frequency,
tabA.product_price * tabC.count AS sum_product_x
FROM
tableA AS tabA,
tableB AS tabB,
tableC AS tabC
WHERE
tabA.product_id = tabC.product_id
AND tabB.clientID = tabC.client_id;
现在,在您的查询中,您将VIEW视为另一个用于SELECT的目的:
SELECT * FROM product_sales ORDER BY 5 DESC, 1 ASC LIMIT 5;
不幸的是,您当前的设计似乎每个产品都有一列。这通常是禁忌。您是否要为每个新产品添加一列?我当然希望不是。相反,将数据规范化为单独的表,并与主键和外键链接:
CREATE TABLE products (
product_id CHAR(5) PRIMARY KEY,
product_name VARCHAR(32) NOT NULL,
product_price INTEGER NOT NULL
);
CREATE TABLE clients (
client_id VARCHAR(8) PRIMARY KEY,
client_name VARCHAR(32) NOT NULL,
);
CREATE TABLE client_purchaces (
client_id VARCHAR(8) NOT NULL,
product_id CHAR(5) NOT NULL,
count INTEGER NOT NULL,
FOREIGN KEY (client_id) REFERENCES clients(client_id),
FOREIGN KEY (client_id) REFERENCES products(product_id),
CONSTRAINT CHECK (count >= 0)
);
使用此结构,当新产品进入时,您只需添加一行(INSERT INTO products ...
),而不是更改架构(ALTER TABLE ...
)。此外,当客户进行购买时,您只需插入或更新单个整数,而不是覆盖行或更改架构。此外,通过更加规范化的设计,您可以让数据库为您完成工作(例如,CREATE VIEW ...
)
答案 1 :(得分:0)
如果您不想/不能重新设计表格,可以尝试一下:
UPDATE table_b
SET SUM_ProductA = (Frequency_Product_A * (SELECT ProductA FROM table_a)),
SUM_ProductB = (Frequency_Product_B * (SELECT ProductB FROM table_a)),
SUM_ProductC = (Frequency_Product_C * (SELECT ProductC FROM table_a))
否则我真的推荐@hunteke的答案!!!!!! (我在评论中也提到了这一点)
答案 2 :(得分:0)
您可以尝试
<script>
function submitForm(id){
if (id === 1)
document.getElementById("myForm").target = "URL1";
else
document.getElementById("myForm").target = "URL2";
document.getElementById("myForm").submit();
}
</script>
计算Sum_ProductA和Sum_ProductB的列。
然而,它假设产品是表A的关键