• 查询订单总量的前10名


    公司的销售相关的两个表:

    table1 (Name, OrdersID)
            王二  81,67,90,88
            张三  82,35,50
    table2 (OrderId, Sum)
            81  100
            67  200
            82  123
    

    表一连结表二,表一中的订单ID是用逗号连接的。求订单总量的前10名?

    • 一轮明月照丘壑 2024-09-10 22:20
      关注

      以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

      由于表一中的订单ID是以逗号连接的形式存储的,因此不能直接查询订单总量的前10名。我们需要先将表一中的订单ID字段进行拆分,并与表二关联起来计算每个客户的订单总和。接下来可以按照订单总量进行排序并获取前10名。下面是一种可能的处理方式(以SQL为例):

      假设我们的表结构如上所示,可以根据以下步骤来进行查询:

      步骤一:将表一中的订单ID字段拆分并创建为一个临时表。由于具体的数据库类型和版本可能存在差异,拆分的具体实现方式也会有所不同。假设表一的名称是orders_info,拆分后的临时表假设为orders_split。具体的拆分SQL语句依赖于你所使用的数据库系统(如MySQL、SQL Server等)。以下是使用MySQL进行拆分的示例代码:

      CREATE TEMPORARY TABLE orders_split AS (
        SELECT Name, SUBSTRING_INDEX(SUBSTRING_INDEX(OrdersID, ',', numbers.n), ',', -1) AS OrderId
        FROM orders_info
        JOIN (SELECT 1 n UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4) numbers ON CHAR_LENGTH(OrdersID) 
         -CHAR_LENGTH(REPLACE(OrdersID, ',', '')) >= numbers.n-1;
      );
      

      此段代码首先使用内联子查询创建了一个数字表(从数字表中选择具体的数字个数,根据实际情况而定),然后根据这个临时表来拆分订单ID字段。每个OrderID以逗号分隔生成新的行记录,并保留对应的客户名称。这个临时表orders_split将会包含拆分后的订单ID和客户名称。

      步骤二:将临时表orders_split与表二orders_sum关联起来计算每个客户的订单总和,并按订单总量进行排序和筛选前10名。以下是相应的SQL查询语句:

      SELECT os.Name, COUNT(os.OrderId) AS TotalOrders
      FROM orders_split os
      JOIN orders_sum on os.OrderId = orders_sum.OrderId
      GROUP BY os.Name
      ORDER BY TotalOrders DESC
      LIMIT 10;
      

      这个查询将返回订单总量排名前10的客户名称和对应的订单数量。请注意,以上SQL语句仅为示例,具体实现可能需要根据你的数据库系统和表结构进行调整。如果你的数据库不支持临时表的创建或字符串拆分功能,可能需要采用其他方法来实现类似的功能。

      展开全部

      cysx009 2024-09-12 14:00

      能用sql server实现吗?最好不用临时表

      回复
    • 相关阅读:
      debian10编译安装mysql
      ES-全称ECMAScript--脚本语言的规范
      102. 二叉树的层序遍历
      场景:有一个字符串,利用这个字符串生成二维码时,发现字符串越长,生成的二维码越密集,比较难识别
      MySQL数据库JDBC编程
      针对FTP的SSRF攻击
      7.动态SQL
      计算机毕业设计Java校园疫情信息管理系统(源码+系统+mysql数据库+Lw文档)
      微信小程序-页面导航-导航传参
      MySQL高级_索引的数据结构
    • 原文地址:https://ask.csdn.net/questions/8142984