背景

商品表 核心字段

product
(
drug_id  text -- 商品编码
amt numeric -- 销售额
product_type text -- 商品类别
)

大致遇到的需求是这样的,目前有一个商品表,需要查出不同商品相关统计信息比如:商品销售额

select sum(sales) from statistic_store_product_month group by type

商品销售额会可能通过前端传改变的值过来计算

处理方式

目前可选两种处理方式

  1. 查询出数据库集合在java内存中替换改变值然后在内存中计算
  2. 通过传入参数构建一个虚表关联 produce 表,用case when 处理

接口实现核心逻辑:

public CategoryStructureVO getStatisticStoreMonthStructure(CategoryPriceTargetDTO categoryPriceTargetDTO) {StringBuilder sql = new StringBuilder(" values('', 0, 0, 0, '') ");Map<String, StatisticStoreProductMonth> productMonthMap = categoryPriceTargetDTO.getStatisticStoreProductMonthMap();if ( productMonthMap!= null && productMonthMap.size() > 0 )productMonthMap.forEach((k, v) -> sql.append(" union all values('").append(k).append("',").append(v.getSales()).append(",").append(v.getAmt()).append(",").append(v.getGrossProfit()).append(",'").append(v.getProductType()).append("') "));}

不多说大致看sql

<select id="getProductStatistical" resultType="com.sinoxk.order.protocol.response.web.category.StatisticStoreProductMonthVO">select a.product_type as productType,sum(case when b.amt != 0 then b.amt else a.amt end) as amt,sum(case when b.gross_profit != 0 then b.gross_profit else a.gross_profit end) as grossProfit,sum(order_count) orderCountfrom statistic_store_product_month a left join(with store_mapping(drug_id, sales, amt, gross_profit, product_type) as (${sql}) select * from store_mapping) as b on a.drug_id = b.drug_idWHERE a.CUSTOMER_ID = #{customerId} and month = #{month}<if test="storeNos != null and storeNos.size > 0">AND store_no in<foreach collection="storeNos" item="item" separator="," open="(" close=")">#{item}</foreach></if>group by a.product_type</select>

postgresql构建虚表相关推荐

  1. PostgreSQL构建通用标签系统

    对资源打标签在建站过程中是很常见的需求,有些时候我们需要给文章打标签,有些时候我们需要给用户打标签.实现一个标签系统其实并不难,其本质就是一个多对多的关系-我可以对同一篇博客打多个标签,同时也可以把一 ...

  2. 使用 Hasura 和 PostgreSQL 构建后端技巧你会吗

    后端开发通常需要编写多行代码来处理 CRUD.授权和业务逻辑.所有这些代码都需要在项目的整个生命周期内进行测试.调试和维护.这需要开发人员可以用来开发新功能的大量时间.在本文中,您将了解 Hasura ...

  3. postgresql 远程用户_构建Python pandas基于SSH远程MySQL和PostgreSQL的数据分析

    背景知识视频教程 Python中使用Pandas教程 - 国外课栈​viadean.com Pandas数据分析与探索 - 国外课栈​viadean.com 如果您无法从外部环境直接访问数据库,则可能 ...

  4. 基类成员的public访问权限在派生类中变为_第17篇:C++继承中虚表的内存布局

    我们已经表明,非虚类的对象实例不包含虚指针,编译器在编译阶段也没有为非虚类没有构建虚表.而本篇我们会从简单的单继承链分析虚类中虚表构造过程和内存布局.这一切假定你有如下基础 对gdb调试器使用有一个比 ...

  5. 将PostgreSQL数据库扩展到每个月12亿条记录的经验教训

    这不是我第一次使用大型数据集.我为最大的英国公共Wi-Fi供应商设计的认证和产品管理数据库也有巨大的容量.我们每天跟踪数百万设备的身份认证.然而,该项目有资金,允许我们选择任何硬件.任何支持服务以及聘 ...

  6. 直接在 DNA 上执行 SQL 操作,已通过 PostgreSQL 验证

    法国通信系统工程师学校与研究中心(Eurecom)数据科学系助理教授 Appuswamy 和伦敦帝国理工学院 SCALE 实验室负责人 Heinis 等人近期发表了一篇关于在 DBMS 存储层操作 D ...

  7. 京东云PostgreSQL在GIS场景的应用分享

    作者:曲艺伟/彭智 在地图或地理信息有关的场景里 ,地址关键词的检索尤其重要.比如打开百度地图,想要查询某个位置的信息"北京市海淀区清华东路17号中国农业大学",往往我们输入的是关 ...

  8. 【数据库】什么是 PostgreSQL?开源数据库系统

    文章目录 前言 什么是 PostgreSQL? PostgreSQL 中的 SQL 服务器管理 接口 PostgreSQL 用途 通用 OLTP: 联合中心: 地理空间: LAPP 堆栈: 使用 Po ...

  9. PostgreSQL vs MySQL——哪种关系数据库更好?

    PostgreSQL和MySQL是世界上最流行的两种关系数据库管理系统(RDMS).包括商业企业和开源基金会在内的所有市场人口都在使用它们.它们的共同点是强大的网络容错能力和对数据聚类的支持.这篇文章 ...

最新文章

  1. 拉普拉斯平滑处理 Laplace Smoothing
  2. c++builder Delphi 直接使用剪贴板 Clipboard
  3. linux简单设计与实现代码,《linux内核设计与实现》第五章(示例代码)
  4. 程序员,35岁就可能被替换的职业,遇到好的领导多么重要
  5. apache httpclient 工具类_使用HttpClient进行服务的远程调用
  6. 怎么理解汉罗塔问题_小白理解的汉诺塔中的递归问题
  7. linux中删除文件命令
  8. 使用ViewSwitcher模拟手机屏幕应用分屏和切换
  9. layui table reload post请求_基于Layui组件封装的后台模版
  10. 前端开发的模块化和组件化的定义,以及两者的关系?
  11. spring5.0学习笔记4
  12. linux中kvm配置文件,linux操作系统内配置vlan+kvm虚拟机
  13. jsBarCode生成条码并且打印的问题
  14. PHP强大自适应OA协同办公系统源码 含CRM客户管理系统+内部聊天工具
  15. 【Trailhead题目解析】Prepare your salesforce org for users - 2Update the Exchange Rate with ACM
  16. 突破软件测试的瓶颈(上)
  17. TYPE-C引脚对照图表
  18. 西安电子科技大学c语言答案,西安电子科技大学2021春 面向对象程序设计(C++)大作业答案...
  19. == 和 ===的区别
  20. 二见钟情之ComboBox显示查询结果集

热门文章

  1. 敬畏自然,AIoT 智能「防汛云喇叭」 硬核喊话--山洪无情,科技有爱
  2. QMutex 的使用
  3. 服务器sql消息18456,MSSQLSERVER_18456
  4. Java中找不到符号是啥意思,什么会导致Java中找不到符号错误?
  5. 2022英特尔® FPGA中国技术周
  6. orb-slam2回环检测3
  7. game游戏学习网站
  8. 微服务之注册中心Nacos
  9. UVA 10003 Cutting Sticks
  10. 面向对象思想实现图书管理系统