Hei guy我正在使用MySQL的POS应用程序。这是我的情况:
表“purchase_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 |
我想知道有多少支票的总数大于或等于(> =)1000,所以我现在要做的是多次查询。在这个例子中,我做5次并由主程序手动求和。
后来数据增长,查询变得缓慢,因为每天都有大量的检查。所以我改为将其录制到另一张桌子。
表“检查”
| id | total | sales |
| 0001 | 598 | A |
| 0002 | 599 | A |
| 0003 | 1497 | B |
| 0004 | 498 | B |
| 0005 | 1000 | A |
但是后来出现了另一个问题:当我需要调整“purchase_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
答案 0 :(得分:0)
以这种方式试试
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;
示例输出:
| TOTAL | |-------| | 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 演示