我有以下表格:
Table users
id name base_discount
1 jack 10
2 michael 20
3 richard 30
Table item
id name category_id price
1 hammer 1 10
2 knife 2 15
3 spoon 2 12
4 plate 3 20
5 tree 4 400
Table category
id name
1 tools
2 kitchen
3 dishes
4 garden
Table discount_category
id user_id category_id discount
1 1 1 20
2 1 3 25
3 3 3 10
4 1 2 15
Table discount_item
id user_id item_id discount
1 2 1 50
2 1 2 50
现在我想要实现的目标。我想将用户拥有的每件商品的折扣附加到正确的商品上。如果那不可用(NULL)我想附加用户拥有的每个类别的折扣。如果那不可用(NULL),我想附加用户拥有的基本折扣。然后我用折扣计算物品的新价格。但是,当我尝试在SUM()中使用COALESCE()时,我收到语法错误。我做错了什么?
以下是我当前的查询:
SELECT item.id, item.name, category.id,
category.name AS category_name, item.price, SUM((100 -
COALESCE(
(
SELECT discount_item.discount
FROM discount_item
INNER JOIN users ON discount_item.user_id = users.id
WHERE users.id = '1' AND discount_item.item_id = item.id
),
(
SELECT discount_category.discount
FROM discount_category
INNER JOIN users ON discount_category.user_id = users.id
WHERE users.id = '1' AND discount_category.category_id = item.category_id
),
(
SELECT users.base_discount
FROM users
WHERE users.id = '1'
)
)) / 100 * item.price) AS new_price,
FROM item
INNER JOIN category ON item.category_id = category.id;
另请参阅以下链接以获取SQL小提琴(无法在sqlfiddle.com上执行此操作,因为它无法加载)。在示例中,我为每个表名添加了后缀。 http://rextester.com/LCCKSD59098
答案 0 :(得分:1)
new_price
之后和FROM ITEM
之前有一个额外的逗号,因此错误。
如果您没有在group by中使用它们,请不要在select中选择其他列,因为在其他关系型RDBMS中,您将收到错误。
同时使用alias
表格名称可以更好地阅读并避免混淆。