POS应用程序-简化SQL多重查询(MySQL)

威尔逊·鲁尼兹(Wilson Luniz)

嗨,我正在使用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演示


要更新totalchecks调整后real_pricepurchased_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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Java Web应用程序因MySQL查询缓慢而停滞

通常,在应用程序中的何处放置SQL查询?

通用应用程序的MySQL Connection的哪个程序集

执行查询时继续使用Laravel应用程序

在Flask应用程序中使用服务进行查询

从HealthKit查询心率值崩溃的应用程序

从C ++应用程序查询堆

拦截并更改由应用程序生成的SQL查询

Azure Logic应用程序查询应用程序见解返回的代码不是HTML

Java / MySQL应用程序中的NullPointerException

在WPF应用程序的DataGrid中显示SQL查询的结果

如何将本机SQL查询转换为Java应用程序的JPA查询

将POS应用程序与VeriFone终端集成

WCF服务应用程序中的SQL

促进Java应用程序中的SQL表查询功能

与MySQL连接的Java应用程序失效

需要SQL查询才能获得测验应用程序

Java / MySQL调度程序,Web应用程序和独立应用程序的提醒

难于查询类似应用程序的论坛的sql

SQL查询:按月,县和程序分类的应用程序数

我需要哪种MySQL配置来简化Web应用程序的负载平衡?

Azure中的ASP.NET MVC应用程序以及MySQL应用程序内

NPM应用程序中捆绑的MySQL

如何在共享代码的同时使用每个应用程序的不同配置来管理多重反应本机应用程序?

我的应用程序在 pos 设备上停止工作

vert.x 应用程序中的多重测试

azure 移动应用程序查询,如 sql 语句

Angular 10 应用程序的 XPATH 查询

烧瓶应用程序将sql查询转换为python