精华内容
下载资源
问答
  • MySQL条件去重

    千次阅读 2019-09-23 20:55:06
    MySQL条件去重保留最旧的一条1、数据表说明及问题描述1.1 数据表结构2、MySQL 代码欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮...

    1、数据表说明及问题描述

    假定有包含frameid, terminalnumber, timepoint, value 等字段的table_a表,当frameid, terminalnumber, timepoint三个值相同时保留value值最小的数据行。

    frameid terminalnumber timepoint value
    a t1 2019-09-09 12:12:12 1
    a t1 2019-09-09 12:12:12 2
    b t2 2019-09-09 12:12:13 3

    2、解决方案-MySQL 代码

    使用子查询方法,经测试18,000,000条数据去重耗时246秒,该值仅供参考,根据不同的数据量会有不同的时间消耗。

    //remove duplicate data by (frameid & terminalnumber & timepint)
    delete
    from table_a
    where value in
          (select value
           from (select value
                 from table_a
                 where (frameid, terminalnumber, timepoint) in
                       (select frameid,
                               terminalnumber,
                               timepoint
                        from table_a
                        group by frameid, terminalnumber, timepoint
                        having count(*) > 1)
                   and value not in
                       (select min(value)
                        from table_a
                        group by frameid, terminalnumber, timepoint
                        having count(*) > 1)) as tempresult);
                        
    
    展开全文
  • Mysql多个条件查询去重数据

    千次阅读 2019-08-29 15:04:58
    mysql查询多个条件去重 SELECT * FROM tb_user_customer a WHERE CONCAT(agent_id, '-', client_id) IN ( SELECT CONCAT(agent_id, '-', client_id) AS ACID FROM tb_user_customer GROUP BY ACID HAVING ...

    mysql查询多个条件去重

    SELECT * FROM tb_user_customer a WHERE CONCAT(agent_id, '-', client_id) IN 
    (
    	SELECT CONCAT(agent_id, '-', client_id) AS ACID
    	FROM tb_user_customer 
    	GROUP BY ACID HAVING COUNT(ACID) > 1
    );

     

    展开全文
  • mysql链表查询去重

    2017-10-11 09:08:22
    select distinct a.* from wcr_s a,wcr_i b ,wcr_r c where a.xId=b.xId and a.xId=c.xId and a.status=值 AND a.uId=值 and c.`type`=值 and b.name <> ''
    select distinct a.* from wcr_s a,wcr_i b ,wcr_r c where a.xId=b.xId and a.xId=c.xId and a.status=值 AND a.uId=值 and c.`type`=值 and b.name <> ''
    
    展开全文
  • id name jingdu weidu date 1 aa 121.121 37.01234 2016-1-8 2 bb 121.120 37.01234 2016-9-8 3 cc 121.1211 37.01234 2016-10-8 4 dd 121.1121 37.01234 2016-9-23 5 ff 121.1121 37.01234 2016-9-1 ...
  • 数据查询语言DQL基本的select语句查询表中的单个字段查询表中的多个字段查询表中的所有列表查询常量值查询表达式查询函数起别名去重+号的作用过滤和排序数据过滤查询条件表达式筛选按逻辑表达式筛选模糊查询排序...

    数据查询语言DQL

    基本的select语句

    查询表中的单个字段

    查询表中的多个字段

    查询表中的所有列表

    查询常量值

    查询表达式

    查询函数

    起别名

    去重

    +号的作用

    过滤和排序数据

    过滤查询

    按条件表达式筛选

    按逻辑表达式筛选

    模糊查询

    排序查询

    总结

    SQL 语言大小写不敏感。 • SQL 可以写在一行或者多行

    关键字不能被缩写也不能分行

    各子句一般要分行写。

    使用缩进提高语句的可读性。

    基本的select语句

    查询表中的单个字段

    SELECT last_name FROM t_mysql_employees;

    查询表中的多个字段

    SELECT last_name,salary,email FROM t_mysql_employees;

    查询表中的所有列表

    这里我建议使用方式一进行查询,方式二的查询性能比方式一的性能要差。

    方式一:

    SELECT

    `employee_id`,

    `first_name`,

    `last_name`,

    `phone_number`,

    `last_name`,

    `job_id`,

    `phone_number`,

    `job_id`,

    `salary`,

    `commission_pct`,

    `manager_id`,

    `department_id`,

    `hiredate`

    FROM

    t_mysql_employees ;

    方式二:

    SELECT * FROM t_mysql_employees;

    查询常量值

    数值型查询

    SELECT 100;

    非数值型查询

    SELECT 'john';

    查询表达式

    运行之后返回表达式计算结果。

    SELECT 100%98;

    查询函数

    SELECT VERSION();

    起别名

    /*

    ①便于理解

    ②如果要查询的字段有重名的情况,使用别名可以区分开来

    */

    #方式一:使用as

    SELECT 100%98 AS 结果;

    SELECT last_name AS 姓,first_name AS 名 FROM t_mysql_employees;

    #方式二:使用空格

    SELECT last_name 姓,first_name 名 FROM t_mysql_employees;

    #案例:查询salary,显示结果为 out put

    SELECT salary AS "out put" FROM t_mysql_employees;

    去重

    ALL:允许出现——默认不写就是All(允许的)

    DISTINCT:不允许出现——就是所谓的“消除重复行”

    SELECT DISTINCT department_id FROM t_mysql_employees;

    +号的作用

    /*

    java中的+号:

    ①运算符,两个操作数都为数值型

    ②连接符,只要有一个操作数为字符串

    mysql中的+号:

    仅仅只有一个功能:运算符

    select 100+90; 两个操作数都为数值型,则做加法运算

    select '123'+90;只要其中一方为字符型,

    试图将字符型数值转换成数值型如果转换成功,则继续做加法运算

    select 'john'+90;如果转换失败,则将字符型数值转换成0

    select null+10; 只要其中一方为null,则结果肯定为null

    */

    SELECT CONCAT('a','b','c') AS 结果;

    #案例:查询员工名和姓连接成一个字段,并显示为 姓名

    SELECT

    CONCAT(last_name,first_name) AS 姓名

    FROM

    t_mysql_employees;

    过滤和排序数据

    过滤查询

    使用WHERE 子句,将不满足条件的行过滤掉。

    WHERE 子句紧随 FROM 子句。

    过滤查询的基本语法:

    语法:

    select

    查询列表

    from

    表名

    where

    筛选条件;

    按条件表达式筛选

    简单条件运算符: > < = !=,<> >= <=

    大于 小于 等于 不等于 大于等于 小于等于

    select * from 表名 where 列字段 条件运算符 判断值;

    按逻辑表达式筛选

    逻辑运算符:

    作用:用于连接条件表达式

    && || !

    and or not

    &&和and:两个条件都为true,结果为true,反之为false

    ||或or: 只要有一个条件为true,结果为true,反之为false

    !或not: 如果连接的条件本身为false,结果为true,反之为false

    #案例1:查询工资z在10000到20000之间的员工名、工资以及奖金

    SELECT

    last_name,

    salary,

    commission_pct

    FROM

    t_mysql_employees

    WHERE

    salary>=10000 AND salary<=20000;

    #案例2:查询部门编号不是在90到110之间,或者工资高于15000的员工信息

    SELECT

    *

    FROM

    t_mysql_employees

    WHERE

    NOT(department_id>=90 AND department_id<=110) OR salary>15000;

    模糊查询

    1、like

    /*

    特点:

    ①一般和通配符搭配使用

    通配符:

    % 任意多个字符,包含0个字符

    _ 任意单个字符

    *、

    #案例1:查询员工名中包含字符a的员工信息

    select

    *

    from

    employees

    where

    last_name like '%a%';#abc

    #案例2:查询员工名中第三个字符为e,第五个字符为a的员工名和工资

    select

    last_name,

    salary

    FROM

    t_mysql_employees

    WHERE

    last_name LIKE '__n_l%';

    #案例3:查询员工名中第二个字符为_的员工名

    SELECT

    last_name

    FROM

    t_mysql_employees

    WHERE

    last_name LIKE '_$_%' ESCAPE '$';

    2、between and

    /*

    ①使用between and 可以提高语句的简洁度

    ②包含临界值

    ③两个临界值不要调换顺序

    */

    #案例1:查询员工编号在100到120之间的员工信息

    SELECT

    *

    FROM

    t_mysql_employees

    WHERE

    employee_id <= 120 AND employee_id>=100;

    #----------------------

    SELECT

    *

    FROM

    t_mysql_employees

    WHERE

    employee_id BETWEEN 100 AND 120;

    3、in

    /*

    含义:判断某字段的值是否属于in列表中的某一项

    特点:

    ①使用in提高语句简洁度

    ②in列表的值类型必须一致或兼容

    ③in列表中不支持通配符

    */

    #案例:查询员工的工种编号是 IT_PROG、AD_VP、AD_PRES中的一个员工名和工种编号

    SELECT

    last_name,

    job_id

    FROM

    t_mysql_employees

    WHERE

    job_id = 'IT_PROT' OR job_id = 'AD_VP' OR JOB_ID ='AD_PRES';

    #------------------

    SELECT

    last_name,

    job_id

    FROM

    t_mysql_employees

    WHERE

    job_id IN( 'IT_PROT' ,'AD_VP','AD_PRES');

    4、is null

    /*

    =或<>不能用于判断null值

    is null或is not null 可以判断null值

    */

    #案例1:查询没有奖金的员工名和奖金率

    SELECT

    last_name,

    commission_pct

    FROM

    t_mysql_employees

    WHERE

    commission_pct IS NULL;

    IS NULL:仅仅可以判断NULL值,可读性较高,建议使用

    <=> :既可以判断NULL值,又可以判断普通的数值,可读性较低

    排序查询

    语法:

    select 查询列表

    from 表名

    【where 筛选条件】

    order by 排序的字段或表达式;

    特点:

    1、asc代表的是升序,可以省略

    desc代表的是降序

    2、order by子句可以支持 单个字段、别名、表达式、函数、多个字段

    3、order by子句在查询语句的最后面,除了limit子句

    #1、按单个字段排序

    SELECT * FROM t_mysql_employees ORDER BY salary DESC;

    #2、添加筛选条件再排序

    #案例:查询部门编号>=90的员工信息,并按员工编号降序

    SELECT *

    FROM t_mysql_employees

    WHERE department_id>=90

    ORDER BY employee_id DESC;

    #3、按表达式排序

    #案例:查询员工信息 按年薪降序

    SELECT *,salary*12*(1+IFNULL(commission_pct,0))

    FROM t_mysql_employees

    ORDER BY salary*12*(1+IFNULL(commission_pct,0)) DESC;

    #4、按别名排序

    #案例:查询员工信息 按年薪升序

    SELECT *,salary*12*(1+IFNULL(commission_pct,0)) 年薪

    FROM t_mysql_employees

    ORDER BY 年薪 ASC;

    #5、按函数排序

    #案例:查询员工名,并且按名字的长度降序

    SELECT LENGTH(last_name),last_name

    FROM t_mysql_employees

    ORDER BY LENGTH(last_name) DESC;

    #6、按多个字段排序

    #案例:查询员工信息,要求先按工资降序,再按employee_id升序

    SELECT *

    FROM t_mysql_employees

    ORDER BY salary DESC,employee_id ASC;

    总结

    今天的分享就到这里了,还有关于MySql的内容我将在后面的博文中继续分享!

    展开全文
  • mysql distinct多条件去重逻辑

    千次阅读 2019-02-14 12:35:09
    distinct 多个字段 例a select distinct a , b , c from test_table 例b select distinct a from test_table 之间区别 例a会选择唯一的一行,例b选择唯一列。 前一种只要三个字段都不重复就取出来。...
  • 1、补充内容:关于查询结果集的去重关键字distinct:select distinct job from emp;select ename, distinct job from emp;//编译错误,distinct前面不能加字段,distinct只能出现在所有字段的最前面;select ...
  • Mysql 多字段去重

    万次阅读 2018-08-17 11:26:04
    使用group by去重 现在有如下表 id name age 1 张三 23 2 李四 34 3 张三 23 4 李四 32 需求 : 按照name和age字段联合去重 sql如下 select * from user group by n...
  • 如上表:此表是查询的ID为20的用户,同时在两个不同的小组(小组id:1 和12)和个人对ID为1的文件所具备的不同权限级别;用户权限序号越小权限越大,需对该文件得出一个该用户所具备的最高的权限。 目的是取第二条...
  • MySQL多字段去重

    2021-01-06 21:56:33
    对多个字段进行去重操作,即删除A、B、C三个字段都相同的重复数据。 其中id留最大值 SQL DELETE FROM ${tableName} WHERE id not in (SELECT id FROM ( SELECT max(${tn}.id) as id from ${tableName} ${tn} ...
  • MySQL】数据去重

    热门讨论 2019-03-24 17:54:42
    但是我们又不需要重复的数据,而只是需要显示其中的一种就好,这个时候就需要用到数据去重了,数据可以去重,那么我们是否可以在数据出现重复之前提前做一些措施来防止,带着这样的疑问开始了查询答疑之路;...
  • MySQL计数+去重

    千次阅读 2019-04-17 14:07:26
    2 运行出错发现如果记录出现重复项则结果有误,因此要进行去重。我去重的方式为删除原表中的重复记录select distinct * from courses select class from (select class,count(class) as class_count from (...
  • mysql | 去重查询

    千次阅读 2017-11-16 13:44:59
    今天在实际开发过程中遇到一个数据库去重查询的问题,在这里给大家分享一下。类似于上面这张数据表,我们发现id=5和id=6的数据passWord和userName数据是一样的。我们的需求是去掉重复的数据(passWord,userName)...
  • 所谓的semi-join是指semi-join子查询。 当一张表在另一张表找到匹配的记录之后,半连接(semi-jion)返回第一张表中的记录。与条件连接相反,即使在右节点中找到几条匹配的记录,左节点 的表也只会返回一条记录。另外...
  • mysql 根据字段去重

    2019-05-08 15:41:47
    create table tb_distinct_ex( pid int, cid int, dt int, logt int ); INSERT INTO tb_distinct_ex(pid,cid,dt,logt) values(1,1,1,1),(1,1,2,1);...SELECT * from tb_distinct_ex;...SELECT DISTINCT pid,...
  • mysql 去重查询

    2020-10-10 13:58:51
    1 .第一种 select distinct 重复的字段名 from table 2.第二种 select * from table GROUP BY 重复的字段名
  • MySql实现根据某个条件去重求和

    万次阅读 2018-08-09 14:11:50
    //第一图 直接查询出所有的id SELECT d.id FROM t_device d LEFT JOIN t_device_collect_state a on d.id = a.device_collect_id LEFT JOIN t_group b on d.group_id = b....
  • mysql 查询--去重

    2018-06-06 16:47:00
    LEFT JOIN ( SELECT `file_url` FROM `material` WHERE `a_id` = AId ) AS PM ON PM.`file_url` = EKM.`file_url` -- 左联(查询 material 中的 符合条件 的  file_url 作为结果集 )别名为  PM ,左联条件是...
  • 在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供 有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。其原因是 ...
  • 当我们掌握了Mysql的基本操作,比如建表语句,简单的sql语句等,我们还可以对mysql本身做一些配置操作,甚至是对Mysql进行优化。更多mysql高级知识请移步ki4网mysql教程频道。1、mysql的配置文件。在windows中是my....
  • mysql中如何去重

    千次阅读 2018-08-15 20:25:03
    在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供 有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。其原因是 ...
  • MySQL之sql去重并取重复数据中最新一条 SELECT a.* FROM crm_financial_current a WHERE NOT EXISTS (SELECT * FROM crm_financial_current b WHERE b.bank_card = a.bank_card AND b.create_time > a....
  • MySQL控制台实现模糊查询及去重查询

    千次阅读 2017-12-31 18:44:45
    条件查询 and, or , not , in,not in,between and select * from actor where actor_id <> 1 and first_name='ED'; select * from actor where not first_name='ED'; select * from actor where actor_id ...
  • 引用: ... 1、使用distinct去重(适合查询整张表的总数)有多个学校+教师投稿,需要统计出作者的总数 select count(author) as total from files 每个作者都...
  • 在使用 MySQL SELECT 语句查询数据的时候返回的是所有匹配的行。 例如,查询 tb_students_info 表中所有 age 的执行结果如下所示。 mysql> SELECT age FROM tb_students_info; +------+ | age | +------+ |...
  • 1、上午主要是做两个老板要的统计,其中要涉及到distinct on按字段去重的用法,我发现mysql居然没有这个语法,mysql按字段去重,可以用group by,但这样就是按照系统某种规则取相同的一条记录,比如说我的需求是按某...
  • Mysql去重查询(根据指定字段去重)

    千次阅读 2021-03-26 14:11:16
    在日常数据查询中,多有需要进行数据去重的查询,或删除重复数据的情况,以下罗列集中数据去重查询: 1、根据全部字段的去重查询: select distinct * from table 2、根据某些字段的去重查询(不考虑查询其他...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 24,792
精华内容 9,916
关键字:

mysql查询条件去重

mysql 订阅