sql语句统计求和两种 写的方式

第一种:

SELECT t1.name , 
 (select COUNT(*) from ysl_order where TYPE ='YSL_TEACHING_ROUNDS' and t1.id = hospital_id)  as jxcfTj,
 (select COUNT(*) from ysl_order where TYPE ='YSL_COMMON_CLINIC' and t1.id = hospital_id)    as pthzTj,
 (select COUNT(*) from ysl_order where TYPE ='YSL_MULTI_DISCIPLINE' and t1.id = hospital_id) as dxkhzTj,
 (select COUNT(*) from ysl_order where TYPE ='YSL_OUTPATIENT' and t1.id = hospital_id)       as mzTj,
 (select COUNT(*) from ysl_order where TYPE ='YSL_OPERATION' and t1.id = hospital_id)        as ssTj,
 (select COUNT(*) from ysl_order where TYPE ='YSL_MEDICAL_TRAINING' and t1.id = hospital_id) as ylpxTj,
 (select COUNT(*) from ysl_order where TYPE ='YSL_WORK_SHOP' and t1.id = hospital_id)        as xshyTj,
 (select COUNT(*) from ysl_order where TYPE ='YSL_MADE_TO_ORDER' and t1.id = hospital_id)    as zdrwTj
FROM ysl_hospital t1 LEFT JOIN ysl_order t2 on t1.id = t2.hospital_id 
<where>
<if test="hospitalName != null and hospitalName != ''">
AND t1.`NAME` like '%${hospitalName}%'
</if>
<if test="timeBegin != null and timeBegin != ''">
AND t2.ORDER_DATE &gt;= #{timeBegin}
</if>
<if test="timeEnd != null and timeEnd != ''">
AND  t2.ORDER_DATE &lt;= #{timeEnd}
</if>
</where>
GROUP BY t1.id




第二种:

 SELECT t1.USER_NAME,
       IFNULL(t2.YSL_MEDICAL_TRAINING, 0) as YSL_MEDICAL_TRAINING,
       IFNULL(t2.YSL_MULTI_DISCIPLINE, 0) as YSL_MULTI_DISCIPLINE,
       IFNULL(t2.YSL_WORK_SHOP, 0) as YSL_WORK_SHOP,
       IFNULL(t2.YSL_MADE_TO_ORDER, 0) as YSL_MADE_TO_ORDER,
       IFNULL(t2.YSL_OPERATION, 0) as YSL_OPERATION,
       IFNULL(t2.YSL_TEACHING_ROUNDS, 0) as YSL_TEACHING_ROUNDS,
       IFNULL(t2.YSL_COMMON_CLINIC, 0) as YSL_COMMON_CLINIC,
       IFNULL(t2.YSL_OUTPATIENT, 0) as YSL_OUTPATIENT,
       IFNULL(t2.total_cnt, 0) as total_cnt
 FROM ysl_doctor t1
 LEFT JOIN (SELECT t11.DOCTOR_ID,
                   sum(IF(t12.TYPE = 'YSL_MEDICAL_TRAINING', 1, 0)) AS YSL_MEDICAL_TRAINING,
                   sum(IF(t12.TYPE = 'YSL_MULTI_DISCIPLINE', 1, 0)) AS YSL_MULTI_DISCIPLINE,
                   sum(IF(t12.TYPE = 'YSL_WORK_SHOP', 1, 0)) AS YSL_WORK_SHOP,
                   sum(IF(t12.TYPE = 'YSL_MADE_TO_ORDER', 1, 0)) AS YSL_MADE_TO_ORDER,
                   sum(IF(t12.TYPE = 'YSL_OPERATION', 1, 0)) AS YSL_OPERATION,
                   sum(IF(t12.TYPE = 'YSL_TEACHING_ROUNDS', 1, 0)) AS YSL_TEACHING_ROUNDS,
                   sum(IF(t12.TYPE = 'YSL_COMMON_CLINIC', 1, 0)) AS YSL_COMMON_CLINIC,
                   sum(IF(t12.TYPE = 'YSL_OUTPATIENT', 1, 0)) AS YSL_OUTPATIENT,
                   count(1) AS total_cnt
              FROM ysl_doctor_Order t11
             INNER JOIN ysl_order t12
                ON t11.ORDER_ID = t12.id
             WHERE t11. STATUS = '80'
              <if test="timeBegin != null and timeBegin != ''">
               AND t11.ACCEPT_TIME &gt;= #{timeBegin}
             </if>
             <if test="timeEnd != null and timeEnd != ''">
               AND t11.ACCEPT_TIME &lt;= #{timeEnd}
             </if>
             GROUP BY t11.DOCTOR_ID) t2
   ON t1.id = t2.DOCTOR_ID
   <where>
    <if test="hospitalName != null and hospitalName != ''">
    AND t1.USER_NAME LIKE '%${hospitalName}%'
    </if>
   </where>

/*********************************************************************************************************************************************************/

 SELECT T11.ID AS HOSPITAL_ID,
       T11.NAME AS HOSPITAL_NAME,
       T12. TYPE_VAL,
       IFNULL(T12.MONEY, 0) AS MONEY,
       IFNULL(T12.ASSING_MONEY, 0) AS ASSING_MONEY,
       IFNULL(T12.REQUIRE_NUM, 0) AS REQUIRE_NUM,
       IFNULL(T12.SIGN_NUM, 0) AS SIGN_NUM,
       IFNULL(T12.AVG_MONEY, 0) AS MONEY
    FROM YSL_HOSPITAL T11
  LEFT JOIN (SELECT T1.HOSPITAL_ID,
  T1.ORDER_DATE,
                    T2.LABEL AS TYPE_VAL,
                    SUM(T1.MONEY) AS MONEY,
                    SUM(T1.ASSING_MONEY) AS ASSING_MONEY,
                    SUM(T1.REQUIRE_NUM) AS REQUIRE_NUM,
                    SUM(T1.SIGN_NUM) AS SIGN_NUM,
                    FORMAT(SUM(T1.MONEY) / COUNT(1), 2) AS AVG_MONEY
               FROM YSL_ORDER T1
               LEFT JOIN (SELECT LABEL, VALUE
                           FROM SYS_DICT
                          WHERE TYPE = 'order_task_type') T2
                 ON T1.TYPE = T2. VALUE
              ORDER BY T1.HOSPITAL_ID, T1.TYPE) T12
     ON T11.ID = T12.HOSPITAL_ID
    <where>
<if test="hospitalName != null and hospitalName != ''">
AND T11.`NAME` LIKE '%${hospitalName}%'
</if>
        <if test="timeBegin != null and timeBegin != ''">
        AND T12.ORDER_DATE &gt;= #{timeBegin}
        </if>
        <if test="timeEnd != null and timeEnd != ''">
        AND T12.ORDER_DATE &lt;= #{timeEnd}
        </if>
</where>


  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要统计数组元素数量,需要使用SQL中的聚合函数COUNT。在使用COUNT函数时,需要将数组列的值作为参数传递给函数,然后将查询结果汇总为一个单独的值。 例如,如果我们有一个名为“array”的数组列,我们可以在SQL语句中使用以下语句统计数组元素数量: SELECT COUNT(array) FROM table_name; 在这个SQL语句中,“table_name”是包含数组列的表的名称。COUNT函数将返回一个整数值,表示数组元素的数量。该值可以作为结果集的一部分返回,或者可以作为单独的变量使用。 如果数组列中包含多个数组,则可以使用子查询和UNNEST函数将数组转换为行,并对行进行计数。例如,以下SQL查询可以计算包含多个数组的表中所有数组元素的总数: SELECT SUM(array_size) FROM ( SELECT array_length(array_column,1) AS array_size FROM table_name, UNNEST(array_column) AS array_column) AS subquery; 在这个SQL查询中,UNNEST函数将多个数组转换为表行,并使用子查询和SUM函数将所有行的数组元素数量加起来,从而得到总数。 不过需要注意的是,SQL不是专门用于处理数组的语言,因此在使用数组时需要小心处理,以免发生数据转换错误或性能问题。在处理大量数据时,使用专门的数组处理工具可能更好。 ### 回答2: SQL是一种结构化查询语言,用于管理和操作关系数据库。在实际开发中,我们经常需要对数据库中的数据进行统计和分析,其中包括统计数组元素的数量。 在SQL中,可以使用COUNT函数来统计符合条件的记录数。对于数组元素的数量,我们可以使用以下语句: ```sql SELECT COUNT(*) FROM table_name WHERE column_name LIKE '%,element,%'; ``` 其中,table_name是要查询的表名,column_name是包含数组元素的列名,element是要统计的数组元素。 上述语句使用LIKE关键字对元素进行模糊匹配,即在数组元素之前和之后添加逗号,以确保查询结果准确无误。 除了使用SELECT语句,我们还可以在INSERT、UPDATE和DELETE语句中使用COUNT函数来统计数组元素的数量。例如: ```sql INSERT INTO table_name(column_name) VALUES ('element1,element2,element3'); SELECT COUNT(*) FROM table_name WHERE column_name LIKE '%,element,%'; ``` 以上语句首先将包含多个数组元素的字符串插入到表中的指定列中,然后使用SELECT COUNT语句统计元素数量。 总之,使用SQL语句统计数组元素数量相对简单,只需要使用COUNT函数和LIKE关键字就可以了。不过在实际操作中,我们还需要根据具体需求进行灵活变通,以获取更准确的统计结果。 ### 回答3: SQL语句可以通过使用聚合函数来统计数组元素的数量。以下是一些常见的方法: 方法一:使用COUNT(*)函数 这是最常用的方法,该函数用于计算行的数量。如果将数组元素存储在单独的行中,则可以使用COUNT(*)函数来简单地计算数组中的元素数量。例如,假设有一个名为my_array的数组,每个元素都存储在名为element的列中,则可以使用以下SQL语句统计数组元素的数量: SELECT COUNT(*) FROM my_array; 方法二:使用SUM函数 SUM函数可以用于对一列中的所有值进行求和,因此可以对包含1或其他非空值的数组元素使用SUM函数。例如,如果一个名为my_array的数组将元素存储在名为is_not_null的布尔列中,则可以使用以下SQL语句计算数组元素的数量: SELECT SUM(CASE WHEN is_not_null THEN 1 ELSE 0 END) FROM my_array; 在这个查询中,CASE WHEN语句用于将所有非空值(即值为1)映射为1,将所有空值(即值为0)映射为0。然后,SUM函数将所有映射的值相加,从而计算数组元素的数量。 方法三:使用ARRAY_LENGTH函数 ARRAY_LENGTH函数可用于计算数组的长度。该函数需要两个参数:一个数组列和一个可选的纬度参数(如果数组是多维的)。例如,如果my_array是一个名为my_array的单维数组,则可以使用以下SQL语句计算数组元素的数量: SELECT ARRAY_LENGTH(my_array, 1) FROM my_table; 其中1是数组的维度,因为my_array是单维数组。如果数组是多维的,则需要将维度参数设置为正确的值。 总之,以上是一些常用的统计数组元素数量的方法。选择哪种方法取决于数据的存储方式和查询的要求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值