【发布时间】:2012-06-11 14:14:15
【问题描述】:
我已经花了很长时间试图为我得到的这个 SUM 查询找到一个解决方案:
SELECT o.id, o.ordernr, o.datetime, o.status, CONVERT(ROUND(o.shipping,2), CHAR(8)) AS shippingcosts,
u.id AS uid, u.name, u.surname, u.address, u.number, u.zipcode, u.country, u.email,
GROUP_CONCAT(CONVERT(op.amount, CHAR(8))) AS amount,
GROUP_CONCAT(CONVERT(ROUND(op.pprice,2), CHAR(8))) AS pprice,
IF(
u.country!= 'NL',
ROUND(SUM(
CASE
WHEN op.discount > 0 THEN ((op.amount * op.pprice) - ((op.amount * op.pprice) * (op.discount/100)))
WHEN op.discountf > 0 THEN ((op.amount * op.pprice) - ((op.amount * op.pprice) * (op.discountf/100)))
WHEN op.discountf = 0 && op.discount = 0 THEN (op.amount * op.pprice)
END
) + o.shipping,2),
ROUND((SUM(
CASE
WHEN op.discount > 0 THEN ((op.amount * op.pprice) - ((op.amount * op.pprice) * (op.discount/100)))
WHEN op.discountf > 0 THEN ((op.amount * op.pprice) - ((op.amount * op.pprice) * (op.discountf/100)))
WHEN op.discountf = 0 && op.discount = 0 THEN ((op.amount * op.pprice)*1.19)
END
)*1.19) + o.shipping,2)
) AS total,
GROUP_CONCAT(CONVERT(p.id, CHAR(8))) AS pid,
SUM(p.weight) AS weight,
FROM orders AS o
INNER JOIN users AS u ON o.uid = u.id
INNER JOIN order_products AS op ON op.oid = o.id
INNER JOIN products AS p ON op.pid = p.id
GROUP BY o.id
如果 op.discount 不为 null 或 op.discountf 不为 null 并且对于 op.discount 和 op.discountf 都为 null 的每一行,我想要实现的是获取每一行的总和。 .
此时似乎 mysql 正在对所有总数求和..??
有人可以帮帮我吗?
提前感谢(很多)
【问题讨论】:
-
o.uid = u.id 是否代表数据库中的唯一行?是什么让 IF ELSE 和 CASE 结构看起来是一个独特的个体?
-
嗨 Hituptony! o.uid = u.id 有多行(即我有多个 order_products 行加入到 o.uid 等于 u.id 的用户表上)这是否回答了您的问题?
-
在我回答之前,您为什么要将数量转换为字符?
-
这是修复 xhr 请求的临时解决方案(它会在大约 300 个字符处截断结果),你为什么要问?