嗨,我正在使用MySQL开发POS应用程序。这是我的情况:
表“ purchased_item”
| id | name | check_id | real_price |
| 1 | iPhone5 | 0001 | 399 |
| 2 | iPhone4 | 0001 | 199 |
| 3 | iPhone5s | 0002 | 599 |
| 4 | iPhone5c | 0003 | 399 |
| 5 | iMac 21" | 0003 | 999 |
| 6 | iPod Touch | 0003 | 99 |
| 7 | iPhone5 | 0004 | 399 |
| 8 | iPhone3G | 0004 | 99 |
| 9 | iPhone6 | 0005 | 899 |
| 10 | iPhone3Gs | 0005 | 101 |
而且我想知道有多少张支票的总数大于或等于qual(> =)1000,所以我现在要做的是多次查询。在此示例中,我做了5次并由主机程序手动求和。
后来数据增长了,查询变得缓慢了,因为每天要进行大量检查。因此,我更改为将其记录到另一个表中。
表“检查”
| id | total | sales |
| 0001 | 598 | A |
| 0002 | 599 | A |
| 0003 | 1497 | B |
| 0004 | 498 | B |
| 0005 | 1000 | A |
但是,以后还会出现另一个问题:当我需要调整“ purchased_item”表中的real_price时,我还需要维护“ checks”表中的“ total”列。听起来没什么大不了,但我想找到一种更好的方法来解决它。
解决了:
SELECT * FROM purchased_item
GROUP BY check_id
HAVING sum(real_price) >= 1000
结果将是:
| id | name | check_id | real_price |
| 4 | iPhone5c | 0003 | 399 |
| 9 | iPhone6 | 0005 | 899 |
进一步的问题:如果我想计算支票的总价,该怎么办?我找到了:
SELECT check_id,sum(real_price) FROM purchased_item
GROUP BY check_id
HAVING sum(real_price) >= 1000
这样尝试
SELECT i.id, i.name, i.check_id, i.real_price
FROM
(
SELECT MIN(id) id
FROM purchased_item
GROUP BY check_id
HAVING SUM(real_price) >= 1000
) q JOIN purchased_item i
ON q.id = i.id
ORDER BY q.id DESC
样本输出:
| ID | NAME | CHECK_ID | REAL_PRICE | | ---- | ------------ | ---------- || ------------ | | 9 | iPhone6 | 5 | 899 | | 4 | iPhone5c | 3 | 399 |
...我想算出总数超过1000张的支票
为此,您可以这样做
SELECT COUNT(*) total
FROM
(
SELECT check_id
FROM purchased_item
GROUP BY check_id
HAVING SUM(real_price) >= 1000
) q;
样本输出:
| 总计| | ------- | | 2 |
这是SQLFiddle演示
要更新total
在checks
调整后real_price
的purchased_item
UPDATE checks c JOIN
(
SELECT check_id, SUM(real_price) total
FROM purchased_item
WHERE check_id IN(5) -- whatever check(s)'s total you want to recalculate
GROUP BY check_id
) p
ON c.id = p.check_id
SET c.total = p.total;
这是SQLFiddle演示
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句