weixin_49716251 2024-07-17 11:20 采纳率: 42.9%
浏览 2
已结题

oracle 数据统计

分类表
|产品名称 | 代码 |
| ------ | ------ |
| 水果 | 01 |
| 电器 | 02 |
| 五金 | 03 |
| 文具 | 04 |

地区表
| 地区名称 | 代码 |
| ------ | ------ |
| 江苏 | 01 |
| 贵州 | 02 |
| 北京| 03 |
|天津 | 04 |
| 河南 | 05 |

明细表

订单编号物品物品代码地区地区代码购买数量
111水果01江苏011
112文具04贵州022
113电器02北京033
114文具04北京031
115水果01河南055
116五金03贵州026
。。。。。。。。。。。。

|
根据以上几张表我想统计以下格式数据,请问sql怎么写

地区分类购买次数购买数量
江苏水果11
江苏电器00
江苏五金00
江苏文具00
贵州水果11
贵州电器00
贵州五金16
贵州文具12
。。。。。。。。
  • 写回答

4条回答 默认 最新

  • 阿里嘎多学长 2024-07-17 11:20
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    要实现你的需求,可以通过编写一个 SQL 查询来统计每个地区和每个分类的购买次数和购买数量。以下是实现这一需求的 SQL 代码示例:

    SELECT
      d.地区名称 AS 地区,
      p.产品名称 AS 分类,
      COUNT(*) AS 购买次数,
      SUM(明细表.购买数量) AS 购买数量
    FROM
      明细表
      JOIN 地区表 d ON 明细表.地区代码 = d.代码
      JOIN 分类表 p ON 明细表.物品代码 = p.代码
    GROUP BY
      d.地区名称, p.产品名称
    UNION ALL
    SELECT
      地区名称,
      产品名称,
      0 AS 购买次数,
      0 AS 购买数量
    FROM
      地区表
      CROSS JOIN
      分类表
    WHERE
      地区名称 NOT IN (SELECT DISTINCT 地区名称 FROM 明细表)
       OR 产品名称 NOT IN (SELECT DISTINCT 产品名称 FROM 明细表)
    ORDER BY
      地区名称, 产品名称;
    

    解释:

    1. 内层查询

      • 通过 JOIN 将明细表与地区表和分类表连接。
      • 使用 GROUP BY 对每个地区和每个分类进行分组,并计算每个组的购买次数和购买数量。
    2. 外层查询

      • 使用 UNION ALL 将内层查询的结果与一个额外的查询结果合并。
      • 额外的查询用于生成那些在明细表中没有记录的地区和分类组合。
      • 使用 CROSS JOIN 将地区表和分类表进行笛卡尔积,生成所有可能的组合。
      • 使用 WHERE 子句排除那些在明细表中已经有记录的地区和分类组合。
    3. 排序

      • 最后使用 ORDER BY 对结果进行排序,首先按地区名称排序,其次按产品名称排序。

    这样,你将得到一个完整的统计表,显示每个地区和每个分类的购买次数和购买数量。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 8月8日
  • 已采纳回答 8月8日
  • 创建了问题 7月17日

悬赏问题

  • ¥50 AI大模型精调(百度千帆、飞浆)
  • ¥15 关于#c语言#的问题:我在vscode和codeblocks中编写c语言时出现打不开源文件该怎么办
  • ¥15 非科班怎么跑代码?如何导数据和调参
  • ¥15 福州市的全人群死因监测点死亡原因报表
  • ¥15 Altair EDEM中生成一个颗粒,并且各个方向没有初始速度
  • ¥15 系统2008r2 装机配置推荐一下
  • ¥500 服务器搭建cisco AnyConnect vpn
  • ¥15 悬赏Python-playwright部署在centos7上
  • ¥15 psoc creator软件有没有人能远程安装啊
  • ¥15 快速扫描算法求解Eikonal方程咨询