我是一种新的学习Microsoft SQL。所以我有这两个表
CREATE TABLE Char_item(
char_id VARCHAR(5) NOT NULL REFERENCES Character(char_id) ON DELETE
CASCADE ON UPDATE CASCADE,
item_id VARCHAR(5) NOT NULL REFERENCES Item(item_id) ON DELETE CASCADE ON
UPDATE CASCADE,
item_qty INTEGER NOT NULL CHECK(item_qty >= 0),
PRIMARY KEY(char_id, item_id)
);
CREATE TABLE Item(
item_id VARCHAR(5) NOT NULL UNIQUE,
item_name VARCHAR(20) NOT NULL UNIQUE,
item_desc VARCHAR(50) NOT NULL,
unit_price FLOAT NOT NULL,
armor_id VARCHAR(5) REFERENCES Armor(armor_id) ON DELETE CASCADE
ON UPDATE CASCADE,
weapon_id VARCHAR(5) REFERENCES Weapon(weapon_id) ON DELETE
CASCADE ON UPDATE CASCADE
);
char_item具有清单中每个项目的项目及其数量 而item表包含每项的unit_price。
我想创建一个存储过程,帮助我获得整个广告资源的总价格 使用SELECT item_id将一次性给我所有item_ids,这是我不想要的,因为我无法计算清单中找到的每个特定项目的总价格。
我正在考虑制作一个循环,但我有点陷入如何继续。
答案 0 :(得分:1)
这是非常基本的聚合。这样的事情应该是你想要的。当你开始思考循环......后退并重新思考,因为循环几乎总是不是你想要做的。
select TotalInventoryValue = SUM(ci.item_qty * i.unit_price)
from Item i
join Char_item ci on ci.item_id = i.item_id
答案 1 :(得分:1)
首先,你需要做一个叫做JOIN的事情。您需要将Char_Item表中的行与Item表中的相应行对齐,以便您可以同时获得数量和价格。
SELECT * FROM Item
JOIN Char_item ON Char_item.item_id = Item.item_id
这将产生一个结果集,其中包含Char_item和Item的所有列,用于给定的项ID。像这样:
|char_id|item_id|item_qty|item_id|item_name|item_desc|unit_price|armor_id|weapon_id|
当然,您不需要所有这些专栏。对于库存中的每个项目,您实际上只需要item_qty和unit_price:
SELECT Char_item.item_qty, Item.unit_price FROM Item
JOIN Char_item ON Char_item.item_id = Item.item_id
现在我们拥有了所需的所有数据。是时候努力计算我们想要的东西了。让我们先从每个项目中计算出该项目的总价值。
SELECT Char_item.item_qty * Item.unit_price FROM Item
JOIN Char_item ON Char_item.item_id = Item.item_id
我们更接近,但我们想要所有项目的价值,而不仅仅是所有蓝色衬衫的价值,所以我们想要聚合。我们可以做的最简单的聚合之一是SUM,这正是我们想要的。它将向下移动我们的行,并将每列添加到总计中。
SELECT SUM(Char_item.item_qty * Item.unit_price) FROM Item
JOIN Char_item ON Char_item.item_id = Item.item_id
如果我们只有一个字符,则此查询很有效。但是,如果我们有多个角色,则不会告诉我们角色广告资源的总价值。它告诉我们所有角色库存的总价值。我们应该缩小范围。
SELECT Char_item.char_id, SUM(Char_item.item_qty * Item.unit_price) FROM Item
JOIN Char_item ON Char_item.item_id = Item.item_id
GROUP BY Char_item.char_id
这个新查询告诉我们每个角色,他们拥有的库存总价值。如果你想看到每个人,你可以看看这个结果。但也许你只想要一个特定角色的库存。让我们说你感兴趣的角色是ID为5的角色。我们可以告诉它我们只想要角色5的库存物品
SELECT Char_item.char_id, SUM(Char_item.item_qty * Item.unit_price) FROM Item
JOIN Char_item ON Char_item.item_id = Item.item_id
WHERE Char_item.char_id = 5
GROUP BY Char_item.char_id
在这种情况下,由于只有一个char_id,我们不需要包含GROUP BY,所以你可以摆脱它,但我想包括GROUP BY示例以便你和#39;了解其运作方式。
SELECT Char_item.char_id, SUM(Char_item.item_qty * Item.unit_price) FROM Item
JOIN Char_item ON Char_item.item_id = Item.item_id
WHERE Char_item.char_id = 5
我建议运行这些不同的查询并探索它们产生的不同结果,以便了解您是否能够获得您期望的结果。