Python按照某些列去重,可用drop_duplicates函数轻松处理。本文致力用简洁的语言介绍该函数。...本文目录 drop_duplicates函数介绍 加载数据 按照某一列去重实例 3.1 按照某一列去重(参数为默认值) 3.2 按照某一列去重(改变keep值) 3.3 按照某一列去重(inplace...导入设置路径的库 import pandas as pd #导入数据处理的库 import numpy as np #导入数据处理的库 os.chdir('F:/微信公众号/Python/26.基于多列组合删除数据框中的重复值...原始数据中只有第二行和最后一行存在重复,默认保留第一条,故删除最后一条得到新数据框。 想要根据更多列数去重,可以在subset中添加列。...但是对于两列中元素顺序相反的数据框去重,drop_duplicates函数无能为力。 如需处理这种类型的数据去重问题,参见本公众号中的文章【Python】基于多列组合删除数据框中的重复值。 -end-
于是想到通过default来修改列的默认值: alter table A modify column biz default 'old' comment '业务标识 old-老业务, new-新业务'...找后台运维查生产数据库,发现历史数据的biz字段还是null 原因: 自己在本地mysql数据库试了下,好像的确是default没法修改历史数据为null 的值。这就尴尬了。...看起来mysql和oracle在default的语义上处理不一样,对于oracle,会将历史为null的值刷成default指定的值。...总结 1. mysql和oracle在default的语义上存在区别,如果想修改历史数据的值,建议给一个新的update语句(不管是oracle还是mysql,减少ddl执行的时间) 2....即使指定了default的值,如果insert的时候强制指定字段的值为null,入库还是会为null
在 Oracle 23c 中,可以将列定义为 DEFAULT ON NULL FOR INSERT AND UPDATE。这会将更新语句中的显式空值替换为默认值。...在 12c 之前的版本中,只有在插入语句中未显式引用具有默认值的列时,才会在插入操作期间应用默认值。...在 Oracle 12c 中,可以将列定义为 DEFAULT ON NULL,从而允许为其分配默认值,即使在 INSERT 语句中显式为其分配了空值。...---- 1 2 SQL> DEFAULT ON NULL [FOR INSERT ONLY] 在 Oracle 12c 中,我们能够将列定义为 DEFAULT...DESCRIPTION1") to NULL SQL> DEFAULT ON NULL FOR INSERT AND UPDATE 在 Oracle 23c 中,我们能够将列定义为 DEFAULT
例如,在Oracle中,你可能会这样写: SELECT 5 * 10 FROM DUAL; 这条语句会返回50,因为Oracle要求所有的SELECT语句都必须指定一个FROM子句,即使你并不打算从任何表中检索数据...distinct 在MySQL中,DISTINCT关键字用于在查询结果中返回唯一不同的值。当你从表中检索数据时,如果表中有重复的行,并且你只希望看到每个唯一值一次,那么就可以使用DISTINCT。...DISTINCT通常与SELECT语句一起使用,放在需要返回唯一值的列名之前。你也可以对多个列使用DISTINCT,但这意味着MySQL会考虑这些列的组合作为唯一性的判断依据。...多列使用DISTINCT SELECT DISTINCT column1, column2 FROM table_name; 这个查询会返回column1和column2的组合中所有唯一的值对。...如果查询中包含了聚合函数(如COUNT()、MAX()、MIN()、SUM()等),并且你想要基于某些列的唯一值来计算聚合结果,那么可能需要结合GROUP BY子句来使用,而不是直接使用DISTINCT
MAX([DISTINCT|ALL]expr) -- 求最大值,忽略空值 MIN([DISTINCT|ALL]expr) -- 求最小值,忽略空值 SUM([DISTINCT|ALL]n) --...: SELECT 中出现的列,如果未出现在分组函数中,则GROUP BY子句必须包含这些列 WHERE 子句可以某些行在分组之前排除在外 不能在GROUP BY 中使用列别名 默认情况下GROUP...BY列表中的列按升序排列 GROUP BY 的列可以不出现在分组中 七、分组过滤: 使用having子句 having使用的情况: 行已经被分组 使用了组函数 满足having子句中条件的分组将被显示...expr) --注意coung(*)包含空值、重复值,count(expr)过滤空值,count(distinct expr)即过滤空值,也过滤重复值 SQL> select count(*),count...3000 2758.33333 1400 1037.5 --错误的用法,SELECT 中的有些列没有在GROUP BY子句中出现 SQL> select job,avg(sal) from emp
当你想要隐藏一个字段的所有值或部分值,但同时还要为用户提供他们需要的信息的时候,Data Redaction便有了用武之地。 ? Oracle Redaction概述 ?...这是一项和安全相关的技术类别,对于指定的用户可以限制某些表的某些列显示被加密改过的值。对于Redaction之前,可能需要自定义加密函数、创建特定的视图,或者在存储到数据库的时候就用加密算法进行加密。....Partial redaction:对列中的一部分数据进行redact,比如,可以对身份证号或手机号的中间几位设置返回为*,剩下的几位保持不变,这种场景适用于固定长度; 3.Regular expressions...2、对表的某些字段加密 调用DBMS_REDACT包创建policy策略 ? 基于某列加密的基础上,再增加一个乱码显示的列,即多列加密显示 ?...4、Redaction的使用限制 通过测试得出以下结论: 1.对加密的列不能同时使用distinct和order by,如果使用,必须加一层select,无论对于使用的用户是否是加密可见; 2.加密的结果优先级高于函数
在MS SQL和Oracle中,select_list是在group by和having子句之后才进行的,这意味着group by分组后,不能在select_list中指定非分组列(除非聚合运算),反过来看...假如DISTINCT消除了部分列的重复值,最终将只返回一条重复记录,而如果使用非select_list的列排序,将要求返回一条重复记录的同时还要返回每个重复值对应的多条记录以便排序,而在要求范式的关系表中是无法整合这样的结果...正如前文介绍的DISTINCT一样,ORDER BY的排序列只能使用DISTINCT去重的select_list列表。 因此,分组后只能使用分组列表中的列。...假如先执行DISTINCT去重再执行OVER,那么去重后再对具有唯一值的列(或多列)进行开窗就没有任何意义。...另外,建议DISTINCT不要和OVER()一起使用,因为这时候的DISTINCT根本没有任何作用,但却会消耗额外的资源。 如果真的想对某些列去重后再开窗,可以借助GROUP BY。
SELECT City FROM Customers; 3-从Customers表中的Country列中选择所有不同的值。...在表中,一列通常包含许多重复值;有时您只想列出不同的(不同的)值。 SELECT DISTINCT 语法 SELECT DISTINCT column1, column2, ......”列中选择所有(包括重复的)值: SELECT Country FROM Customers; SELECT DISTINCT 示例 SELECT DISTINCT Country FROM Customers...; 以下 SQL 语句列出了不同(不同)客户国家/地区的数量: SELECT COUNT(DISTINCT Country) FROM Customers; 练习: 1-从表中的Country列中选择所有不同的值...仅在指定列中插入数据 下面的 SQL 语句将插入一条新记录,但只在“CustomerName”、“City”和“Country”列中插入数据(CustomerID 会自动更新): INSERT INTO
ID 338926.1)”中明确指出,METHOD_OPT的值中的AUTO的含义为如下所示: AUTO: Oracle determines the columns to collect histograms...Oracle采用了一种很简单的方法 就是判断目标列的distinct值的数量是否和目标表的数据量相同,如果相同,Oracle就认为该列的数据分布不是倾斜的,否则就是倾斜的。...如果目标列的distinct值的数量和目标表的数据量相同,即使该目标列在SYS.COL_USAGE$中有使用记录,Oracle在自动收集直方图统计信息的时候也不会对该列收集直方图统计信息。...,Oracle在自动收集直方图统计信息的时候也不会对user_id收集直方图统计信息: 现在我们来验证一下上述理论,往表T1中插入一条记录,使得user_id的distinct值的数量小于表T1的数据量...distinct值的数量,且这个值是小于等于254的话,那么Oracle此时收集的直方图统计信息的类型应该是FREQUENCY)成立的前提条件是该列的数据分布是倾斜的。
SELECT 语句基本语法为: SELECT [DISTINCT] [column_name, ...]...我们把每个子句分别写在一行在复杂查询中是十分有用的。 SELECT 子句 我们可以使用 * 返回全部列,或者单独指定希望返回的列名列表。 我们还可以对列进行算数运算,使用 AS 对某列指定别名。...如果需要对某些列去重,我们可以使用 DISTINCT 关键字。...-- 返回全部列 SELECT * FROM customers; -- 返回某些列 SELECT first_name, age FROM customers; -- 对列进行算数运算 SELECT...需要特别注意,在 MySQL 中,我们可以使用未选择列进行排序,而其他关系型数据库则会报错。
这方面甚至还不如 Oracle,Oracle 不是专业分析型数据库,速度会慢很多,但所有题都能跑出来。...看来,ClickHouse 的“快”,仅仅在于最简单的无关联单表遍历,这种“快”能适应的场景实在是太狭窄了。专门引进一个数据库仅仅做这么一点点事情,值得吗?...而继续采用 SQL 体系的数据库,即便在某些局部能超越 ClickHouse,但仍然会受到 SQL 的局限,无法充分利用硬件资源跑出最好的性能。...SQL 看起来并不算很复杂:WITH DT AS ( SELECT DISTINCT id, ROUND(tm/900)+1 as tn, loc FROM T WHERE tmSELECT...A.tn=B.tn WHERE A.id=a AND B.ida GROUP BY id )ORDER BY cnt DESCLIMIT 20WITH DT AS ( SELECT DISTINCT
8、在SQL*Plus,SQL*Forms和Pro*C中重新设置ARRAYSIZE参数,可以增加每次数据库访问 的检索数据量,建议值为200。...对于单列索引,如果列包含空值,索引中将不存在此记录。 对于复合索引,如果每个列都为空,索引中同样不存在此记录。如果至少有一个列不为 空,则记录存在于索引中。...如果唯一性索引建立在表的A列和B列上, 并且表中存在一条记录的A,B值为(123,null), ORACLE将不接受下一条具有相同A,B值(123,null)的记录(插入)。...因为空值不存在于索引列中,所以WHERE子句中对索引列进行空 值比较将使ORACLE停用该索引。...SELECT … FROM USER_TAB WHERE TO_NUMBER(USER_TYPE)=123; 29、WHERE子句: 某些SELECT 语句中的WHERE子句不使用索引。
LOC_IN IN (10,20,30); (26)避免在索引列上使用IS NULL和IS NOT NULL 避免在索引中使用任何可以为空的列,ORACLE将无法使用该索引.对于单列索引,如果列包含空值...如果至少有一个列不为空,则记录存在于索引中.举例:如果唯一性索引建立在表的A 列和B 列上,并且表中存在一条记录的A,B 值为(123,null) , ORACLE将不接受下一条具有相同 A,B 值(123...因为空值不存在于索引 列中,所以WHERE子句中对索引列进行空值比较将使 ORACLE 停用该索引....ORDER BY中所有的列必须包含在相同的索引中并保持在索引中的排列顺序. ORDER BY中所有的列必须定义为非空....(31)需要当心的WHERE子句: 某些SELECT 语句中的WHERE子句不使用索引. 这里有一些例子. 在下面的例子里,(1)‘!='将不使用索引。
需要指出的是这些巡检指令不仅在巡检过程中用得上,某些故障的诊断场景中同样可以利用,还是比较通用的。...2、数据库相关资源使用情况检查 (1)检查Oracle初始化文件中相关参数值 select resource_name,max_utilization,initial_allocation, limit_value...(4)检查system表空间内的内容 select distinct (owner) from dba_tables where tablespace_name = 'SYSTEM' and owner...= 'SYSTEM' union select distinct (owner) from dba_indexes where tablespace_name = 'SYSTEM' and owner...(6)检查对象的下一扩展值与表空间的最大扩展值 select a.table_name, a.next_extent, a.tablespace_name from all_tables a, (select
♣ 题目部分 在Oracle中,直方图分为哪几类? ♣ 答案部分 Oracle数据库里的直方图使用了一种称为Bucket(桶)的方式来描述目标列的数据分布。...(1)频率(Frequency,Freq)直方图 在Oracle 12c之前,在目标列的数据分布是倾斜的情况下(即存储在数据字典里的目标列的DISTINCT值的数量小于目标表的记录数),如果存储在数据字典里描述目标列直方图的...Bucket的数量等于目标列的DISTINCT值的数量,那么这种类型的直方图就是频率(Frequency)直方图。...频率直方图只适用于那些目标列的DISTINCT值数量小于或等于254的情形。需要注意的是,在Oracle 12c中,频率直方图所对应的Bucket的数量可以超过254。...对于频率直方图而言,目标列直方图的Bucket的数量就等于目标列的DISTINCT值的数量,此时目标列有多少个DISTINCT值,Oracle在数据字典DBA_TAB_HISTOGRAMS、DBA_PART_HISTOGRAMS
原则二:SELECT子句中避免使用 ‘ * ‘: ORACLE在解析的过程中, 会将'*' 依次转换成所有的列名, 这个工作是通过查询数据字典完成的, 这意味着将耗费更多的时间 。...IS NULL和IS NOT NULL 避 免在索引中使用任何可以为空的列,ORACLE性能上将无法使用该索引.对于单列索引,如果列包含空值,索引中将不存在此记录....对于复合索引,如果每个列都为空,索引中同样不存在此记录. ...如果至少有一个列不为空,则记录存在于索引中.举例: 如果唯一性索引建立在表的A列和B列上, 并且表中存在一条记录的A,B值为(123,null) , ORACLE将不接受下一条具有相同A,B值(123,...因为空值不存在于索引列中,所以WHERE子句中对索引列进行空值比较将使ORACLE停用该索引.
set 字符集 删除表 drop table 表名 表中数据的CRUD操作 插入数据 insert into 表名(列名1,列名2,列名3)values(值1,值2,值3)...表名 values(值1,值2,值3) insert into 表名(列名1) values(值1) 查看表中数据 select * from 表名 删除记录...条件】 查询记录 select【distinct】【*】【列名1 .列名2】from 表名 【where 条件】 distinct 去除重复的数据 as关键字的使用...表别名 select p.列名 from 表名 as p 列别名 select 列名 列别名 from 表名 select运算查询 仅仅在查询结构上做 + - / * 条件查询...右外连接,同上 内链接 select * from 表名A,表名B where A中列名=B中列名; 隐式内链接select * from 表名A as p,表名B as
select [distinct] {*,column [alias],...} from table 注:[]括起来的内容代表可有可无 * 代表所有列 distinct关键字只能跟在...select关键字之后 select 子句后边指定要查询的列 from 子句后边跟要查询的表 My name is first_name.last_name; 2.select语句可以对指定的列的所有值进行算术运算...(col_name,change_value) from tb_name; nvl2(col_name,不为空显示的值,为空显示的值); 6.使用distinct关键词,可以将显示中重复的记录只显示一条...语法: select distinct col_name,col_name... from tb_name; 注意1:distinct关键词只能放在select关键词后面 如:select id,distinct...注意2:如果distinct关键词后面如果出现多列,表示多列联合去重,即多列的值都相同的时候才会认为是重复的记录。
DISTINCT....(10,20,30); (26) 避免在索引列上使用IS NULL和IS NOT NULL 避免在索引中使用任何可以为空的列,ORACLE将无法使用该索引.对于单列索引,如果列包含空值,索引中将不存在此记录...如果至少有一个列不为空,则记录存在于索引中.举例: 如果唯一性索引建立在表的A列和B列上, 并且表中存在一条记录的A,B值为(123,null) , ORACLE将不接受下一条具有相同A,B值(123,...因为空值不存在于索引列中,所以WHERE子句中对索引列进行空值比较将使ORACLE停用该索引....注意当字符和数值比较时, ORACLE会优先转换数值类型到字符类型 (31) 需要当心的WHERE子句: 某些SELECT 语句中的WHERE子句不使用索引. 这里有一些例子.
(比如部门表和雇员表)的查询时,避免在select子句中 使用 distinct...., 如果列包含空值,索引中将不存在此记录....如果至少有一个列不为空,则记录存在于索引中.举例: 如 果唯一性索引建立在表的A列和B列上, 并且表中存在一条记录的 A,B 值为 (123,null) , oracle将不接受下一条具有相同 A,B...因为空值不存在于索引列中,所以 where子句中对索引列进行空值比较将使 oracle停用该索引....注意当字符和数值比较时, oracle会优先转换数值类型到字符类型 31.需要当心的 where子句: 某些 select语句中的 where子句不使用索引. 这里有一些例子.