mysql去重查询之后的计数

我现在有一个sql,
去重查询某两个字段之后,得到了4条数据;
并且我加了计数,但是现在的计数是:未去重的计数:12;

这个计数怎么写出,去重之后的 4条数据呢?

img

SELECT COUNT(DISTINCT 去重列名称1, 去重列名称2)
FROM 表名称;

试试

SELECT 
  lot_number, 
  creator,
  COUNT(*) OVER() AS total
FROM
(
  SELECT DISTINCT 
    lot_number, 
    creator
  FROM pipline.qr_code
) t

分组也可以

  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/819065
  • 你也可以参考下这篇文章:mysql数据库哪些情况适合创建索引即如何优化sql语句(如何优化sql语句之如何创建索引更能有效,11中情况心中牢记助力开发程序)
  • 同时,你还可以查看手册:MySQL 字符集、对齐方式、统一编码 为8位字符集添加简单的拼写法 中的内容
  • 除此之外, 这篇博客: 一个系列搞懂Mysql数据库12:从实践sql语句优化开始中的 优化分页 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 使用主键索引来优化数据分页

     select * from user where id>(select id from user where id>=**100000** limit **1**) limit **20**; //time **0**.003s

    使用explain分析语句,MySQL这次扫描的行数是8W+,时间也大大缩短。

     explain select * from user where id>(select id from user where id>=**100000** limit **1**) limit **20**;

  • 您还可以看一下 高雯婧老师的MySQL技术大全:开发、优化与运维实战课程中的 12.3 数据删除小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    要实现在MySQL去重查询后计数结果,可以使用以下步骤:

    1. 确保有建立存储过程的权限,如果没有,需要联系数据库管理员获取权限。

    2. 创建一个存储过程,命名为"countUniqueRecords"(可以根据实际需求进行命名),并传入参数"num"表示需要查询的记录数。

    3. 在存储过程内部,使用循环遍历每个表以插入指定数量的测试数据。例子中是通过一个主循环遍历每个表,并在内部循环中执行插入语句。

    4. 在每次循环开始前,先删除表中之前的记录,以防止重复插入。

    5. 在内部循环中,使用动态SQL语句构建插入语句,并执行该语句。插入语句中的表名使用了拼接,根据循环变量动态生成。

    6. 循环完成后,可以通过SELECT COUNT(DISTINCT id) FROM 表名 来获取去重后的记录数。

    下面是一个示例的存储过程实现代码:

    CREATE PROCEDURE countUniqueRecords(IN num INT)
    BEGIN
        DECLARE i INT;
        DECLARE j INT;
        SET i = 0;
    
        WHILE i < 10 DO
            -- 删除之前的表记录
            SET @delSqlStr = CONCAT('DELETE FROM log_2019_0', i);
            PREPARE delStmt FROM @delSqlStr;
            EXECUTE delStmt;
    
            SET j = 1;
            WHILE j < num DO
                -- 每个表新增指定的num记录数
                SET @sqlStr = CONCAT('INSERT INTO log_2019_0', i, '(`id`, `content`, `createTime`) VALUES (', j, ', \'测试\', \'2019-0', i, '-01 10:00:00\')');
                PREPARE stmt FROM @sqlStr;
                EXECUTE stmt;
    
                SET j = j + 1;
            END WHILE;
    
            SET i = i + 1;
        END WHILE;
    
        -- 获取去重后的记录数
        SELECT COUNT(DISTINCT id) FROM log_2019_0;
    END
    

    通过调用该存储过程,并传入需要查询的记录数,即可得到去重后的计数结果。例如:

    CALL countUniqueRecords(4);
    

    这样就能将去重后的记录数返回给调用者。