SELECT count(1) FROM (SELECT glc,rdid FROM zhima_borrow_order_2023 where 1 = 1 and libcode = 'STC001' GROUP BY glc, rdid ) as t 换种写法,要求不使用子查询和COUNT(DISTINCT)函数
时间: 2024-03-01 09:51:05 浏览: 17
可以使用以下方式进行重写:
```
SELECT COUNT(*)
FROM (
SELECT glc, rdid
FROM zhima_borrow_order_2023
WHERE 1 = 1 AND libcode = 'STC001'
GROUP BY glc, rdid
HAVING COUNT(*) > 0
) as t
```
这里使用了 HAVING 子句来过滤出现次数大于0的组合,然后再对结果进行计数。
相关问题
SELECT count( DISTINCT glc, rdid ) FROM zhima_borrow_order_2023 where glc = 'T1C2S3O4F5T6' 转换成不使用 DISTINCT 的sql
可以使用GROUP BY来实现不使用DISTINCT的查询:
SELECT COUNT(*) FROM (SELECT rdid FROM zhima_borrow_order_2023 WHERE glc = 'T1C2S3O4F5T6' GROUP BY rdid) AS t;
这个查询会先根据条件`WHERE glc = 'T1C2S3O4F5T6'`过滤掉不符合条件的数据,然后再按照`rdid`进行分组,并统计分组后的数量。由于分组后的每组数据中,`glc`的值都相同,所以不需要对`glc`进行分组。最后,将分组后的结果作为子查询,再对子查询的结果进行数量统计即可。
INSERT INTO borrow_order_2017 ( id, order_no, borrow_id, glc, libcode, rdid, create_time, should_revert_time, revert_time, status ) SELECT id, order_no, borrow_id, glc, libcode, rdid, create_time, should_revert_time, revert_time, status FROM borrow_order WHERE SUBSTR( borrow_id, 1, 1 ) REGEXP '[^0-9.]' = 1 AND SUBSTR( borrow_id, 2, 4 ) = '2017' OR SUBSTR( borrow_id, 1, 4 ) = '2017'; 将这个sql 改成 插入 borrow_order_2017,borrow_order_2018,borrow_order_2019 的循环sql
以下是将原 SQL 查询语句改写成循环插入 borrow_order_2017,borrow_order_2018,borrow_order_2019 表的 SQL 循环语句:
```
DELIMITER //
CREATE PROCEDURE insert_borrow_orders()
BEGIN
DECLARE i INT DEFAULT 2017;
WHILE i <= 2019 DO
SET @table_name = CONCAT('borrow_order_', i);
SET @query = CONCAT('INSERT INTO ', @table_name, ' (id, order_no, borrow_id, glc, libcode, rdid, create_time, should_revert_time, revert_time, status) SELECT id, order_no, borrow_id, glc, libcode, rdid, create_time, should_revert_time, revert_time, status FROM borrow_order WHERE SUBSTR(borrow_id, 1, 1) REGEXP ''[^0-9.]'' = 1 AND SUBSTR(borrow_id, 2, 4) = ''', i, ''' OR SUBSTR(borrow_id, 1, 4) = ''', i, ''';');
PREPARE statement FROM @query;
EXECUTE statement;
SET i = i + 1;
END WHILE;
END //
DELIMITER ;
```
该 SQL 循环语句创建了一个名为 `insert_borrow_orders` 的存储过程,以循环方式插入 borrow_order_2017,borrow_order_2018,borrow_order_2019 表。在循环内部,使用 `SET` 语句设置变量 `@table_name` 和 `@query` 分别表示当前要插入的表名和要执行的 SQL 插入语句。在每次循环中,使用 `PREPARE` 和 `EXECUTE` 语句动态执行当前的 SQL 插入语句。最后,使用 `SET` 语句对变量 `i` 进行自增操作以完成循环。注意,在该存储过程中,`DELIMITER` 命令被用于更改分隔符,以便正确处理存储过程中的代码块。