目 录CONTENT

文章目录

经典问答(QA)-20220630

DarkAthena
2021-10-27 / 0 评论 / 3760 阅读 / 0 字

此处记录了我觉得有意思的一些问答,所有回答均来自本人在各平台的回复,不定期更新


SOURCE:CSDN_ASK
ASK_ID:7726256
ANSWER_ID:53801385
TITLE:如何截取指定的内容生成新的字段
ANSWER:

“已经把所有简称整理出来了”



这样的话,假设你已经把简称存到了 A表 的 name列 里,且原始字符串不存在歧义(可能判断出多个小区),那么可以使用like或者instr函数进行关联.假设原字符串存在于B表的ADDR列


select * from B LEFT JOIN A ON B.ADDR LIKE CONCAT(‘%’,A.NAME,‘%’);
select * from B LEFT JOIN A ON INSTR(B.ADDR,A.NAME)>0;

当然也可以使用标量子查询,方法类似。


LINK:https://ask.csdn.net/questions/7726256?answer=53801385
SOURCE:CSDN_ASK
ASK_ID:7726274
ANSWER_ID:53801377
TITLE:虚拟机配置后出现的问题,如何解决
ANSWER:

没有设置启动光盘,请确保选择了正确的启动光盘


img


LINK:https://ask.csdn.net/questions/7726274?answer=53801377
SOURCE:CSDN_ASK
ASK_ID:7724256
ANSWER_ID:53800897
TITLE:sql,将一个表的数据按照某字段分组
ANSWER:

你这个格式像个json又不是json,这样输出出来,应用识别不了啊,而且你这分组啥都没做,直接一个select *查给应用,让应用自己做分组展示不好么?
下面这个是在mysql 8.0版本输出json信息


with t as(
select ‘张三’ name,‘四川’ province ,‘30岁’ age union all
select ‘李四’,‘北京’,‘20岁’ union all
select ‘王五’,‘四川’,‘22岁’)

select json_objectagg(province,j) from (
select province,JSON_ARRAYAGG(json_object(‘name’,name,‘province’,province,‘age’,age)) j from t group by province) x

img


LINK:https://ask.csdn.net/questions/7724256?answer=53800897
SOURCE:CSDN_ASK
ASK_ID:7724389
ANSWER_ID:53800891
TITLE:请问oracle数据这个数据块怎么实现
ANSWER:
declare
v_emp varchar2(1000);
begin
select ‘员工Gee的工作是:’ || b.job_title || ‘,他的薪水是:’ || a.salary
into v_emp
from hr.employees a, hr.jobs b
where a.job_id = b.job_id
and last_name = ‘Gee’;
dbms_output.put_line(v_emp);
end;

img


LINK:https://ask.csdn.net/questions/7724389?answer=53800891
SOURCE:CSDN_ASK
ASK_ID:7725962
ANSWER_ID:53800888
TITLE:oracle存储过程有编译错误
ANSWER:

把 number(5) 改成 number
oracle里的参数类型都是不要标长度的,无论是过程参数还是游标参数


LINK:https://ask.csdn.net/questions/7725962?answer=53800888
SOURCE:CSDN_ASK
ASK_ID:7725965
ANSWER_ID:53800882
TITLE:oracle 11g版本 换成12C版本以后自定义function失效了
ANSWER:

去你11g的库里,把这个type "type_split"的代码复制到12c里创建一下


LINK:https://ask.csdn.net/questions/7725965?answer=53800882
SOURCE:CSDN_ASK
ASK_ID:7725863
ANSWER_ID:53800787
TITLE:安装oracle database 19c的时候报错
ANSWER:
  1. 你这是用的什么操作系统?
  2. 点开详细资料,看里面说了些啥?



从oracle支持网站检索得到,19c版本支持在win10 64位系统上运行,不支持在32位系统上运行,另外,家庭版也不支持


img


img


LINK:https://ask.csdn.net/questions/7725863?answer=53800787
SOURCE:CSDN_ASK
ASK_ID:7725885
ANSWER_ID:53800786
TITLE:数据库表的创建之如何创建一个数据表
ANSWER:

这张单据存到数据库里,常见的是用两张表,



单据头表:退货单号、退货日期、厂商编号、采购员、检验员
单据行表:退货单号、商品编号、(型号)、(等级)、退货数量、单价



厂商名称,从厂商基础信息表里面取;
商品名称从商品基础信息表里取;
型号和规格是存单据表还是从商品基础信息表里取,主要看商品基础架构和业务逻辑设计是怎样的;
单据行表里的金额,用退货数量乘以单价计算得到;
总金额根据上面计算出来的金额再进行求和得到。


LINK:https://ask.csdn.net/questions/7725885?answer=53800786
SOURCE:CSDN_ASK
ASK_ID:7725522
ANSWER_ID:53800720
TITLE:sql-查询每日有效会员人数
ANSWER:

我猜你这个数据是每个会员只有一行记录,后面的开始时间结束时间间隔时间很长,甚至可能达到几年,你想得到的结果是每天都有一行记录,然后对于每一个会员都要和每天来进行匹配,也就是说要将这个开始日期结束日期展开到每一天,然后再进行count。
不确定你是用的什么数据库,一般也就两种方式,
第一种,先明确你是想查哪天到哪天的数据,然后找个日历表,每天都有一行的那种,把这个日历表和你的表关联起来,关联条件为 "日期表.日期 between 会员表.开始日期 and 会员表.结束日期",然后"group by 日期表.日期",前面 "select 日期表.日期,count(1)"即可
第二种,不使用实体的日历表,而是使用with递归出一个日历表,后面的步骤和第一种一样了。
至于unix_timestamp转换,不同数据库方式不一样,而且也不麻烦,就不多说了


LINK:https://ask.csdn.net/questions/7725522?answer=53800720
SOURCE:CSDN_ASK
ASK_ID:7725803
ANSWER_ID:53800703
TITLE:sql 查询后的字段怎么加求和字段
ANSWER:

方法一,再union all一行求和的select
方法二,使用rollup


LINK:https://ask.csdn.net/questions/7725803?answer=53800703
SOURCE:CSDN_ASK
ASK_ID:7725499
ANSWER_ID:53800218
TITLE:oracle查询数据,以符号分割,显示多条数据
ANSWER:
with tmp(name,l) as ( –实际数据
select ‘李’,‘画画’ from dual union all
select ‘张’,‘吃饭/睡觉’ from dual union all
select ‘王’,‘抽烟/喝酒/打球’ from dual
),
t(name,L,lvl) as
(select name, regexp_substr(L, ‘[^/]+’, 1, 1) L, 2 lvl
from tmp
union all
select x.name, regexp_substr(x.L, ‘[^/]+’, 1, t.lvl), t.lvl + 1
from tmp x, t
where t.name = x.name
and regexp_count(x.L, ‘[^/]+’) >= t.lvl)
select NAME, L from t;

img


LINK:https://ask.csdn.net/questions/7725499?answer=53800218
SOURCE:CSDN_ASK
ASK_ID:7723523
ANSWER_ID:53799319
TITLE:sqlserver的存储过程转oracle
ANSWER:

建议把里面用到的表的表结构也提供一下,这样答题人可以自行验证下是否正确。
这个基本功能是可以实现的,但是做不到百分百的转换,比如最后面这个获取错误信息,两个数据库里的定义是不一样的,有几个值在oracle里没有,还有那个host也是要根据这个存储过程的调用方式来看是加到数据库触发器里还是加到应用代码里。再一个就是“@WaitList”这玩意建议提前建一个临时表,就不需要转成oracle的数组来处理了




下面这个语法基本已经调整得查不多了,但是没有你的表,就没有全部改完,尤其是有些字段类型不知道是什么,比如说日期处理什么的,像那个convert我就暂时没改,剩下的你自己应该能改了吧




已按对应的字段类型,修改了相关函数,编译无报错了,这个全局临时表是会话级的,多会话并发不会产生冲突,会话结束后表里就没数据了。
不确定你的oracle的版本,如果是18c以上,可以用私有临时表(或叫专用临时表),效果和你之前的这个差不多。


create global temporary table WaitList (wlId int,
isremark int,orderid int,
Entertime date, NewEntertime date,
ConcludeEntertime date,
ReasonName varchar2(100),
UpdateFlag Int);
CREATE OR REPLACE FUNCTION fn_getname
RETURN VARCHAR2
IS
l_owner VARCHAR2 (30);
l_name VARCHAR2 (30);
l_lineno NUMBER;
l_type VARCHAR2 (30);
BEGIN
OWA_UTIL.who_called_me (l_owner, l_name, l_lineno, l_type);
RETURN l_owner || ‘.’ || l_name;
END;
/
create or replace procedure P_SetPosition_Waitlist_mz(sys_id varchar2, –子系统ID
ctrllerid varchar2, –诊区ID
queueid varchar2, –队列ID
userid varchar2, –用户
callerid varchar2, –诊室
worktype in out varchar2, –班别
smsno varchar2, –ID唯一值
ReasonName varchar2, –备注说明
BeLateForMin int, –迟到分钟
neworderid in out int, –调整位置
Flag int, –标志
O_Error Out int, –错误标志
ErrMsg Out varchar2 –错误提示
) as

BEGIN

O_Error := 0;
ErrMsg := ‘’;
–处理记录
if worktype IS NULL THEN
worktype := (case
when TO_CHAR(SYSDATE, ‘HH24:MI:SS’) <
‘13’ || CHR(58) || ‘30’ || CHR(58) || ‘00’ then
0
else
1
end);
END IF;
if sys_id IS NULL THEN

O_Error := 2;
ErrMsg := ‘子系统ID为空值’;
end IF;
if ctrllerid IS NULL THEN
O_Error := 2;
ErrMsg := ‘诊区ID为空值’;
end IF;
if queueid IS NULL THEN
O_Error := 3;
ErrMsg := ‘队列ID为空值’;
end IF;
if smsno IS NULL THEN
ErrMsg := ‘ID唯一值为空值’;
O_Error := 4;
end IF;

if NVL(neworderid, 0) < 1 THEN
O_Error := 5;
ErrMsg := ‘调整位置必须大于0’;
end IF;

delete WaitList where 1 = 1;

insert into WaitList
(wlId,
orderid,
isremark,
Entertime,
NewEntertime,
ConcludeEntertime,
ReasonName,
UpdateFlag)
select wlID,
ROW_NUMBER() OVER(order by(Case
When Remark1 = ‘未报到’ then
0
else
1
end) DESC, nvl(PriorId, 0) DESC, isremark DESC /1优先号/, ConcludeEnterTime ASC, qno ASC) as orderid,
isremark,
EnterTime,
NewEnterTime,
ConcludeEnterTime,
remark1,
0
from (select wlID,
isremark,
to_date( EnterTime,‘yyyy-mm-dd hh24:mi:ss’) EnterTime,
NewEnterTime,
ConcludeEnterTime,
qno,
remark1,
nvl(PriorId, 0) as PriorId
From v_JH_waitlist_mz
where CtrllerID = CtrllerID
and QueueID = QueueID
and Remark1 <> ‘未报到’
and worktype = worktype
and trunc(to_date(EnterTime,‘yyyy-mm-dd hh24:mi:ss’))=trunc( sysdate)
and curstatus = 0
and wlID <> smsno
union all
select wlID,
isremark,
to_date( EnterTime, ‘yyyy-mm-dd hh24:mi:ss’) EnterTime,
NewEnterTime,
ConcludeEnterTime,
qno,
remark1,
nvl(PriorId, 0) as PriorId
From v_JH_waitlist_mz
where wlID = smsno
and worktype = worktype) v;

declare
tmporderId int;
TempwlId int;
tmporderId2 int;
countOrderId2 int;
EnterTime varchar2(30);
begin

select Orderid, EnterTime
into tmporderId2, EnterTime
from WaitList
where wlID = smsno;

if Flag = 1 then
if (sysdate - to_date(EnterTime, ‘yyyy-mm-dd hh24:mi:ss’)) * 24 * 60 <
BeLateForMin then
neworderid := 1; –未迟到 迢回排在第一位
end if;
end if;

–print ‘aa’
–print tmporderId2
if tmporderId2 > neworderid then

–设置新序号
–print ‘原序号’+ cast(tmporderId as varchar2(30))+‘>新序号’+cast(neworderid as varchar2(30))
update WaitList set orderid = neworderid where wlID = smsno;
IF sql%ROWCOUNT > 0 then

ErrMsg := cast(tmporderId2 as varchar2) || ‘>’ ||
cast(neworderid as varchar2);

ELSE

ErrMsg := cast(tmporderId2 as varchar2) || ‘!>’ ||
cast(neworderid as varchar2);
END if;

for Order_Cursor in (select WlId, orderid
from WaitList
where wlID <> smsno) loop

TempwlId := Order_Cursor.WlId;
tmporderId := Order_Cursor.orderid;

if (tmporderId < tmporderId2) and (tmporderId >= neworderid) then

update WaitList
set orderid = tmporderId + 1
where wlID = TempwlId;
end if;

End loop;

elsif tmporderId2 < neworderid then

–print ‘原序号’+ cast(tmporderId as varchar2(30))+‘<新序号’+cast(neworderid as varchar2(30))
update WaitList set orderid = neworderid where wlID = smsno;
IF sql%ROWCOUNT > 0 then

ErrMsg := cast(tmporderId2 as varchar2) || ‘<’ ||
cast(neworderid as varchar2);

ELSE

ErrMsg := cast(tmporderId2 as varchar2) || ‘!<’ ||
cast(neworderid as varchar2);
end if;
for Order_Cursor2 in (select WlId, orderid
from WaitList
where wlID <> smsno) loop

TempwlId := Order_Cursor2.WlId;
tmporderId := Order_Cursor2.orderid;

if (tmporderId > tmporderId2) and (tmporderId <= neworderid) then

update WaitList
set orderid = tmporderId - 1
where wlID = TempwlId;

End if;
end loop;
else

–print ‘原序号’+ cast(tmporderId as varchar2(30))+‘=新序号’+cast(neworderid as varchar2(30))
ErrMsg := cast(tmporderId2 as varchar2) || ‘=’ ||
cast(neworderid as varchar2);
end if;

declare
isremark2 int;
newEntertime2 date;
ReasonName2 varchar2(50);
begin
if (tmporderId2 = neworderid) then

select isremark, ConcludeEnterTime - 1 / 24 / 60 / 60, ReasonName
into isremark2, newEntertime2, ReasonName2
from WaitList
where orderid = neworderid;
update WaitList_mz
set isremark = isremark2,
newentertime = newEntertime2,
remark1 = ReasonName,
CallbackReason = ReasonName2,
curstatus = 0,
issendled = 0,
issound = 0,
IfTurnEarlier = 1
where wlID = smsno;
O_Error := O_Error + O_Error;

elsif (neworderid = 1) and (tmporderId2 <> neworderid) then

–print neworderid
select isremark, ConcludeEnterTime - 1 / 24 / 60 / 60, ReasonName
into isremark2, newEntertime2, ReasonName2
from WaitList
where orderid = 2;
–print newEntertime2
–print ‘新序号’+cast(neworderid as varchar2(30))+‘;排序时间:’+cast(newEntertime2 as varchar2(30))
update WaitList_mz
set isremark = isremark2,
newentertime = newEntertime2,
remark1 = ReasonName,
CallbackReason = ReasonName2,
curstatus = 0,
issendled = 0,
issound = 0,
IfTurnEarlier = 1
where wlID = smsno;
update stat_mz set memo = ReasonName where waitid = smsno;
O_Error := O_Error + O_Error;

elsif (neworderid > 1) and (tmporderId2 <> neworderid) then

select COUNT(orderid) into countOrderId2 from WaitList;
IF countOrderId2 >= neworderid then

select isremark, ConcludeEnterTime + 1 / 24 / 60 / 60, ReasonName
into isremark2, newEntertime2, ReasonName2
from WaitList
where orderid = neworderid - 1;

ELSE

select isremark, ConcludeEnterTime + 1 / 24 / 60 / 60, ReasonName
into isremark2, newEntertime2, ReasonName2
from WaitList
where orderid = countOrderId2 - 1;
END if;
–print ‘新序号’+cast(neworderid as varchar2(30))+‘;排序时间:’+cast(newEntertime2 as varchar2(30))
update WaitList_mz
set isremark = isremark2,
newentertime = newEntertime2,
remark1 = ReasonName,
CallbackReason = ReasonName2,
curstatus = 0,
issendled = 0,
issound = 0,
IfTurnEarlier = 1
where wlID = smsno;
update stat_mz set memo = ReasonName where waitid = smsno;
O_Error := O_Error + O_Error;

end if;
end;
end;
/* if Flag<2 THEN

select Error INTO Error,ErrMsg INTO ErrMsg FROM DUAL;
end IF;/
–这一段不了解业务含义
/

select wlID,isremark,EnterTime=Convert(datetime,EnterTime,121),NewEnterTime,ConcludeEnterTime,qno
From v_JH_waitlist where CtrllerID=CtrllerID and QueueID=QueueID
and worktype=worktype
and datediff(d,EnterTime,sysdate)=0 and curstatus=0
Order by isremark,ConcludeEnterTime,qno
/

exception
when others then
rollback;
BEGIN
DECLARE
o_error_number int;
o_error_message nvarchar2(2048);
o_error_severity int;
o_error_state int;
o_error_line int;
o_error_procedure nvarchar2(126);
o_user_name nvarchar2(128);
o_host_name nvarchar2(128);
begin

o_error_number := SQLCODE;
o_error_message := sqlerrm || ErrMsg;
o_error_severity := null; –ERROR_SEVERITY();
o_error_state := null; –ERROR_STATE();
o_error_line := dbms_utility.format_error_backtrace();
o_error_procedure := fn_getname();
o_user_name := user; –SUSER_SNAME();
o_host_name := null; –HOST_NAME();
/
INSERT into dbo.Mx_ErrorLog
(ferror_number,
ferror_message,
ferror_severity,
ferror_state,
ferror_line,
ferror_procedure,
fuser_name,
fhost_name,
Findate)
VALUES
(o_error_number,
o_error_message,
o_error_severity,
o_error_state,
o_error_line,
o_error_procedure,
o_user_name,
o_host_name,
sysdate);
commit;*/
EXECUTE IMMEDIATE Q‘{ SELECT ‘User: :1,
Host: :2, Procedure: :3, Error :4, Level :5,
State :6, Line :7, Message: :8
FROM DUAL }’

INTO o_error_message
USING o_user_name, o_host_name, o_error_procedure, o_error_number, o_error_severity, o_error_state, o_error_line, o_error_message;
Raise_application_error(-20001, o_error_message);

end;
END;
END;
/

img


LINK:https://ask.csdn.net/questions/7723523?answer=53799319
SOURCE:CSDN_ASK
ASK_ID:7724744
ANSWER_ID:53799299
TITLE:在sql里查询平均中的最大值
ANSWER:

只要一个值:


select max(avgs) from (
select sno,avg(grade) as avgs
from stu_course
group by sno) t

保留平均值:


select sno,avg(grade) as avgs,
max(avg(grade)) over() maxs
from stu_course
group by sno

LINK:https://ask.csdn.net/questions/7724744?answer=53799299
SOURCE:CSDN_ASK
ASK_ID:7721598
ANSWER_ID:53798242
TITLE:docker部署oracle11g出问题了
ANSWER:

1521不行就1522,
5521有可能被docker禁用或者被主机占用。
另外就是你可以换个docker镜像,我现在用的这个,挺正常的,构建代码也是开源的


wnameless/oracle-xe-11g-r2

LINK:https://ask.csdn.net/questions/7721598?answer=53798242
SOURCE:CSDN_ASK
ASK_ID:7722182
ANSWER_ID:53798235
TITLE:取opstaion的手机号码信息(符合11位长度的数字),若不符合手机号规则,则置空值
ANSWER:
select regexp_substr(opstaion,‘\d{11}’) from a

img


LINK:https://ask.csdn.net/questions/7722182?answer=53798235
SOURCE:CSDN_ASK
ASK_ID:7723093
ANSWER_ID:53798229
TITLE:oracle求上一季度的数据
ANSWER:
select zzz.
from zzz
where decode(to_char(sysdate, ‘q’), ‘1’, ‘4’, ‘2’, ‘1’, ‘3’, ‘2’, ‘4’, ‘3’) =
to_char(to_date(yf, ‘yyyymm’), ‘q’)
and decode(to_char(sysdate, ‘q’),
‘1’,
to_char(sysdate, ‘yyyy’) - 1,
substr(yf, 1, 4)) = substr(yf, 1, 4)

img




加个开窗函数字段就好了


select zzz.,avg(fs) over() avg_fs
from zzz
where decode(to_char(sysdate, ‘q’), ‘1’, ‘4’, ‘2’, ‘1’, ‘3’, ‘2’, ‘4’, ‘3’) =
to_char(to_date(yf, ‘yyyymm’), ‘q’)
and decode(to_char(sysdate, ‘q’),
‘1’,
to_char(sysdate, ‘yyyy’) - 1,
substr(yf, 1, 4)) = substr(yf, 1, 4)

LINK:https://ask.csdn.net/questions/7723093?answer=53798229
SOURCE:CSDN_ASK
ASK_ID:7723629
ANSWER_ID:53798222
TITLE:mysql初学者,想问一下为什么修改字符集不能加if not exists我加了就改不了。
ANSWER:

因为没这种语法,而且逻辑上也说不过去。
"if not exists" 的意思是 “如果不存在,就…”,这个只能针对create操作,"如果不存在,则创建",这多么合理。
但像drop和alter,总不能“如果不存在这个数据库就删除这个数据库”或者“如果不存在这个数据库就修改这个数据库”吧?


LINK:https://ask.csdn.net/questions/7723629?answer=53798222
SOURCE:CSDN_ASK
ASK_ID:7723728
ANSWER_ID:53798212
TITLE:请问什么是标量子查询?
ANSWER:

你这样写sql,执行会报语法错误。
一个标量子查询是作为select后面的一个字段,因此注定只能返回一行一列,如果查了多个列,就会报错


LINK:https://ask.csdn.net/questions/7723728?answer=53798212
SOURCE:CSDN_ASK
ASK_ID:7717561
ANSWER_ID:53790348
TITLE:SQL Server条件语句
ANSWER:
select 关键字段 fromgroup by 关键字段 
having count( case when A字段 is null then 1 else null end )=0

LINK:https://ask.csdn.net/questions/7717561?answer=53790348
SOURCE:CSDN_ASK
ASK_ID:7716875
ANSWER_ID:53790337
TITLE:oracle hints 优化器 /+full(t)/在测试环境生效,使用了全表扫描;生产环境不生效,仍然走了索引
ANSWER:

因为CBO觉得你加的这个hint太离谱了,消耗成本过高,因此它自行选择了成本更低的方式。
你可以先尝试一下更新这个表的统计信息再试,如果依旧没有full,说明可能的确不适合用full
另外,不同版本的数据库,CBO算法不完全一样


LINK:https://ask.csdn.net/questions/7716875?answer=53790337
SOURCE:CSDN_ASK
ASK_ID:7717015
ANSWER_ID:53790333
TITLE:SQL如何查询表格每一行数据,并返回第一个不为空的数据的列名
ANSWER:

用coalesce函数


select coalesce(wk1,wk2,wk3,wk4,wk5,wk6,wk7,wk8,wk9,wk10) from

LINK:https://ask.csdn.net/questions/7717015?answer=53790333
SOURCE:CSDN_ASK
ASK_ID:7717382
ANSWER_ID:53790330
TITLE:sql查询结果作为条件循环
ANSWER:

这个要看你的数据库是什么,以及版本号是多少。
现在很多数据库都支持with递归查询,不需要写循环,你可以先用 "with 递归 sql"作为关键词搜索一下相关文章,如果不会的话再问,或者看我之前的一些回答


然后下面这个页面有大量的sql问答,就是数据量太大,加载有点慢,等加载完后可以按单个关键词在页面中搜索相关sql


LINK:https://ask.csdn.net/questions/7717382?answer=53790330
SOURCE:CSDN_ASK
ASK_ID:7716104
ANSWER_ID:53788980
TITLE:oracle创建的存储过程有问题,本人第一写有点不会,需要看下问题
ANSWER:

少了as,没有end loop


CREATE OR REPLACE PROCEDURE “test” as
BEGIN
FOR list IN (SELECT DISTINCT pmd.ACCOUNT_NUMBER AS ACCOUNT_NUMBER,
ppv.MLOC AS PPVMLOC,
ppv.BOM_NUM AS PPVBOM_NUM,
ppv.SERIALNUM AS PPVSERIALNUM
FROM PPS_MBOM_DETAILED_0415 pmd
LEFT JOIN (SELECT a.TOP_PLAN_NUM,
a.MLOC,
a.BOM_NUM,
a.SERIALNUM
FROM PPS_PLAN_VIN a
LEFT JOIN (SELECT TOP_PLAN_NUM,
max(VERSIONS) AS max_VERSIONS
FROM PPS_PLAN_VIN
GROUP BY TOP_PLAN_NUM) b
ON a.TOP_PLAN_NUM = b.TOP_PLAN_NUM
AND a.VERSIONS = b.max_VERSIONS) ppv
ON ppv.TOP_PLAN_NUM = pmd.account_number) loop

insert into PPS_MBOM_INFO_TEST a
values
(seq_pps_mbom_info_test.nextval.nextval,
list.ACCOUNT_NUMBER,
list.PPVMLOC,
list.PPVBOM_NUM,
list.PPVSERIALNUM);
END loop;
commit;
END;

LINK:https://ask.csdn.net/questions/7716104?answer=53788980
SOURCE:CSDN_ASK
ASK_ID:7716233
ANSWER_ID:53788976
TITLE:领导经常然后我们用varchar存数字,这样有什么好处吗?
ANSWER:

主要看你的“数字”是否存在算数计算,如果不存在计算,而且长度还较长,那么存成字符类型是合理的


LINK:https://ask.csdn.net/questions/7716233?answer=53788976
SOURCE:CSDN_ASK
ASK_ID:7716446
ANSWER_ID:53788972
TITLE:关于mysql中使用sql语句的group by语句后查询元组丢失的问题
ANSWER:

因为你group by了cno,每个cno就只会取一条,然后其他字段随机取一行。
这个语法在目前的标准sql语法里是不对的


LINK:https://ask.csdn.net/questions/7716446?answer=53788972
SOURCE:CSDN_ASK
ASK_ID:7713404
ANSWER_ID:53787965
TITLE:PLS-00103: 出现符号 "IN"在需要下列之一时,创建过程时报错
ANSWER:

in和out的位置不对


CREATE OR REPLACE PROCEDURE sp_test8( monthe in int,season out  varchar)

另外,oracle不建议使用varchar,而应该使用varchar2


LINK:https://ask.csdn.net/questions/7713404?answer=53787965
SOURCE:CSDN_ASK
ASK_ID:7714350
ANSWER_ID:53787751
TITLE:启动Docker desktop时一直处于starting状态之后产生堆栈跟踪错误
ANSWER:

把你操作系统环境变量path里的东西贴出来一下,看看是不是系统本来的一些环境变量被清掉了




把下面这些都加进去


C:\Windows\system32
C:\Windows
C:\Windows\System32\Wbem
C:\Windows\System32\WindowsPowerShell\v1.0<br/>C:\Windows\System32\OpenSSH<br/>%SystemRoot%\system32
%SystemRoot%
%SystemRoot%\System32\Wbem
%SYSTEMROOT%\System32\WindowsPowerShell\v1.0<br/>%SYSTEMROOT%\System32\OpenSSH<br/>

LINK:https://ask.csdn.net/questions/7714350?answer=53787751
SOURCE:CSDN_ASK
ASK_ID:7715592
ANSWER_ID:53787747
TITLE:sqlserver cast和convert 类型nvarchar(11)转换后的数据,和手工制作的’test’的普通字符串区别。
ANSWER:

数字没加引号,前面的0会被省略。其实你直接执行一下下面的这条sql就知道区别了


select convert(nvarchar(20),‘012345678’) a,convert(nvarchar(20),012345678) b

LINK:https://ask.csdn.net/questions/7715592?answer=53787747
SOURCE:CSDN_ASK
ASK_ID:7707327
ANSWER_ID:53778592
TITLE:oracle字符集问题
ANSWER:

你确定你连的是同一个数据库?在oracle官方文档中有说明



SELECT USERENV (‘language’) FROM DUAL; gives the session’s _ but the DATABASE character set not the client, so the value returned is not the client’s complete NLS_LANG setting!



翻译如下



SELECT USERENV (‘language’) FROM DUAL;得到当前会话的 语言_地区 以及 数据库字符集,不是客户端的字符集,所以它返回的值不是完整的客户端NLS_LANG设置!



也就是说,你linux那台机器连接的数据库的字符集是AL32UTF8;你用PLSQLDEV连接的数据库的字符集是ZHS16GBK,连接的是两个不同的数据库。


能通过环境变量保持一致的,只有前面的 语言和地区,而后面的字符集无论怎么改,只要连的是同一个数据库,那么都会保持一致。
详见


LINK:https://ask.csdn.net/questions/7707327?answer=53778592
SOURCE:CSDN_ASK
ASK_ID:7708665
ANSWER_ID:53778575
TITLE:请教一个SQL问题,画线这段语句是什么意思?
ANSWER:

拼个字符串作为一个字段,这个字段内的内容是 "select * from 用户名.表名"


LINK:https://ask.csdn.net/questions/7708665?answer=53778575
SOURCE:CSDN_ASK
ASK_ID:7706145
ANSWER_ID:53775919
TITLE:mysql创建表ERROR 1064 (42000): You have an error in your SQL syntax
ANSWER:

放大了仔细看,这两玩意不一样的,一个是尖括号,一个是圆括号

img


create table user
(id char(6) not null primary key,
name char(6) not null,
major char(10) not null);

LINK:https://ask.csdn.net/questions/7706145?answer=53775919
SOURCE:CSDN_ASK
ASK_ID:7704560
ANSWER_ID:53775179
TITLE:Oracle中文乱码问题
ANSWER:

首先你要确认一下是数据乱码了还是你本地客户端和代码页字符集不匹配。
本地客户端的字符集是在环境变量NLS_LANG中设置的,windows和linux都有这个环境变量,所以就算你是华为的工作环境,也同样是可以设置的.
至于代码页字符集,其实就是你程序的查询窗口定义的字符集,或者是你使用的开发语言定义的字符集。
详细可以参考我这篇文章


LINK:https://ask.csdn.net/questions/7704560?answer=53775179
SOURCE:CSDN_ASK
ASK_ID:7705214
ANSWER_ID:53775169
TITLE:通过一个字段的三个参数(三个参数绑定为一个条件)怎么取对应的字段的值
ANSWER:
where (字段1,字段2) in (
(字段1参数1,字段2参数1),
(字段1参数1,字段2参数2),
(字段1参数1,字段2参数3),
(字段1参数2,字段2参数1),
(字段1参数2,字段2参数2),
(字段1参数2,字段2参数3),
)

或者


where (
字段1=字段1参数1 and 字段2 in (字段2参数1,字段2参数2,字段2参数3)
) or (
字段1=字段1参数2 and 字段2 in (字段2参数1,字段2参数2,字段2参数3)
)

LINK:https://ask.csdn.net/questions/7705214?answer=53775169
SOURCE:CSDN_ASK
ASK_ID:7705342
ANSWER_ID:53775154
TITLE:oracle通过表名查表内全部数据的sql是什么
ANSWER:
 select b.table_name,b.comments,a.created,a.LAST_DDL_TIME
from dba_objects a, dba_tab_comments b
where a.object_name = b.table_name
and a.owner = b.owner
and a.owner = ‘用户名’
and b.table_name in (‘表名1’,‘表名2’)

LINK:https://ask.csdn.net/questions/7705342?answer=53775154
SOURCE:CSDN_ASK
ASK_ID:7704973
ANSWER_ID:53774246
TITLE:orcale中如何用cast将数据类型为Enum的字段转为文本类型啊?
ANSWER:

ENUM类型常见于MYSQL数据库中,
oracle数据库里没有enum类型,因此不存在你说的转换。


LINK:https://ask.csdn.net/questions/7704973?answer=53774246
SOURCE:CSDN_ASK
ASK_ID:7704914
ANSWER_ID:53774239
TITLE:Python有一句话的对错
ANSWER:

要把计算机科学理解成一种工具,一种用来解决其他领域中遇到的问题的工具,而不是为了研究计算机科学而去研究计算机科学,不能本末倒置。


LINK:https://ask.csdn.net/questions/7704914?answer=53774239
SOURCE:CSDN_ASK
ASK_ID:7704501
ANSWER_ID:53773654
TITLE:利用union谓词查询
ANSWER:

把下面的where条件改下

img


你写的那个存在条件,由于没有和其他表关联,所以只要有一条满足,返回就是true,就相当于没有where条件了,查的是全部记录


LINK:https://ask.csdn.net/questions/7704501?answer=53773654
SOURCE:CSDN_ASK
ASK_ID:7704091
ANSWER_ID:53773173
TITLE:Windows11 sqlplus中文乱码问题
ANSWER:

在oracle数据库中,任何以select形式查到的字符集,都是客户端字符集,用select是查不到服务端字符集的(网上很多文章都是错的)。
对于oracle数据库而言,查询显示乱码,是由于客户端字符集和代码页字符集不一致导致的,与服务端字符集关系不大。
在你这个例子里,客户端字符集在环境变量中配置,代码页字符集即为cmd窗口的字符集,可以通过输入chcp 936切换成gbk,或者输入chcp 65001切换成utf8,之后再连接数据库操作。
建议你把环境变量NLS_LANG改成



SIMPLIFIED CHINESE_CHINA.AL32UTF8



然后打开cmd,输入chcp 65001回车,再连接数据库执行查询。
另外,如果数据本身就已经是乱码进的数据库,你怎么改设置也还会是乱码,这种情况需要进行对数据进行转码处理了。


更多与oracle字符集的介绍,可以参考我这篇文章


LINK:https://ask.csdn.net/questions/7704091?answer=53773173
SOURCE:CSDN_ASK
ASK_ID:7700849
ANSWER_ID:53768369
TITLE:MySQL分组求结果未全部输出
ANSWER:
SELECT education,gender,AVG(year(now())-year(date_of_birth)) AS 平均年龄 
FROM tbl_employees GROUP BY education,gender

select的非聚合函数字段,都要放到group by 后面


LINK:https://ask.csdn.net/questions/7700849?answer=53768369
SOURCE:CSDN_ASK
ASK_ID:7700295
ANSWER_ID:53767814
TITLE:SQL如何获取月汇总数据和年汇总数据?
ANSWER:

请说明一下你用的是什么数据库,以及数据库版本,还有你这个日期字段的数据类型是什么。
如果是要分别查两个汇总,直接写where条件限定时间,然后sum即可。
如果是要同时查两个汇总,那么where条件里写时间最大的范围,在sum里写case when条件来限定时间。
然后重点就是根据一个指定的日期计算月初和计算年初是分别哪一天了,这关键就看你用什么数据库,因为不同数据库计算日期的函数及方式不一样,而且还要根据字段类型来选择不同的处理方式




把下面where条件中指定的这个日期替换成你的变量即可


create table test_20220424 (a smalldatetime);
insert into test_20220424 values (‘2022-04-24’);
insert into test_20220424 values (‘2022-04-01’);
insert into test_20220424 values (‘2022-01-24’);
insert into test_20220424 values (‘2022-03-24’);

–指定日期的月初至指定日期
select from test_20220424 where
a between convert(varchar(8),‘2022-04-24’,120)+‘1’ and ‘2022-04-24’;

–指定日期的年初至指定日期
select
from test_20220424 where
a between convert(char(4),year(‘2022-04-24’))+‘0101’ and ‘2022-04-24’;

img




用dateadd函数计算,减一年,就是去年当日


dateAdd(year,-1,‘2022-04-24’)

然后拿这个去年当日,套用上面的方法,可得去年当日的当月


convert(varchar(8),dateAdd(year,-1,‘2022-04-24’),120)+‘1

同理,拿今年的年初 convert(char(4),year(‘2022-04-24’))+‘0101’ 减1年,就能得去年的年初


dateAdd(year,-1,convert(char(4),year(‘2022-04-24’))+‘0101’)

当然也可以用上面计算年初的方式,传入去年当日 dateAdd(year,-1,‘2022-04-24’)


convert(char(4),year(dateAdd(year,-1,‘2022-04-24’)))+‘0101

日期计算这玩意就是层层套娃,只要知道几个基本的函数,转换加减就行了
至于between and语法不需要我解释了吧?


LINK:https://ask.csdn.net/questions/7700295?answer=53767814
SOURCE:CSDN_ASK
ASK_ID:7700303
ANSWER_ID:53767806
TITLE:orcle中如何实现 excel countif(A:A,A1)
ANSWER:

如果是要得到去重后的结果并且显示每个值有多少条相同的记录,直接用count


select A,count(1)  fromgroup by A

如果是想保留原始记录行数,新增一列显示本行的这个值有多少个相同的值,用开窗函数count


select A,count(1)  over () from

LINK:https://ask.csdn.net/questions/7700303?answer=53767806
SOURCE:CSDN_ASK
ASK_ID:7700356
ANSWER_ID:53767800
TITLE:ORACLE DEVELOPER 对标量参数赋多个值
ANSWER:

xmltype是一种类型,而不是值,要打开后才能看到里面的数据,或者转换类型来直接显示,比如用to_number转换成数字显示


select to_number(column_value) from xmltable(‘1,2,3’);

img


另外再给你几种方式


select regexp_substr(‘1,2,3’,  ‘[^,]+’,1, level)
from dual
connect by level <= regexp_count(‘1,2,3’, ‘[^,]+’)

img


select * from table(ora_mining_number_nt(1,2,3));

img


LINK:https://ask.csdn.net/questions/7700356?answer=53767800
SOURCE:CSDN_ASK
ASK_ID:7700024
ANSWER_ID:53767368
TITLE:SQL创建表,出现参数或变量:不能对数据类型bit指定列宽
ANSWER:

bit表示 一个二进制数字,只能为0或者1,所以不能定义长度,也不能放除0或1或null以外的值。
你如果要用1和2,把类型改成int吧


LINK:https://ask.csdn.net/questions/7700024?answer=53767368
SOURCE:CSDN_ASK
ASK_ID:7699700
ANSWER_ID:53767361
TITLE:以下mysql查询语句如何建立索引?
ANSWER:

还需要了解一下A/B/C三个字段的值的分布,比如去重后只有两个值的,或者每个值都不一样的,还有一半的值一样另一半的值都不一样。。。等等不同情况,需要结合这些值的情况,包括你数据的增删改场景,才能综合判断该如何建索引。
有些人会粗暴的直接根据你这3个sql建三个索引,但这是不可取的,因为索引多了会影响写入性能,还占用了大量的存储空间。


LINK:https://ask.csdn.net/questions/7699700?answer=53767361
SOURCE:CSDN_ASK
ASK_ID:7699703
ANSWER_ID:53767358
TITLE:oracle把一行拆分成多行,数据是1-18或者9-18这种组合。
ANSWER:

提sql题建议把表结构和模拟数据发出来,纯文字描述不一定描述得清楚,而且答题人还要自行去编写create table和insert语句,很浪费时间,这样就几乎没人会理你这种提问方式了。
我猜测,你这是一个表有18个列,想把这18个列做行列转换,变成18个行;第2个就是固定前8列,然后新增一列,新增的这一列来自于第9列到第18列的行列转换。
如果是我猜的这样,那么使用unpivot写法即可


create table test_20220423 (
c1 number,c2 number,c3 number,c4 number,c5 number,
c6 number,c7 number,c8 number,c9 number,c10 number,
c11 number,c12 number,c13 number,c14 number,
c15 number,c16 number,c17 number,c18 number
);
insert into test_20220423 values (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18);
commit;

select * from test_20220423 unpivot
(val for col in (c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16,c17,c18) );

select * from test_20220423 unpivot
(val for col in (c9,c10,c11,c12,c13,c14,c15,c16,c17,c18) );

img




下面是将字符串’1-18周’拆成1-18的这18行的方式


with t as
(select ‘1-18周’ a from dual)
select regexp_substr(replace(a, ‘周’), ‘[^-]+’, 1, 1) + level-1 b
from t
connect by regexp_substr(replace(a, ‘周’), ‘[^-]+’, 1, 1) + level-1 <=
regexp_substr(replace(a, ‘周’), ‘[^-]+’, 1, 2)

img


LINK:https://ask.csdn.net/questions/7699703?answer=53767358
SOURCE:CSDN_ASK
ASK_ID:7699705
ANSWER_ID:53767349
TITLE:【Mysql 多表关联优化】
ANSWER:

建议把背景描述一下,看看是个什么需求,具体问题具体分析,不能一上来就好像必须要进行大表join。
比如如果最终结果需要经过where过滤,且只返回少量数据,那么可以先针对两个表分别过滤,然后再join。
而且如果机器配置好的话,几十万的数据真不算大。




你想一下,join之后,难道就把这几十万都输出到前端展现么?难道前端或者用户不会先指定查询条件?如果有指定查询条件的话,就不再需要对全部的数据去进行join了呀。当你第一个表把数据过滤掉了绝大部分,再去左关联其他表,也就只会去找剩下的这几行。
就算是不输入任何查询条件,分页其实也算是个条件,比如每页十行,第一个表查前十行记录作为子查询,再左连接其他表,得到第一页的数据。
mysql是可以设定内存占用大小的。


LINK:https://ask.csdn.net/questions/7699705?answer=53767349
SOURCE:CSDN_ASK
ASK_ID:7699823
ANSWER_ID:53767344
TITLE:mysql RLIKE和LIKE会使用索引吗
ANSWER:

不能只看sql的,同一个sql,表的索引建的方式或者索引类型不一样,可能会出现不同的情况,实际还是要看执行计划。
大多数情况下来说,普通的索引都不支持like模糊查找,除非是全文索引。
所以针对你这两个条件,都是既可以走索引也可以不走索引


LINK:https://ask.csdn.net/questions/7699823?answer=53767344
SOURCE:CSDN_ASK
ASK_ID:7699333
ANSWER_ID:53766923
TITLE:sql server储存过程:超多表按关键字段合并成新表
ANSWER:

表不多的话,直接join就行了,但你这要200个表一起的话,join性能就抗不住了,需要分批join。
比如基表和表1join后得到一个临时表,然后临时表再join表2得到一个新的临时表,就这样一直循环下去。
至于代码编写,用拼接字符串的方式来拼接动态sql执行即可。
取字段的话,用Select name from syscolumns Where ID=OBJECT_ID('表名') and name <>'编号' 作为游标循环拼接字符串。


LINK:https://ask.csdn.net/questions/7699333?answer=53766923
SOURCE:CSDN_ASK
ASK_ID:7699430
ANSWER_ID:53766921
TITLE:前两个表怎样的SQL语句可以变成第三个表啊?
ANSWER:
select a.userid,a.item from 表1 a 
where not exists
(select 1 from 表2 b where
a.userid=b.userid and a.item=b.item)

LINK:https://ask.csdn.net/questions/7699430?answer=53766921
SOURCE:CSDN_ASK
ASK_ID:7699293
ANSWER_ID:53766676
TITLE:Microsoft Access定义表为什么会显示语法错误
ANSWER:

字段间要有逗号间隔


CREATE TABLE Student
(Sno CHAR(9) PRIMARY KEY,
Sname CHAR(20),
Ssex CHAR(2),
Sage SMALLINT,
Sdept CHAR(20)
);

LINK:https://ask.csdn.net/questions/7699293?answer=53766676
SOURCE:CSDN_ASK
ASK_ID:7698719
ANSWER_ID:53766675
TITLE:SQL如何在表中插入聚合语句
ANSWER:

能给个报错截图么?
如果你题目中的就是你执行的sql,那么肯定是会报错的,因为你括号不对,输成全角的了。
还有,既然是要算每个系,那肯定应该还要有个group by 系列呀。
另外,你这题目描述也有问题,“插入”肯定是insert,而且插入一定是插入新行,但是你这又要插入旧表,两个结构不一致的数据放在了同一个表里,原题真是这么描述的么?难道不是让你把比值更新到原表的每一行去么?


LINK:https://ask.csdn.net/questions/7698719?answer=53766675
SOURCE:CSDN_ASK
ASK_ID:7699198
ANSWER_ID:53766674
TITLE:数据库删除和保留问题
ANSWER:

不确定你机器配置怎么样,如果性能不行,就写过程分批处理;
如果性能比较好,那么直接用row_number对整个数据排个序号,然后 取 round(序号,-2)=序号 的,即为要保留的,同理,round(序号,-2)<>序号 的,即为要删除的。
但是,对于一个大表,要删除大量数据,保留小量数据,更常见的做法是把要保留的数据create table as 一个新表,然后修改表名替换即可,因为delete这个操作开销太大了,应该尽量避免大量的delete


LINK:https://ask.csdn.net/questions/7699198?answer=53766674
SOURCE:CSDN_ASK
ASK_ID:7698041
ANSWER_ID:53766673
TITLE:MySQL同样是WHERE关键字 为什么一个报错一个正确?
ANSWER:

因为你"NOT(employee_id"这个中间的括号是全角的,导致把这一串都当成一个字段了,
not在某些时候是很有用的,楼上说不会带来太大简化,不够恰当


LINK:https://ask.csdn.net/questions/7698041?answer=53766673
SOURCE:CSDN_ASK
ASK_ID:7698465
ANSWER_ID:53766672
TITLE:sql语句的问题,不知道能否达到这种效果
ANSWER:
select student_id,
max(case type when ‘yu’ then score end) yu,
max(case type when ‘shu’ then score end) shu,
max(case type when ‘ying’ then score end) ying,
max( time) time from 成绩表
group by student_id

LINK:https://ask.csdn.net/questions/7698465?answer=53766672
SOURCE:CSDN_ASK
ASK_ID:7698502
ANSWER_ID:53766670
TITLE:oracle存储过程编写,请专家指导
ANSWER:

题目里没写字段类型,自己改下


create procedure test_func(i_lzbh number) is
begin
for rec in (select t.rowid rd from tmp_house t where 楼幢编号 = i_lzbh) loop
update tmp_house
set 备注 = case
when 面积 <= 80 then
‘小户型’
when 面积 <= 140 then
‘中房型’
else
‘大户型’
end
where rowid=rec.rd;
end loop;
insert into tmp_test(户型 ,个数,总面积,平均面积)
select 备注, count(1), sum(面积), avg(面积)
from tmp_house where 楼幢编号 = i_lzbh
group by 备注;
commit;
end;

LINK:https://ask.csdn.net/questions/7698502?answer=53766670
SOURCE:CSDN_ASK
ASK_ID:7698717
ANSWER_ID:53766668
TITLE:mysql5.7 使用json_extract 没有数据,是什么情况?
ANSWER:

因为你这个json是个列表(以"[“开头,以”]“结尾),所以你定位的路径不对,要先取这个列表中的第一个元素,然后再往下找imageUrl。


select JSON_EXTRACT(title_image,‘$[0].imageUrl’) as cc , a.* from housing_investment a;

img


或者先把”[]"去掉,再用你写的这个来定位

img


LINK:https://ask.csdn.net/questions/7698717?answer=53766668
SOURCE:CSDN_ASK
ASK_ID:7699200
ANSWER_ID:53766664
TITLE:access 礼貌提问
ANSWER:

在select 后面加上 top 3即可,比如


SELECT top 31.ID, 表1.字段1
FROM1;

LINK:https://ask.csdn.net/questions/7699200?answer=53766664
SOURCE:CSDN_ASK
ASK_ID:7698006
ANSWER_ID:53765514
TITLE:如何动态的将mysql行转列
ANSWER:

纯select的sql是不能实现动态列的,sql必须在查询发出前就已经确定好有哪些列,包括列名和数据类型,这与sql解析器本身的逻辑有关。
就算是其他数据库中的pivot或者unpivot的写法,也都是要指定列(目前真正唯一支持动态列的可能只有oracle18c的多态表函数功能)。
对于一般的数据库,可以通过在存储过程中拼接动态sql字符串来执行,你可以搜一下 “动态sql”去了解一下,这也是在数据库里执行的,没有使用到其他开发语言。


LINK:https://ask.csdn.net/questions/7698006?answer=53765514
SOURCE:CSDN_ASK
ASK_ID:7698132
ANSWER_ID:53765427
TITLE:LISTAGG行转列查询缓慢
ANSWER:

F5执行计划贴一下,然后如果把LISTAGG这个列改成简单的count,时间消耗差异有多大?
另外,你用的oracle版本是多少?如果是在18c及之后,可以把within开始的后面一整段都去掉,即不进行组内排序,能省一点开销


LINK:https://ask.csdn.net/questions/7698132?answer=53765427
SOURCE:CSDN_ASK
ASK_ID:7698084
ANSWER_ID:53765325
TITLE:mysql select比limit先执行,那为什么加了limit的sql比查全部数据的sql执行更快?
ANSWER:

把数据读出来,通过网络传输到客户端内存,再由客户端把数据页面渲染出来,这些总得消耗时间吧


LINK:https://ask.csdn.net/questions/7698084?answer=53765325
SOURCE:CSDN_ASK
ASK_ID:7697650
ANSWER_ID:53765145
TITLE:导入sql文件,sql报错1064
ANSWER:

建议你用记事本打开一下这个sql文件看看,这玩意看上去不是纯sql文件,报错信息里还有sqlite的字样


LINK:https://ask.csdn.net/questions/7697650?answer=53765145
SOURCE:CSDN_ASK
ASK_ID:7697662
ANSWER_ID:53765140
TITLE:sqlserver 如何查询的同时并删除这行
ANSWER:

查询是为了输出数据,如果只是为了删除,那么你加where条件直接删除这条数据就行了,没必要再去查询它


LINK:https://ask.csdn.net/questions/7697662?answer=53765140
SOURCE:CSDN_ASK
ASK_ID:7697709
ANSWER_ID:53765139
TITLE:感觉语法没有错误,怎么改
ANSWER:

为啥子下面执行的显示是没加引号?
理论上是加了单引号就不会报这个错


LINK:https://ask.csdn.net/questions/7697709?answer=53765139
SOURCE:CSDN_ASK
ASK_ID:7697879
ANSWER_ID:53765125
TITLE:请问一下这种表结构是啥意思?
ANSWER:

图能不能截全点?看不出你这是一个表的字段内容还是别的什么东西。
如果是表的话,查看这个表的ddl建表语句就知道它每个字段是什么类型了。
肉眼看字段内容是无法准确识别字段类型的,必须以表结构定义为准




我见过不少数据库了,你这个真碰到我的盲区了,我竟然一时看不出这是啥子数据库。但是根据单词来分析,word应该是一种文本类型 类似于char;second应该是一种时间类型,而且很有可能是以秒为单位。至于asc,就可能要结合一下数据来看了,不确定是指的ascii还是指的排序中的asc,如果是排序中的asc,那么它就有可能是数字类型。
如果你能给一下数据库名称,倒是可以去找找官方文档的说明


LINK:https://ask.csdn.net/questions/7697879?answer=53765125
SOURCE:CSDN_ASK
ASK_ID:7697895
ANSWER_ID:53765122
TITLE:SQL 判断case when
ANSWER:
CASE WHEN status=5 THEN enddate ELSE null END  as enddate

LINK:https://ask.csdn.net/questions/7697895?answer=53765122
SOURCE:CSDN_ASK
ASK_ID:7697917
ANSWER_ID:53765115
TITLE:从字符串转换日期和/或时间时,转换失败
ANSWER:

贴一下你这个表的表结构,不确定你的日期是哪个字段;
或者直接用下面这个试试


insert into student values(‘22030809’,‘里斯’,‘男’,‘28’,‘计算机’,‘软件工程161’,null,null)

LINK:https://ask.csdn.net/questions/7697917?answer=53765115
SOURCE:CSDN_ASK
ASK_ID:7697386
ANSWER_ID:53764562
TITLE:关于order by 和group by 的约束问题
ANSWER:

在sql标准中,select后面的非聚合函数字段,必须都放到group by后面去。只有老版本的mysql没这个要求,因而会出现查询出来的数据出现随机性。其他数据库以及mysql8.0开始都是严格执行sql标准。
像你上面这个sql,应该加上 group by 订单.订购日期,订单.发货日期


LINK:https://ask.csdn.net/questions/7697386?answer=53764562
SOURCE:CSDN_ASK
ASK_ID:7697462
ANSWER_ID:53764553
TITLE:想要修改Windows主机里面hosts文件没有权限怎么办
ANSWER:

鼠标右键此文件,点属性-安全,添加你的电脑用户名,勾上完全控制的权限,确定,之后就能自由修改了。
或者,在开始菜单中,对着记事本程序鼠标右键,使用管理员身份打开,然后选择文件-打开,下面文件类型改成全部,定位到host文件的目录,打开host文件,也可以自由修改


LINK:https://ask.csdn.net/questions/7697462?answer=53764553
SOURCE:CSDN_ASK
ASK_ID:7697321
ANSWER_ID:53764261
TITLE:为什么over后面的半括号会有红线然后报错1064啊
ANSWER:

请检查你的mysql版本号,开窗函数要8.0及之后才支持


LINK:https://ask.csdn.net/questions/7697321?answer=53764261
SOURCE:CSDN_ASK
ASK_ID:7697268
ANSWER_ID:53764260
TITLE:求请教:ORACLE 按日期求最后一次销价,日期字段是VARCHAR
ANSWER:
SELECT SPID, JG ,RQ FROM 
(select A.*,B.RQ ,
ROW_NUMBER() OVER(PARTITION BY A.DJBH ORDER BY RQ DESC) RN
from A, B WHERE A.DJBH=B.DJBH) T
WHERE T.RN=1

LINK:https://ask.csdn.net/questions/7697268?answer=53764260
SOURCE:CSDN_ASK
ASK_ID:7697242
ANSWER_ID:53764249
TITLE:打开data studio 报错怎么办
ANSWER:

要安装个java 1.8,并配置好java_home的环境变量


LINK:https://ask.csdn.net/questions/7697242?answer=53764249
SOURCE:CSDN_ASK
ASK_ID:7696960
ANSWER_ID:53763884
TITLE:sql语句表的别名问题,第二个sql省略了 子select 的表名
ANSWER:

表的别名不能接在from后面。
你第一个sql实际上把B表查了两次。
另外不确定你最后是不是省略了A表和B表的关联条件,这个不关联会导致数据行数翻倍。常见的写法应该长这样


select
(select name from B b
where a.id=b.id) name
from A a

或者


select b.name  name
from A a left join B b
on a.id=b.id

如果数据都能匹配上的话,还可以这么写


select b.name  name
from A a , B b
where a.id=b.id

如果要多次使用某个表,可以使用with,例如


with b as (select * from B)
select
(select name from b
where a.id=b.id) name
from A a,b;

LINK:https://ask.csdn.net/questions/7696960?answer=53763884
SOURCE:CSDN_ASK
ASK_ID:7696361
ANSWER_ID:53763043
TITLE:请问做网页开发mongodb能完全代替mysql吗?
ANSWER:

不能,两者根本不是一个类型的数据库。
mongodb是文档数据库,mysql是关系型数据库,两者各有所长,
应针对不同的数据本身的特点及数据的应用方式来选择将不同的数据存在不同的数据库中


LINK:https://ask.csdn.net/questions/7696361?answer=53763043
SOURCE:CSDN_ASK
ASK_ID:7694774
ANSWER_ID:53763001
TITLE:问一个sql中的group by问题
ANSWER:

group by后面不要带别名,select了啥就group by啥(除了聚合函数字段)


select a.stt_psn_type, a.med_pool_type, a.insutype,
nvl(a.grp_type, ‘A’) grp_type, nvl(sum(n), 0) amt
from tp.mdtrt_d a,
tp.setl_d b,
tp.setl_ext_d c
where a.mdtrt_id = b.mdtrt_id
and b.setl_id = c.setl_id
and a.vali_flag = ‘1’
and b.new_setl_id is null
and b.init_setl_id is null
and c.code = ‘dejzyzje’
and nvl(c.n, 0) <> 0
and exists (select ‘X’
from tp.setl_ext_d
where setl_id = c.setl_id
and code = ‘hxjsh-2’
and c in (select year_end_setl_id
from tp.year_end_setl_d
where dfr_id = ‘1’))
group by a.stt_psn_type, a.med_pool_type, a.insutype,
nvl(a.grp_type, ‘A’)

LINK:https://ask.csdn.net/questions/7694774?answer=53763001
SOURCE:CSDN_ASK
ASK_ID:7694945
ANSWER_ID:53762993
TITLE:mysql查询数据的时候,怎么把缺少的日期补齐
ANSWER:
  • 方案一,mysql8.0可以用with递归出一个完整的日期列表
    with RECURSIVE  cte as
    (select date‘2019-01-01’ d
    union all
    select DATE_ADD(d, INTERVAL 1 DAY)
    from cte
    where DATE_ADD(d, INTERVAL 1 DAY) <= date‘2019-12-31’)
    select d from cte


img


  • 方案二,借用一个带递增列的系统表
    select DATE_ADD(date‘2019-01-01’, INTERVAL help_topic_id DAY)
    from mysql.help_topic where help_topic_id<=180


img


LINK:https://ask.csdn.net/questions/7694945?answer=53762993
SOURCE:CSDN_ASK
ASK_ID:7695713
ANSWER_ID:53762952
TITLE:SQL怎样统计一段日期范围内每天晚上20:00到次日早上8:00所有的数据?
ANSWER:

不同的数据库,时间处理函数不一样,但是思路是一样的,即让时间进行偏移,让两个时间点都落在一天内,就可以进行group by 了。
比如你是想统计 "每天晚上20:00到次日早上8:00"(这里应该为7:59:59,否则要多减1秒才能放到前一天),那么可以把字段减8个小时,条件其实就变成了
“每天12:00:00到23:59:59”,再把日期给格式化成年月日,group by 这个日期就可以愉快的sum了


LINK:https://ask.csdn.net/questions/7695713?answer=53762952
SOURCE:CSDN_ASK
ASK_ID:7695891
ANSWER_ID:53762904
TITLE:MYSQL 的分页语句怎样转换成SQLserver的?
ANSWER:

sqlserver 限定行数的写法为 top


在sqlserver2012后支持 OFFSET 和 FETCH


LINK:https://ask.csdn.net/questions/7695891?answer=53762904
SOURCE:CSDN_ASK
ASK_ID:7695998
ANSWER_ID:53762896
TITLE:动态sql语句中的表没有被dba_dependencies查询到
ANSWER:

动态sql肯定是在dba_dependencies查不到的,因为动态sql就是个字符串文本而已,oracle在编译阶段不会对这些字符串进行任何校验,你想怎么拼接就可以怎么拼接,只有在执行到对应的execute immediate 的时候才会对动态sql的合法性进行校验,因此oracle无法提前知晓依赖关系。


declare
a varchar2(40) := ‘dba’;
b varchar2(40) := ‘_’;
c varchar2(40) := ‘views’;
i number;
begin
execute immediate 'select count(1) from ' || a || b || c
into i;
end;

比如这个例子,整个代码里不包含"dba_views",但实际上查的又是“dba_views”这个视图,如果把参数c的值换成别的,同样的代码查询的又是不同的视图了


LINK:https://ask.csdn.net/questions/7695998?answer=53762896
SOURCE:CSDN_ASK
ASK_ID:7696134
ANSWER_ID:53762881
TITLE:sql语句获取数据库最大时间,求范围
ANSWER:

你这个sql逻辑不对,语法也不对。
首先括号就没成对,然后where 后面是不能出现聚合函数来作为条件的,聚合函数条件只能放在having后面。
你这里的where是想把不同的行放到一行来比较,只能先用开窗函数把两行的值拉到一行,再去计算。
建议提供原始表结构及数据样本,并用文字说明你想要实现的逻辑,最好能用表格举例


LINK:https://ask.csdn.net/questions/7696134?answer=53762881
SOURCE:CSDN_ASK
ASK_ID:7696145
ANSWER_ID:53762875
TITLE:好奇set语句的底层原理实现
ANSWER:

底层处理是没有"年龄"概念的,你这个操作就是简单的把一个数字加1,然后更新(update)到这个字段上而已。再底层一点,就得扯到二进制上去了。
如果要实现动态的年龄,完全可以改成存个出生日期(或者只存出生年份),然后计算当前年份和出生年份的差即可获得年龄,也不需要每年去更新数据了


LINK:https://ask.csdn.net/questions/7696145?answer=53762875
SOURCE:CSDN_ASK
ASK_ID:7696190
ANSWER_ID:53762862
TITLE:MySQL 数据库疑问 查询学生平均分大于60的结果
ANSWER:

第一条sql中的子查询,查出来的是12个不同的值,而不是行记录,然后再从sc表里去找满足这12个值的行记录,可以找到有37行(等同于 in ('11111','2222','3333','4444','5555',…))。
第二条sql,把行记录用distinct去重后,得到的是12个值,所以count就是12了


LINK:https://ask.csdn.net/questions/7696190?answer=53762862
SOURCE:CSDN_ASK
ASK_ID:7696065
ANSWER_ID:53762766
TITLE:sqlserver 今天收到一个奇怪的需求 想大家提供我点思路
ANSWER:

使用开窗函数的滑动窗口即可


select t.*,
sum(Qty) over(partition by CPNum order by DocDate) JCSL
from table1 t


sqlserver2008还不支持开窗函数中用order by,至少要到sqlserver2012.
所以你这个问题只能用循环去解决了


LINK:https://ask.csdn.net/questions/7696065?answer=53762766
SOURCE:CSDN_ASK
ASK_ID:7694551
ANSWER_ID:53761686
TITLE:Oracle 存储过程 无法执行
ANSWER:

只有在命令行里才能用exec命令来执行存储过程,在sql窗口中一般都是用下面这种方式来执行的


begin
存储过程名称(参数1,参数2);
end;
/

LINK:https://ask.csdn.net/questions/7694551?answer=53761686
SOURCE:CSDN_ASK
ASK_ID:7694843
ANSWER_ID:53761680
TITLE:clickhouse中查询某值每次变化的时间
ANSWER:

clickehouse支持窗口函数,可以使用lag配合sum来获取变化的位置




大概像下面这样,我这里没数据环境不好测试。


select fanId,min(create_time) create_time from (
select t.*,
sum(lag) over (PARTITION BY fanId ORDER BY create_time) s from
(select id ,create_time, DS ,fanId,
case when any(DS) OVER (PARTITION BY fanId ORDER BY create_time ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) = DS
then 0 else 1 end lag
from fan) t) t2
group by fanId,s

原理就是上一行和当前行相等时计为0,不等时计为1,然后使用滑动窗口求和,就能在每次数据变化的时候加1,这样就能把数据按顺序切分开了,再按这个字段group by,就可以取每组最大和最小的时间


LINK:https://ask.csdn.net/questions/7694843?answer=53761680
SOURCE:CSDN_ASK
ASK_ID:7695347
ANSWER_ID:53761672
TITLE:Mysql用source导入sql文件老是显示,unknown command ‘\b’.,用了帖子里大家说的解决办法还是不行,我是不是命令没输正确,刚开始自学,确实没办法了,鞠躬解答
ANSWER:

你的sql文件里有"\b"这个东西,不符合sql语法,无法识别


LINK:https://ask.csdn.net/questions/7695347?answer=53761672
SOURCE:CSDN_ASK
ASK_ID:7695090
ANSWER_ID:53761667
TITLE:这是个MYSQL里的条件函数,我想用Oracle的写法,但是都没有成功!不知道哪里有问题?
ANSWER:

group by 后面把select的非聚合函数的字段或表达式放进去就行了,你这里是select的case when,那么group by后面也要有同样的case when


select case when age < 25 or age is null
then “25岁以下”
when age >= 25 then “25岁及以上”
end as age_cut,
count(*) number
from user_profile
group by case when age < 25 or age is null
then “25岁以下”
when age >= 25 then “25岁及以上”
end;

LINK:https://ask.csdn.net/questions/7695090?answer=53761667
SOURCE:CSDN_ASK
ASK_ID:7691782
ANSWER_ID:53760580
TITLE:Oracle 在视图对象中看不见视图,但用select语句可查询到视图数据
ANSWER:

有以下几种可能


  1. 它不是视图,而是个表或者是个物化视图
  2. 它不在你当前用户下

LINK:https://ask.csdn.net/questions/7691782?answer=53760580
SOURCE:CSDN_ASK
ASK_ID:7691864
ANSWER_ID:53760575
TITLE:Oracle表关联发散
ANSWER:

因为你没写几个表之间的关联条件,导致产生了笛卡尔积,一个表的每一行都可以和另一个表的每一行匹配。正常的表关联应该类似下面这样


select * from a,b where a.字段名=b.字段名;
—或者
select * from a join n on a.字段名=b.字段名;

LINK:https://ask.csdn.net/questions/7691864?answer=53760575
SOURCE:CSDN_ASK
ASK_ID:7692090
ANSWER_ID:53760560
TITLE:下面这段SQL能否用索引优化查询性能
ANSWER:

建议用having替代where条件,减少一层嵌套。然后建议用join替代这个exists条件。因为很明显里面的这个sql才应该是主驱动表,条件都是基于b表的,应该先确定要查哪些cst_id后,再用这些cst_id查a表。而不是针对a表的每一行去查哪些cst_id满足条件


LINK:https://ask.csdn.net/questions/7692090?answer=53760560
SOURCE:CSDN_ASK
ASK_ID:7693402
ANSWER_ID:53760513
TITLE:如何完成多表的字段统一
ANSWER:

题主没说明是想改表结构还是说在sql语法代码上进行兼容。如果是改表结构,这对之前的程序逻辑会有影响可能会需要大量调整程序逻辑。如果是改sql,只要用函数to_number转换一下这个字段就行了


LINK:https://ask.csdn.net/questions/7693402?answer=53760513
SOURCE:CSDN_ASK
ASK_ID:7693668
ANSWER_ID:53760507
TITLE:mysql创建的视图查询却是空的怎么办?
ANSWER:

先单独查xs表,并写条件 xs.专业名='计算机',看能不能查到记录。如果能查到,再随便取一个学号,单独查xs_kc表,看找不找得到记录。


LINK:https://ask.csdn.net/questions/7693668?answer=53760507
SOURCE:CSDN_ASK
ASK_ID:7693703
ANSWER_ID:53760501
TITLE:MySQL数据case when查询怎么将0的数据显示出来
ANSWER:

如果你表里面本就没有对应的数据,是count不出一条新的记录的。此时可以多次查询然后再union all或者分成不同的字段查询再进行行列转换


LINK:https://ask.csdn.net/questions/7693703?answer=53760501
SOURCE:CSDN_ASK
ASK_ID:7694127
ANSWER_ID:53760480
TITLE:请问,为什么sql里面的least() 函数用不了?
ANSWER:

不同数据库支持的函数是有区别的,least函数在mysql和oracle中是支持的,在sqlserver中不支持


LINK:https://ask.csdn.net/questions/7694127?answer=53760480
SOURCE:CSDN_ASK
ASK_ID:7694200
ANSWER_ID:53760472
TITLE:视图中会使用基表的索引吗
ANSWER:

这个建议查看一下执行计划,可能会使用也可能不会使用,这个要看数据库本身的优化。会使用时,说明数据库自动进行了谓词内推


LINK:https://ask.csdn.net/questions/7694200?answer=53760472
SOURCE:CSDN_ASK
ASK_ID:7694362
ANSWER_ID:53760462
TITLE:SQL数据库查询order by排序问题DATE类型和TIME类型字段排序
ANSWER:

sqlserver不支持limit语法,请使用top语法或者开窗函数row_number


火鸟数据库简单语法可参考这篇文章


select first 10 templateid,code,name from template ;
select first 10 skip 10 templateid,code,name from template ;
select * from shop rows 1 to 10; –firebird2.0支持这种写法

LINK:https://ask.csdn.net/questions/7694362?answer=53760462
SOURCE:CSDN_ASK
ASK_ID:7694427
ANSWER_ID:53760459
TITLE:想要实现一个批量提交作(zuo)业题(mu)目,应该怎么在数据库中识别这次提交的ti’mu有哪些方便我下次渲染?怎么给该次提交一个唯一标识
ANSWER:

数据库里建两个表,一个记录批次,每行为一个批次,有主键id作为批次id,然后第二个表记录题目明细,并记录对应的批次id。然后页面上可以显示批次id列表或者可以指定批次id查询题目明细


LINK:https://ask.csdn.net/questions/7694427?answer=53760459
SOURCE:CSDN_ASK
ASK_ID:7688676
ANSWER_ID:53753845
TITLE:子查询作为表时,表外加条件查询效率特别慢。
ANSWER:

你这sql和下面这个貌似是等价的


SELECT STOCK_NAME,
TIME_TO_MARKET(T.STOCK_NAME) TRADE_DAYS,
COUNT(1) STOCK_COUNT,
CASE WHEN TIME_TO_MARKET(T.STOCK_NAME) = T2.STOCK_COUNT THEN
1 ELSE 0 END TF
FROM JQDATA.ORDER_ACTIVITIES
GROUP BY STOCK_NAME
having TIME_TO_MARKET(T.STOCK_NAME) <> COUNT(1)

其实效率点应该先考虑一下这个TIME_TO_MARKET自定义函数,毕竟这玩意要作为条件使用,看能不能把逻辑拆开,放到sql里


LINK:https://ask.csdn.net/questions/7688676?answer=53753845
SOURCE:CSDN_ASK
ASK_ID:7688169
ANSWER_ID:53753293
TITLE:SQL 查找用户的疑似小号
ANSWER:

直接把所有帖子按顺序拼成一个字符串,再判断和wang的是否相等即可


select user_id from (
select user_id,group_concat(post_id ORDER BY post_id) g ,
max(case when user_id=‘wang’ then group_concat(post_id ORDER BY post_id) end ) over() w
from remark group by user_id) t
where g=w and user_id<>‘wang’

LINK:https://ask.csdn.net/questions/7688169?answer=53753293
SOURCE:CSDN_ASK
ASK_ID:7688216
ANSWER_ID:53753279
TITLE:mysql Navicat软件[Err]1055错误
ANSWER:
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,‘ONLY_FULL_GROUP_BY’,‘’)); 

改完后重启数据库。
另外,其实强烈不建议改这个参数,我倒是建议你换一个新版本的navicat,或者用navicat Premium。


LINK:https://ask.csdn.net/questions/7688216?answer=53753279
SOURCE:CSDN_ASK
ASK_ID:7688262
ANSWER_ID:53753252
TITLE:出现这种错误是怎么回事啊
ANSWER:

你这是sql里的变量没替换掉吧,数据库抛出的语法错误提示你执行的sql长这样

img


这当然不能执行呀,你得把具体的表名字段名还有where条件放进去


LINK:https://ask.csdn.net/questions/7688262?answer=53753252
SOURCE:CSDN_ASK
ASK_ID:7688317
ANSWER_ID:53753251
TITLE:用oracle数据库,查询起始月到当前月的销售环比,求环比=(本月-上月)/上月
ANSWER:

最容易的写法就一个自关联了,注意除数为0的特殊处理


select a.,
round(decode(b.SALE_MONEY,
0,
null,
(a.SALE_MONEY - b.SALE_MONEY) / b.SALE_MONEY) * 100,
2) || ‘%’ 环比增长率
from sql2004 a
left join sql2004 b
on trunc(to_date(a.tyear || lpad(a.tmonth, 2, 0), ‘yyyymm’) - 1, ‘mm’) =
to_date(b.tyear || lpad(b.tmonth, 2, 0), ‘yyyymm’)

如果不用自关联,只对这个表查一次,可以使用开窗函数,这里先假设数据中间不会存在月份缺失


select TYEAR,
TMONTH,
SALE_MONEY,
round(decode(l_SALE_MONEY,
0,
null,
(SALE_MONEY - l_SALE_MONEY) / l_SALE_MONEY) * 100,
2) || ‘%’ 环比增长率
from (select a.
,
lag(SALE_MONEY) over(order by tyear , tmonth ) l_SALE_MONEY
from sql2004 a);

如果好巧不巧,刚好关门了一个月而且没插入对应月份的数据,那么也还是可以使用开窗函数,不过要换成range滑动窗口了


select TYEAR,
TMONTH,
SALE_MONEY,
round(decode(l_SALE_MONEY,
0,
null,
(SALE_MONEY - l_SALE_MONEY) / l_SALE_MONEY) * 100,
2) || ‘%’ 环比增长率
from (select a.*,
max(SALE_MONEY) over(order by tyear * 12 + tmonth range between 1 preceding and 1 preceding) l_SALE_MONEY
from sql2004 a)

在数据完整的情况下,上述3个sql输出结果都是一样的


LINK:https://ask.csdn.net/questions/7688317?answer=53753251
SOURCE:CSDN_ASK
ASK_ID:7688367
ANSWER_ID:53753227
TITLE:SQL serve 2008建表往表填数据为什么会出现这种情况
ANSWER:

你这个表上建了个外键,要求在这个表里的cpno必须来自于这个表里的cno,
你当前表里面没有cno为5的,所以插入cpno为5的就会报错




我觉得很奇怪了,搜你这个错能发现一大堆一模一样的,连表名和字段名都一样,甚至连插入的数据都一模一样,你们是不是看了同一本教程


这时间跨度都已经有十年了。。。


LINK:https://ask.csdn.net/questions/7688367?answer=53753227
SOURCE:CSDN_ASK
ASK_ID:7687909
ANSWER_ID:53752782
TITLE:在Oracle中数据转换问题,如何批量将字符串中的字母转化为特定数字
ANSWER:

可以用translate函数


select translate(‘aaabbddehhiijjaabb’,‘abcdefghij’,‘1234567890’) from dual

img


第1个参数为原字符串,第2个参数和第3个参数,按字符位置匹配对应的转换关系,比如a转换成1,b转换成2。
但是,很明显,数字只有10个,当然也可以用其他的字符,但那样就无法一眼识别原字符了,
而且你题目中举的例子,如果是 26,那么它是2代表的字母和6代表的字母拼接?还是第26个字母呢?
如果是纯粹的想把字母转换成数字,不考虑歧义问题,可以直接用ascii函数获得这个字符的ascii码


select ascii(‘a’),ascii(‘b’),ascii(‘z’) from dual;

img




select 的函数只能返回一个字段 ,比如 select Replaceletter(‘jk’) from dual,
如果要返回两个数字,只能把这两个数字拼成一个字符串,比如 ‘10_11’。
你的字符映射规则确定就是A-Z映射到1-26么,而且确定有且只有两个字母?
如果是,可以用下面这种方式,分别截取第一位和第二位,计算ascii码减去96,最后再拼接起来


select to_char(ascii(substr(str, 1, 1)) - 96) || ‘_’ ||
to_char(ascii(substr(str, 2, 1)) - 96)
from (select ‘ab’ str from dual)

建议你还是把原始需求描述一下,可能有其他解决方式,你要求的这种转换目前看上去很不合常理。


LINK:https://ask.csdn.net/questions/7687909?answer=53752782
SOURCE:CSDN_ASK
ASK_ID:7687627
ANSWER_ID:53752755
TITLE:oracle使用left join的查询
ANSWER:

本来就是要获取两个字段,而且是提取不同行的数据,当然要关联两次,要么join,要么标量子查询


select t.name,a.name,b.name 
from table1 t,table2 a,table2 b
where t.dw1=a.code and t.dw2=b.code

标量子查询的上面那位已经给了。
但是,的确是有办法只关联一次table2的,但是效率也不见得会高


LINK:https://ask.csdn.net/questions/7687627?answer=53752755
SOURCE:CSDN_ASK
ASK_ID:7687629
ANSWER_ID:53752706
TITLE:oracle的一个sql问题
ANSWER:

这题要求的是取对应的记录,简单的聚合函数会导致丢失一些列,比如上面的回答就丢了id和type。
如果要求查询的字段完整,应该使用开窗函数


select * from (
select t.*,
row_number() over(partition by t_user_id,t_game_id order by t_create_time desc) rn
from t_consumption t)
where rn=1

LINK:https://ask.csdn.net/questions/7687629?answer=53752706
SOURCE:CSDN_ASK
ASK_ID:7687653
ANSWER_ID:53752699
TITLE:MySQL 字段内容按条件提取数据
ANSWER:

不确定你的空时null还是空字符串,先假设是null


  • 第一个

select * from (
select a.,
row_number() over(partition by job_id order by level desc) rn
from test_20220411_a a) b
where rn=1 or level is null

  • 第二个

select min(id) id,job_id,max(name) name,
concat(max(skills),‘-’,max(level)) `skills-level`,
GROUP_CONCAT(concat(project,‘-’,role)) `project-role`,
group_concat(lessones) lessones,
sum(score) score
from (
select a.
,
row_number() over(partition by job_id order by level desc) rn
from test_20220411_a a) b
where rn=1 or level is null
group by job_id

img


如果,实测如果空值是null的话,group_concat并不会造成数据里有多余分隔符,所以如果你的数据是空字符串,那么可以在最内层select的时候,用case when转换成null


LINK:https://ask.csdn.net/questions/7687653?answer=53752699
SOURCE:CSDN_ASK
ASK_ID:7687746
ANSWER_ID:53752634
TITLE:sql进行周期数据查询
ANSWER:

这用上一题的答案稍微改一下不就出来了?


SELECT today() AS o,
concat(formatDateTime(toStartOfWeek(today() + toIntervalDay(3)) - toIntervalDay(3), ‘%m-%d’) ,‘~’,
formatDateTime(toStartOfWeek(today() + toIntervalDay(3)) + toIntervalDay(3), ‘%m-%d’)) AS b1,
concat(formatDateTime(toStartOfWeek(today() + toIntervalDay(3)) - toIntervalDay(10), ‘%m-%d’) ,‘~’,
formatDateTime(toStartOfWeek(today() + toIntervalDay(3)) - toIntervalDay(4), ‘%m-%d’)) AS b2,
concat(formatDateTime(toStartOfWeek(today() + toIntervalDay(3)) - toIntervalDay(17), ‘%m-%d’) ,‘~’,
formatDateTime(toStartOfWeek(today() + toIntervalDay(3)) - toIntervalDay(11), ‘%m-%d’)) AS b3,
concat(formatDateTime(toStartOfWeek(today() + toIntervalDay(3)) - toIntervalDay(24), ‘%m-%d’) ,‘~’,
formatDateTime(toStartOfWeek(today() + toIntervalDay(3)) - toIntervalDay(18), ‘%m-%d’)) AS b4
;

img


给你个官方文档地址吧,想要什么函数可以先在官方文档里找一下


LINK:https://ask.csdn.net/questions/7687746?answer=53752634
SOURCE:CSDN_ASK
ASK_ID:7687761
ANSWER_ID:53752598
TITLE:sql 中exists的作用,他的优点和好处
ANSWER:

exists常见于两处语法位置,


  • 一是用于创建对象前的判断,如果对象不存在就执行创建,否则就忽略本条命令执行。如果不使用exists,而对象又已经存在的话,创建就会报错
  • 二是用于sql查询中,作为where条件之一使用,意思就是就是exist后面这个括号里的sql,查出来有数据,就满足条件;查出来没数据,就不满足条件。当然,很多情况下,exists后面的这个查询sql是不能单独拎出来查的,因为它的where条件一般会关联到括号前面的表,而这种条件的左右两个字段,比如a=b,就类似于 a in (select b)的执行结果了。当然执行效率两者是有区别的。

LINK:https://ask.csdn.net/questions/7687761?answer=53752598
SOURCE:CSDN_ASK
ASK_ID:7687841
ANSWER_ID:53752578
TITLE:mysql5.7,sql语句查询太慢,用EXISTS代替in报错
ANSWER:

你那条exists的sql应该像下面这样,语法才是正确的


SELECT
y.city_name,
y.employee_number
FROM
sddp.month y
INNER JOIN sddp.report l ON y.`year_month` = ‘202112’
AND l.`year` = ‘2021’
AND y.job_zhuanye = l.job_zhuanye
where NOT EXISTS ( SELECT 1 FROM sddp.report_not d
WHERE d.`year` = ‘2021’ and d.employee_number= y.employee_number)

LINK:https://ask.csdn.net/questions/7687841?answer=53752578
SOURCE:CSDN_ASK
ASK_ID:7687341
ANSWER_ID:53751829
TITLE:sql数据库怎么直接用代码创建啊,看我列子
ANSWER:

create schema test authorization zhang



这一句表示创建一个schema(或者叫一个模式、架构、有时也叫一个库),这个schema的名称定为test,然后授权 zhang 这个用户
由于你当前并不存在 zhang 这个用户,因此创建失败。


如果你要建表,在连接到对应的schema后,直接执行你下面的create table 命令就行了。
建议你多看一些用例,注意看完整,了解每一个命令的意思




你想给哪个用户就可以给哪个用户,前提是该用户在数据库中存在


LINK:https://ask.csdn.net/questions/7687341?answer=53751829
SOURCE:CSDN_ASK
ASK_ID:7687332
ANSWER_ID:53751821
TITLE:substring ,
ANSWER:
a[a.index(‘a’):a.index(‘N’)+1]

img


LINK:https://ask.csdn.net/questions/7687332?answer=53751821
SOURCE:CSDN_ASK
ASK_ID:7687247
ANSWER_ID:53751814
TITLE:Windows查看CUDA版本的时候出错
ANSWER:

先确认是否已正确安装CUDA,然后检查path环境变量是否包含对应的路径,
参考这篇文章


LINK:https://ask.csdn.net/questions/7687247?answer=53751814
SOURCE:CSDN_ASK
ASK_ID:7687190
ANSWER_ID:53751770
TITLE:使用BAT怎么实现把txt的文件内容更新到另一个文件的特定字段中?
ANSWER:

你这两个文件是都只有一行记录?还是说文件1只有一行,但文件2有多行?


  1. info.inc文件

PLUGIN_b = “202203012102”

PLUGIN_SET = “202203012102”

PLUGIN_a = “202203012102”

  1. Pluginset.txt文件
    202204090746

  2. bat文件
    @echo off
    Set /P option=<Pluginset.txt
    (for /f “tokens=1,2* delims==:” %%h in (‘findstr /n .* info.inc’) do (
    if%%i”==“” (echo.) else if%%j”==“” (echo %%i) else if%%i”==“PLUGIN_SET " (echo PLUGIN_SET = “%option%”) else echo %%i=%%j))>temp.ini
    move /y temp.ini info.inc

  3. bat运行后,info.inc文件变为

img




如果一行有2个参数,只替换其中一个参数,用下面这个


@echo off
Set /P option=<Pluginset.txt
(for /f “tokens=1,2,3,4* delims==;:” %%h in (‘findstr /n .* info.inc’) do (
if%%i”==”" (echo.) else if%%j”==“” (echo %%i) else if%%i”=="PLUGIN_SET " (echo PLUGIN_SET = “%option%”;%%k=%%l) else echo %%i=%%j))>temp.ini
move /y temp.ini info.inc

执行效果


img


LINK:https://ask.csdn.net/questions/7687190?answer=53751770
SOURCE:CSDN_ASK
ASK_ID:7687191
ANSWER_ID:53751767
TITLE:java代码执行sql脚本问题
ANSWER:

把你怎么在java里执行的,以及报错信息发出来




报错提示是存在语法错误就肯定是有语法错误,
在java里写sql一般是用的字符串拼接或者绑定变量的方式,很少会把完整的字符串写上去,因此很可能是拼接得有问题,建议你在执行这个sql前,先把sql打印出来,这样就能一眼看出sql哪里拼得有问题了,尤其要注意分钟后面是怎么拼的,否则它不会在这里断开


LINK:https://ask.csdn.net/questions/7687191?answer=53751767
SOURCE:CSDN_ASK
ASK_ID:7687106
ANSWER_ID:53751627
TITLE:数据库SQL和组态王连接成功,但是往数据库传不进数据
ANSWER:
  1. 你这个报错看上去不完整,后面应该还有一截说明了具体的报错原因
  2. 如果你能看懂c++的话,查看这个文件的4010行 D:\WORK\codeserver\main\65.30.2003.10000\运行系统\view653\db\DBServer.cpp
    然后分析逻辑,看看sql是怎么写的
  3. 找这个软件的售后

LINK:https://ask.csdn.net/questions/7687106?answer=53751627
SOURCE:CSDN_ASK
ASK_ID:7687009
ANSWER_ID:53751579
TITLE:提问:SQL数据库:查询没有选课的学生信息
ANSWER:

因为你班级表和学生表没有关联起来,造成了笛卡尔积,每个学生都分配到了所有班级。加上关联条件就没问题了


select 所属院系,班级名称,学号,姓名,性别
from 班级表,学生表
where 班级表.班级编号=学生表.班级编号
and 学号 not in (select 学号
from 成绩表)
order by 所属院系,姓名

LINK:https://ask.csdn.net/questions/7687009?answer=53751579
SOURCE:CSDN_ASK
ASK_ID:7687002
ANSWER_ID:53751576
TITLE:已知时间序列的特征,可以利用这些特征还原数据或者生成新的数据吗?
ANSWER:

给你一个简单的例子吧


import numpy
def forecast_speed(hour):
x = [1,2,3,5,6,7,8,9,10,12,13,14,15,16,18,19,21,22]
y = [100,90,80,60,60,55,60,65,70,70,75,76,78,79,90,99,99,100]
mymodel = numpy.poly1d(numpy.polyfit(x, y, 3))
myline = numpy.linspace(1, 23, 100)
speed = mymodel(float(hour))
return {‘speed’:speed}

print(forecast_speed(17))

img


上面这个就是输入一组x和y的数据,拟合了一个函数模型,然后就能输入x返回对应的y值了
更多的内容可以去了解一下机器学习、拟合模型相关的内容




你说说什么叫做规律?什么叫做原样本的特征?特征不就是规律么?你能把这些特征都量化下来么?如果特征无法量化,那如何判断是符合原样本特征呢?如果特征都量化了,那不就是一个函数模型么?


这个例子可不只是一个缺失值,按照这种方式,你可以选择对应的2次函数或更多次函数(即函数图像为曲线),让机器学习自动帮你把各次项系数算出来.
给你个文档先看看吧


LINK:https://ask.csdn.net/questions/7687002?answer=53751576
SOURCE:CSDN_ASK
ASK_ID:7686970
ANSWER_ID:53751562
TITLE:mac下navicat 导入00000001数据列时提示Error Message: Out of range value for column
ANSWER:

你图上提示已处理28,错误1,也就是说明你这个表有29行数据,其中有28行长度是没问题的,有一行的长度是有问题的,这个时候你就应该去看一下是哪一行超长


LINK:https://ask.csdn.net/questions/7686970?answer=53751562
SOURCE:CSDN_ASK
ASK_ID:7686930
ANSWER_ID:53751478
TITLE:SQLSTATE[HY000] [1045] Access denied for user ‘root’@‘localhost’ (using password: NO)
ANSWER:

对于用户’root’@‘localhost’,无密码登录时,权限不足以执行该操作(SQL: select * from blog_user where username = bb)



可以尝试带密码登录


LINK:https://ask.csdn.net/questions/7686930?answer=53751478
SOURCE:CSDN_ASK
ASK_ID:7686693
ANSWER_ID:53751474
TITLE:如何禁止双系统文件互通
ANSWER:
  • 硬盘就是个用于存储的硬件,一般情况下并不会绑定操作系统,把硬盘拆了接其他电脑上一样可以读取其中的数据。
  • U盘、移动硬盘这些设备内安装的操作系统,启动时并不会认为自己是外部系统,插上去的设备只要有驱动就都能识别出来。
  • U盘PE系统一开始就是作为一个维护系统,在本地操作系统挂了的时候,可以通过PE系统来读出本地磁盘的文件,所以这是能读很正常的。
  • 如果想要其他操作系统无法无法打开你本地磁盘的文件,你可以先设置个bios密码,没密码连开机都开不了;
  • 或者可以对你本地磁盘进行加密处理,比如bitlocker,比如ntfs磁盘加密,但是代价就是,一旦你本地系统坏了进不去了,而且没保留相关密钥,就没人拯救你的本地磁盘上的文件了。

LINK:https://ask.csdn.net/questions/7686693?answer=53751474
SOURCE:CSDN_ASK
ASK_ID:7686694
ANSWER_ID:53751463
TITLE:mysql中出现这个问题是因为什么
ANSWER:

你表里面当前是否存在不满足这个约束的数据?




如果是让这个字段至少要有1个数字,可以使用正则函数


ALTER TABLE USER ADD CHECK(regexp_like(pwd, ‘[0-9]’));

img


LINK:https://ask.csdn.net/questions/7686694?answer=53751463
SOURCE:CSDN_ASK
ASK_ID:7686737
ANSWER_ID:53751461
TITLE:sql语句的问题,不同出版社的平均评分怎么写
ANSWER:
select publisher,avg(price) fromgroup by publisher

LINK:https://ask.csdn.net/questions/7686737?answer=53751461
SOURCE:CSDN_ASK
ASK_ID:7686740
ANSWER_ID:53751460
TITLE:关于sql语句的问题,mysql5.7.我想要找到不同的价格区间的平均评分!
ANSWER:

这个要看你的区间是等距区间还是自定义灵活区间


  • 如果是等距区间,比如按10元递增
    select floor(price/10),avg(price) fromgroup by  floor(price/10);

  • 如果是自定义区间
    select 
    case
    when price <10 then ‘低于10元’
    when price >=10 and price <30 then ‘10~29.9元’
    else ‘30元及以上’
    end ,
    avg(price) from
    group by
    case
    when price <10 then ‘低于10元’
    when price >=10 and price <30 then ‘10~29.9元’
    else ‘30元及以上’
    end;




你要评分的平均值,把avg函数后面的字段换成评分就行了
avg(score)


LINK:https://ask.csdn.net/questions/7686740?answer=53751460
SOURCE:CSDN_ASK
ASK_ID:7686611
ANSWER_ID:53751111
TITLE:MYSQL查询主从表时,主表的数量字段怎么只显示一次,明细表可以有多行
ANSWER:

咨询sql题,请说明数据库类型、版本,提供对应的原始数据建表sql及insert数据sql,以及用表格形式说明一下最终需要的数据的格式。
虽然能大概猜到你是什么意思,但不同数据库的写法不一样,而且你说的那种数据,更适合在客户界面进行处理,不适合查询出来直接就是这个结果,因为存在大量的空值,一排序就乱了,找不到明细行对应主表的哪一行。
下面是使用开窗函数lag的一种实现方式,让主表的数据只会在明细的第一行显示,其他行都为空


select 
case when lag(主表.id) over(order by 主表.id) =主表.id then null else 主表.id end,
case when lag(主表.id) over(order by 主表.id) =主表.id then null else 主表.字段2 end,
case when lag(主表.id) over(order by 主表.id) =主表.id then null else 主表.字段3 end,
明细表.字段4
from 主表,明细表 where 主表.id=明细表.主表id

如果是支持开窗函数的数据库,那么可以把


`a`.`nzprs` AS `nzprs`,

改成


  case when lag(`a`.`id`) over(order by `a`.`id`, `b`.`id`)=`a`.`id` then null else  `a`.`nzprs` end AS `nzprs`,

然后sql的最后还要加上order by a.id, b.id,否则无法定位到每个主表id的第一行


LINK:https://ask.csdn.net/questions/7686611?answer=53751111
SOURCE:CSDN_ASK
ASK_ID:7686375
ANSWER_ID:53751101
TITLE:Windows任务计划怎么同时运行多个定时计划
ANSWER:

新建一个bat文件,把你要运行的bat文件名都写进去,每个文件前面加start,比如


start d:<span class=“hljs-number”>1.bat
start d:\test<span class=“hljs-number”>2.bat
start d:<span class=“hljs-number”>3.bat
exit

然后就只用执行这一个bat文件了。
start是开新窗口执行,新窗口呼出后就会继续往下执行,不会管这个新窗口的执行情况,也就是说可以让这3个bat接近于同时启动。
至于你说的调取多个任务失败,如果是因为windows调度的问题,可以通过这个方法解决,但是如果是你本身部署有问题导致bat执行失败,那就得另外看了


LINK:https://ask.csdn.net/questions/7686375?answer=53751101
SOURCE:CSDN_ASK
ASK_ID:7686533
ANSWER_ID:53751094
TITLE:exists关键字是干什么用的?怎么用
ANSWER:

exists ,直接翻译成中文就是"存在",你这个例子里面就是查询如果"存在"数据就执行查询,否则打印一段文字
execute ,直接翻译成中文就是"执行",
这些关键词随便查下词典就能知道意思了,至于更多的用例,建议直接在网上搜


LINK:https://ask.csdn.net/questions/7686533?answer=53751094
SOURCE:CSDN_ASK
ASK_ID:7686253
ANSWER_ID:53750804
TITLE:md格式文件用什么软件打开
ANSWER:

md文件其实就是一个纯文本文件,用任意文本编辑工具都可以打开。
但是如果要解析markdown语法并格式化显示,就需要其他软件了。
如果图片链接都是本地文件,那就得看你本地对应路径下是不是有这些文件了。
如果你图片链接都是互联网链接而非本地文件链接的话,什么软件都不用下载,最简单的方式就是在csdn博客里新建一篇博客,注意使用markdown编辑器而非富文本编辑器,把md文件里面的内容全部复制粘贴到左边,右边就会自动进行格式化了。


LINK:https://ask.csdn.net/questions/7686253?answer=53750804
SOURCE:CSDN_ASK
ASK_ID:7686240
ANSWER_ID:53750751
TITLE:mysql8日期不能设置CURRENT_TIMESTAMP,怎么解决
ANSWER:

datetime后面不要加长度

img


LINK:https://ask.csdn.net/questions/7686240?answer=53750751
SOURCE:CSDN_ASK
ASK_ID:7686149
ANSWER_ID:53750732
TITLE:中国植被类型分布有哪些
ANSWER:


LINK:https://ask.csdn.net/questions/7686149?answer=53750732
SOURCE:CSDN_ASK
ASK_ID:7686165
ANSWER_ID:53750717
TITLE:创建数据库表使用CONSTRAINT关键字时出错
ANSWER:

目前官网已经查不到5.5的文档了,最早的5.7版本文档中对check是这么描述的



The CHECK clause is parsed but ignored by all storage engines.



大概意思就是check语法可以被解析,但是会被忽略。这和你描述的现象一致。
在5.7版本中,是没有 "CONSTRAINT CHECK"语法的,所以更老的5.5估计也没有


CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
(create_definition,…)
[table_options]
[partition_options]

create_definition: {
col_name column_definition
| {INDEX | KEY} [index_name] [index_type] (key_part,…)
[index_option] …
| {FULLTEXT | SPATIAL} [INDEX | KEY] [index_name] (key_part,…)
[index_option] …
| [CONSTRAINT [symbol]] PRIMARY KEY
[index_type] (key_part,…)
[index_option] …
| [CONSTRAINT [symbol]] UNIQUE [INDEX | KEY]
[index_name] [index_type] (key_part,…)
[index_option] …
| [CONSTRAINT [symbol]] FOREIGN KEY
[index_name] (col_name,…)
reference_definition
| CHECK (expr)
}

但8.0版本是有这个语法的


[CONSTRAINT [symbol]] CHECK (expr) [[NOT] ENFORCED]

LINK:https://ask.csdn.net/questions/7686165?answer=53750717
SOURCE:CSDN_ASK
ASK_ID:7685954
ANSWER_ID:53750545
TITLE:这个SQL语句结果怎么得出来的,朋友们能帮讲解一下吗
ANSWER:

img


LINK:https://ask.csdn.net/questions/7685954?answer=53750545
SOURCE:CSDN_ASK
ASK_ID:7685803
ANSWER_ID:53750233
TITLE:请问字符串中的字典怎么整出来?
ANSWER:
import json
s = {‘Code’: 0, ‘Mess’: 11’, ‘uu’: ‘435’, ‘data’: {‘result’: ‘{“hit”:[{“er”:4,“r_c”:1},{“er”:4,“r_c”:2},{“er”:4,“r_c”:3}]}’}, ‘uu’: ‘43’}
r=json.loads(s[‘
data’][‘result’])
print(r[‘
hit’])

img


LINK:https://ask.csdn.net/questions/7685803?answer=53750233
SOURCE:CSDN_ASK
ASK_ID:7685787
ANSWER_ID:53750210
TITLE:sql组装成json字符串将+号之间识别为了字符串
ANSWER:

S.ENUM_CUTLEVEL 这个字段cast一下,转成varchar,估计你这个字段是个int类型,它就把这个加号当成了真正的加法,然后又发现前面这个参数无法转换成int,就报错了。建议把每个字段都cast一下,毕竟你这是在拼字符串


cast(S.ENUM_CUTLEVEL as varchar)

LINK:https://ask.csdn.net/questions/7685787?answer=53750210
SOURCE:CSDN_ASK
ASK_ID:7685688
ANSWER_ID:53750183
TITLE:服务项里面的sql代理无法启动导致数据库连接不到服务器
ANSWER:

双击这个服务,看下它执行文件的路径。
考虑到你是移动硬盘,每次插入时可能盘符会不一样,导致它无法根据之前的盘符找到文件。


LINK:https://ask.csdn.net/questions/7685688?answer=53750183
SOURCE:CSDN_ASK
ASK_ID:7685469
ANSWER_ID:53749870
TITLE:sql数据周期自动更新
ANSWER:

先说下你用的什么数据库吧,这个是可以实现的,但不同数据库关于日期的计算方式不一样




SELECT
today AS o,
toStartOfWeek(today + toIntervalDay(3)) - toIntervalDay(3) AS a,
toStartOfWeek(today + toIntervalDay(3)) + toIntervalDay(3) AS b

img


原理就是先把要计算的日期加3天,然后toStartOfWeek获取这个日期对应星期的第一天(星期天),最后再减3天得星期四


LINK:https://ask.csdn.net/questions/7685469?answer=53749870
SOURCE:CSDN_ASK
ASK_ID:7685457
ANSWER_ID:53749868
TITLE:如题今天遇到奇怪的事情,劳驾帮看看吧
ANSWER:

只能怀疑serial2里存在空格、回车或者不可见字符了,因为既不是NULL也不是空字符串,而且长度还大于0。
这数据库类型是什么?建议找下该数据库是否有查询数据的二进制或十六进制函数,看看这些空白的值到底是个什么东西


LINK:https://ask.csdn.net/questions/7685457?answer=53749868
SOURCE:CSDN_ASK
ASK_ID:7685440
ANSWER_ID:53749857
TITLE:MySQL初学者创建表的问题
ANSWER:
CREATE TABLE test_table_20220408  (
id int UNSIGNED NOT NULL,
name VARCHAR(10) not null default ‘123456’,
PRIMARY KEY (id)
);

img


LINK:https://ask.csdn.net/questions/7685440?answer=53749857
SOURCE:CSDN_ASK
ASK_ID:7685399
ANSWER_ID:53749774
TITLE:select语句怎么把两个相加的值赋值给一个字段
ANSWER:

你的想法应该是tk_money+overdue_money 的结果的字段名为co_money,但却写成了一个函数用法,正确的写法应该是下面这样


select tk_name,tk_money,overdue_money,(tk_money+overdue_money) co_money from ticket where tk_id=463327862570

当然这个括号可以不要


LINK:https://ask.csdn.net/questions/7685399?answer=53749774
SOURCE:CSDN_ASK
ASK_ID:7685400
ANSWER_ID:53749773
TITLE:用SQLSERVER写的要改成MYSQL代码复制后出现1146 - Table ‘mysql.cte’ doesn’t exist
ANSWER:

with 后面要加一个RECURSIVE,比如


with RECURSIVE t as (

注意,别的地方不要加这个东西,只要with后面加一个就行了


LINK:https://ask.csdn.net/questions/7685400?answer=53749773
SOURCE:CSDN_ASK
ASK_ID:7685329
ANSWER_ID:53749662
TITLE:关于按照机构、岗位、职位、用户组等维度灵活指定允许用户参与范围的设计
ANSWER:

这个设计中,有一个很重要的场景,就是在发布问卷后,有新员工入职该公司,是否可以看到此份调查问卷。
如果业务要求必须看到,那么这个设计就会相对复杂;如果业务方接受可以看不到,那么这个就相对简单。
即,在问卷发布时,根据参与人员的范围,直接生成"问卷id-用户id-是否已填写"这三列数据,之后用户来检索自己需要的问卷时,就无需关联其他表即可获得自己需要填写的问卷。
至于生成这个清单,是用or还是union,建议都测试一下,但无论这个清单怎么生成,只要在用户查询前生成了,那么就不会影响到用户的查询效率。
如果生成这个清单所消耗的时间在应用端不可忍受,那么可以引入一个异步处理,即增加"发布中"的状态,等后台程序处理完了,再更新状态,这样前端也可以通过手动刷新页面来查看是否发布成功




问卷平均有效期多长?
建议用两个不同的表,一个是当前处于生效及待生效的"问卷-用户"清单,一个是处于失效期的清单,每晚批处理将前一日失效数据转至失效问卷表内,这样可以让经常被查询的这个表处于一个相对稳定的行数。况且如果不把这个列表记录下来,如果要查历史某个问卷的参与度,就无法计算了,因为当前的用户数并不代表历史的用户数。而且字段少的话并不会占用多少存储空间,只是要注意考虑到历史数据清理,建议表上要有日期字段,甚至可以按时间范围来对表进行分区。
至于新员工入职,可以在新员工信息创建的时候,扫一次问卷,看看哪些问卷是需要填的,自动补几行记录到上面说的这个表




两个极致,


  1. 粗暴定时全量刷新,逻辑简单,较为准确,但消耗太大;
  2. 把逻辑写到用户信息变更这个环节,只要提交了任意一个用户信息变更,就根据这个用户最新的资料,匹配一次问卷,对当前该用户的问卷列表进行刷新,这样可以将开销分散到每一次用户信息变更里。这个功能可以封装成一个单独的接口,传入用户id即可刷新此用户的问卷列表,虽然增加了耦合性,但也不会太高,出现问题可以紧急先停掉,将第一种方案的全量刷新作为一个应急方案或者说数据修复方案,两手准备

LINK:https://ask.csdn.net/questions/7685329?answer=53749662
SOURCE:CSDN_ASK
ASK_ID:7684892
ANSWER_ID:53748970
TITLE:MySQL,oracle:求客户月均市值=当月每天市值累加之和/当月天数
ANSWER:

你是想问oracle里怎么写还是mysql里怎么写?这两个数据库支持的语法不一样。另外请给出数据库版本。
最好能把create table 和insert数据也给一份,省得回答问题的人都还要自己去造数据模拟测试




oracle里可以使用开窗函数lag获取上一行,并且支持通过加关键词的方法来实现获取上一行不为空的值,在这篇帖子里有类似的场景
https://bbs.csdn.net/topics/605261646


以日历为主表,外关联持仓表,当本行市值为空时,获取上一个不为空的市值到本行,最后按月份求和除以天数就好了


LINK:https://ask.csdn.net/questions/7684892?answer=53748970
SOURCE:CSDN_ASK
ASK_ID:7684827
ANSWER_ID:53748968
TITLE:sql中跑出账户1到账户6的所有路径
ANSWER:

你题目里写错一行数据,坑了我一把。。。



账户 12 进 22 账户 10



应该为



账户 12 出 22 账户 10



with t as (
SELECT ‘账户 1’ 实体A,‘出’ 标志,2 交易金额,‘账户 11’ 实体B UNION ALL
SELECT ‘账户 1’, ‘出’,1,‘账户 12’ UNION ALL
SELECT ‘账户 1’, ‘出’,2,‘账户 12’ UNION ALL
SELECT ‘账户 1’, ‘出’,3,‘账户 12’ UNION ALL
SELECT ‘账户 1’, ‘出’,1,‘账户 2’ UNION ALL
SELECT ‘账户 1’, ‘进’,2,‘账户 2’ UNION ALL
SELECT ‘账户 10’, ‘出’,8,‘账户 6’ UNION ALL
SELECT ‘账户 10’, ‘进’,5,‘账户 11’ UNION ALL
SELECT ‘账户 12’, ‘出’,22,‘账户 10’ UNION ALL
SELECT ‘账户 3’, ‘进’,2,‘账户 2’ UNION ALL
SELECT ‘账户 3’, ‘出’,5,‘账户 7’ UNION ALL
SELECT ‘账户 3’, ‘出’,7,‘账户 7’ UNION ALL
SELECT ‘账户 3’, ‘出’,5,‘账户 7’ UNION ALL
SELECT ‘账户 3’, ‘出’,4,‘账户 9’ UNION ALL
SELECT ‘账户 6’, ‘进’,7,‘账户 4’ UNION ALL
SELECT ‘账户 6’, ‘进’,8,‘账户 10’ UNION ALL
SELECT ‘账户 6’, ‘出’,5,‘账户 10’ UNION ALL
SELECT ‘账户 6’, ‘出’,7,‘账户 11’ UNION ALL
SELECT ‘账户 6’, ‘进’,5,‘账户 7’ UNION ALL
SELECT ‘账户 8’, ‘出’,6,‘账户 4’ UNION ALL
SELECT ‘账户 9’, ‘出’,3,‘账户 8’ ),
tt as (SELECT
CASE 标志 when ‘出’ then 实体A ELSE 实体B end id1,
CASE 标志 when ‘出’ then 实体B ELSE 实体A end id2,
sum(交易金额) 交易金额 FROM T
group by
CASE 标志 when ‘出’ then 实体A ELSE 实体B end,
CASE 标志 when ‘出’ then 实体B ELSE 实体A end),
cte as (
select distinct cast(‘0’ AS VARCHAR(1000)) id1,id1 id2,cast(id1 as VARCHAR(100)) root_node,cast(id1+‘/’ as VARCHAR(1000)) path, 0 lvl,0 amt from tt where id1=‘账户 1’
union all
select cast(tt.id1 AS VARCHAR(1000)) ,tt.id2,cte.root_node,cast(cte.path+tt.id2+‘/’ as VARCHAR(1000)) path,lvl+1,amt+交易金额 from tt join cte on tt.id1=cte.id2
where PATH NOT LIKE ‘%’+tt.id2+‘/%’
)
select root_node,id2,path,amt from cte where id2=‘账户 6’ ;

img


你那个汇总转账金额不知道是不是指的每2个节点之间的转账都要先汇总,就是tt表里面那个sum


LINK:https://ask.csdn.net/questions/7684827?answer=53748968
SOURCE:CSDN_ASK
ASK_ID:7684863
ANSWER_ID:53748952
TITLE:mysql8.0.28 用的是datagrip,用intersect求交集一直报错,提示语法错误,但是,实在没找到
ANSWER:

mysql 不支持intersect的语法,建议使用其他方式来实现,比如你这个sql完全可以写成


select sname from Test.student where sdept = ‘信息院’ and sage <= 19

LINK:https://ask.csdn.net/questions/7684863?answer=53748952
SOURCE:CSDN_ASK
ASK_ID:7684821
ANSWER_ID:53748948
TITLE:LeetCode:197. 上升的温度,这样写为什么不行
ANSWER:

mysql里不能直接用加减法来计算日期,如下

img


想象一下,4月30号加1天,理论上应该是5月1日,但是sql中如果直接加1,会得出4月31号,而且结果还不是日期类型了。
因此需要使用date_add或者add_date之类函数来对日期进行加减。
另外,不清楚你题目mysql的版本,如果是8.0及以后的版本,更好的方式应该是使用开窗函数,这样就只需要对这个表查一次,无需查两次来自关联


LINK:https://ask.csdn.net/questions/7684821?answer=53748948
SOURCE:CSDN_ASK
ASK_ID:7684815
ANSWER_ID:53748944
TITLE:SQL中datesdd的问题
ANSWER:

你这个sql是个缝合怪了。。。


  • getdate() 是sqlserver数据库中的获取当前时间的年月日时分秒函数,mysql里类似的函数名应该为 now()
  • dateadd()是sqlserver中对日期进行增加的函数,但是其中的3个参数的位置和你写的不一样,并且并没有’aa’这种时间度量表达式。而MySQL中类似功能的函数名为ADDDATE()和DATE_ADD(),并且参数和你题目里面的也不一样
  • to_char()是oracle数据库中将某种类型转换成字符串的函数,此题中是将一个日期转换成’yyyymm’格式,即4位年份2位月份,比如’202204’

综合起来,表示从table1中查询AA等于"某个年月"的数据,"某个年月"为当前日期减2个"aa"的跨度
sqlserver的dateadd官方语法说明


mysql的date_add官方语法说明


LINK:https://ask.csdn.net/questions/7684815?answer=53748944
SOURCE:CSDN_ASK
ASK_ID:7684638
ANSWER_ID:53748782
TITLE:leetcode:182. 查找重复的电子邮箱,哪个mysql语句更准确
ANSWER:

不论你count哪个字段,只要count的字段里没空值,都是对的,甚至count(1) 或者 count(*) 都是对的
因为这个语句的重点在于 group by Email


LINK:https://ask.csdn.net/questions/7684638?answer=53748782
SOURCE:CSDN_ASK
ASK_ID:7684491
ANSWER_ID:53748756
TITLE:无法在 System.DateTime 和 System.String 上执行“>=”操作。
ANSWER:

birth_date是个datetime类型么?如果是,要么把birth_date转换成string再比较,要么把 dateTimePicker1.Value 这玩意的前后拼上string转换成datetime的函数


LINK:https://ask.csdn.net/questions/7684491?answer=53748756
SOURCE:CSDN_ASK
ASK_ID:7684347
ANSWER_ID:53748473
TITLE:制作报表时要统计制单人在每个单据的制单数sql怎么写?
ANSWER:
select 制单人,count(1) 制单数 
from 单据头表
group by 制单人

LINK:https://ask.csdn.net/questions/7684347?answer=53748473
SOURCE:CSDN_ASK
ASK_ID:7684329
ANSWER_ID:53748468
TITLE:对同一列数据进行百分比计算
ANSWER:

查非本行数据时,使用开窗函数


select a.*,
a.计数/(max(case when 上架交付=‘总计’ then 计数 end ) over(partition by 月份))
from 表 a

img


LINK:https://ask.csdn.net/questions/7684329?answer=53748468
SOURCE:CSDN_ASK
ASK_ID:7684306
ANSWER_ID:53748459
TITLE:数据库原理与应用,使用的SQLserver,第一次创建数据库,按步骤操作的,这是哪里出问题了,要怎么解决呢,
ANSWER:

根据颜色来看,是单引号不对,第二个和第三个单引号输成全角的了,要改成半角的


LINK:https://ask.csdn.net/questions/7684306?answer=53748459
SOURCE:CSDN_ASK
ASK_ID:7684262
ANSWER_ID:53748417
TITLE:请教下,像这个发生日期匹配最近的交易日的话语句逻辑怎么写啊
ANSWER:

这个表看上去是个日历表,所以假定发生日期中间没有日期缺失


with t(发生日期,是否交易日期) as
select date‘2022-01-01’,2 from dual union all
select date‘2022-01-02’,2 from dual union all
select date‘2022-01-03’,2 from dual union all
select date‘2022-01-04’,1 from dual union all
select date‘2022-01-05’,1 from dual union all
select date‘2022-01-06’,1 from dual union all
select date‘2022-01-07’,1 from dual union all
select date‘2022-01-08’,2 from dual union all
select date‘2022-01-09’,2 from dual union all
select date‘2022-01-10’,1 from dual
)
select t1.发生日期,
case
when 是否交易日期 = 1 then
发生日期
else
max(发生日期) over(partition by d) + 1
end 交易日期
from (select t.*,
sum(case 是否交易日期
when 2 then
0
else
1
end) over(order by 发生日期) d
from t) t1

img


LINK:https://ask.csdn.net/questions/7684262?answer=53748417
SOURCE:CSDN_ASK
ASK_ID:7684299
ANSWER_ID:53748350
TITLE:oracle 条件查询不为空 不生效
ANSWER:
UPDATE a 
SET a.num = ( SELECT b.nnnum FROM b WHERE a.id = b.id and b.id is not null )
WHERE
EXISTS ( SELECT 1 FROM b WHERE a.id = b.id and b.id is not null );

保险起见,update set子查询中的where条件,应该和 where exists中的条件保持完全一致


LINK:https://ask.csdn.net/questions/7684299?answer=53748350
SOURCE:CSDN_ASK
ASK_ID:7684180
ANSWER_ID:53748271
TITLE:SQL数据库如何提取指定的金额数字
ANSWER:

完全用自带函数来截取也可以,下列示例中拆解了截取的各个组成部分,方便理解


with t as (
select ‘投诉退赔|BJ2022022818090/2022年2月/赠费/429元/账后调账286.80元/赠款142.2元’ a
union all
select ‘投诉退赔|BJ2022030111371,减免21年8月11-12月22年1月扣费扣费,共计219.78元,调账187.69元’
)
select a,CHARINDEX(‘调账’,a) tz位置,
CHARINDEX(‘元’,a,CHARINDEX(‘调账’,a)) tz后第一个y位置,
CHARINDEX(‘元’,a,CHARINDEX(‘调账’,a))-CHARINDEX(‘调账’,a)-2 长度,
substring(a,CHARINDEX(‘调账’,a)+2,CHARINDEX(‘元’,a,CHARINDEX(‘调账’,a))-CHARINDEX(‘调账’,a)-2) 截取结果 from t

img




原数据格式不统一,用case when写4个不同的,反正原理都一样


with t as (
select ‘投诉退赔|BJ2022022818090/2022年2月/赠费/429元/账后调账:286.80元/赠款142.2元’ a
union all
select ‘投诉退赔|BJ2022030111371,减免21年8月11-12月22年1月扣费扣费,共计219.78元,调帐187.69元’
union all
select ‘投诉退赔|BJ2022030111371,减免21年8月11-12月22年1月扣费扣费,共计219.78元,调帐:187.69元’
union all
select ‘投诉退赔|BJ2022030111371,减免21年8月11-12月22年1月扣费扣费,共计219.78元,调账187.69元’
)
select case
when a like ‘%调账:%’ then
substring(a,CHARINDEX(‘调账:’,a)+3,CHARINDEX(‘元’,a,CHARINDEX(‘调账:’,a))-CHARINDEX(‘调账:’,a)-3)
when a like ‘%调帐:%’ then
substring(a,CHARINDEX(‘调帐:’,a)+3,CHARINDEX(‘元’,a,CHARINDEX(‘调帐:’,a))-CHARINDEX(‘调帐:’,a)-3)
when a like ‘%调账%’ then
substring(a,CHARINDEX(‘调账’,a)+2,CHARINDEX(‘元’,a,CHARINDEX(‘调账’,a))-CHARINDEX(‘调账’,a)-2)
when a like ‘%调帐%’ then
substring(a,CHARINDEX(‘调帐’,a)+2,CHARINDEX(‘元’,a,CHARINDEX(‘调帐’,a))-CHARINDEX(‘调帐’,a)-2)
else null end
截取结果 from t

img


注意先后顺序就好了,比如必须先判断带冒号的再判断不带冒号的。另外,如果冒号还分了全角半角,就再加两个case when


LINK:https://ask.csdn.net/questions/7684180?answer=53748271
SOURCE:CSDN_ASK
ASK_ID:7684039
ANSWER_ID:53748190
TITLE:oracle查询11100011获取000左边第一个1
ANSWER:
with a(name,num,a_date) as (            
select ‘李’,‘7’, to_date(‘2021-12-20’,‘yyyy-MM-dd’) from dual union all
select ‘李’,‘7’, to_date(‘2021-12-07’,‘yyyy-MM-dd’) from dual union all
select ‘李’,‘7’, to_date(‘2021-09-15’,‘yyyy-MM-dd’) from dual union all
select ‘李’,‘2’, to_date(‘2021-09-02’,‘yyyy-MM-dd’) from dual union all
select ‘李’,‘8’, to_date(‘2021-07-26’,‘yyyy-MM-dd’) from dual union all
select ‘李’,‘4’, to_date(‘2021-06-20’,‘yyyy-MM-dd’) from dual union all
select ‘李’,‘4’, to_date(‘2021-06-10’,‘yyyy-MM-dd’) from dual union all
select ‘李’,‘9’, to_date(‘2021-05-10’,‘yyyy-MM-dd’) from dual union all
select ‘李’,‘1’, to_date(‘2021-05-05’,‘yyyy-MM-dd’) from dual union all
select ‘张’,‘3’, to_date(‘2022-12-01’,‘yyyy-MM-dd’) from dual union all
select ‘张’,‘5’, to_date(‘2022-11-01’,‘yyyy-MM-dd’) from dual union all
select ‘张’,‘10’,to_date(‘2022-10-01’,‘yyyy-MM-dd’) from dual union all
select ‘张’,‘1’, to_date(‘2022-09-01’,‘yyyy-MM-dd’) from dual
)
select name,num ,a_date,sd,min(a_date) over(partition by name,sd) a_date_last from (
select t.,sum(d) over (partition by name order by a_date) sd
from (
select a.
,
case
when num in (8,9,10) then
1
else
0
end d
from a) t
) where num not in (8,9,10)
group by name,num ,a_date,sd order by a_date desc;
;

img


LINK:https://ask.csdn.net/questions/7684039?answer=53748190
SOURCE:CSDN_ASK
ASK_ID:7684142
ANSWER_ID:53748099
TITLE:sql语句中in prior是什么意思
ANSWER:

能不能把你完整的sql拿出来?
目前不论哪个数据库都没有"in prior"这种语法,类似的只有oracle数据库中的"connect by prior",这个是递归连接查询




你这里的prior是一个函数,从用法上来看,是传入一列查询结果,输出一列转换结果,类似于一个表函数,
但mysql的自带函数中是没有这个函数的,因此建议你进数据库看一下是不是存在一个叫prior的自定义函数,以及数据库中是否安装了第三方扩展。
另外,你确定这个是mysql数据库?


LINK:https://ask.csdn.net/questions/7684142?answer=53748099
SOURCE:CSDN_ASK
ASK_ID:7683937
ANSWER_ID:53748094
TITLE:SqlServer 删除表的命令不大明白
ANSWER:

dbo.sysobjects是个系统对象表,object_id()是个函数,可以将表名转换成对应的对象id, OBJECTPROPERTY(id, N'IsUserTable') = 1 这个条件表示判断这个id的表必须是用户表,而不是系统表


LINK:https://ask.csdn.net/questions/7683937?answer=53748094
SOURCE:CSDN_ASK
ASK_ID:7683969
ANSWER_ID:53748088
TITLE:按照某一特定条件在查询符合的where子句
ANSWER:

建议再把问题描述详细点,如果不会描述,可以结合图示来进行说明


LINK:https://ask.csdn.net/questions/7683969?answer=53748088
SOURCE:CSDN_ASK
ASK_ID:7683701
ANSWER_ID:53747369
TITLE:SQL Server 开机无法自动启动 MSSQLSERVER服务,可以手动启动,如何解决?
ANSWER:

把服务设置成 “自动(延迟启动)”试试


img


LINK:https://ask.csdn.net/questions/7683701?answer=53747369
SOURCE:CSDN_ASK
ASK_ID:7683626
ANSWER_ID:53747352
TITLE:MySQL具体是怎么回事
ANSWER:

建议先了解一下关系型数据库,下面给出一个简单的例子。


  • 假设要开发一个类似QQ的聊天系统,所有的用户信息和聊天记录都要存储,
  • 如何查找某个用户的性别、昵称、等级等个人信息呢?可以弄一个用户表把这些信息存储起来,每一行就是一个用户,用QQ号来作为用户的唯一标识,因为昵称是可能重复的。
  • 然后聊天记录要另外存一个表,因为这个数据长得和用户信息不一样。有些用户昵称是很长的,而且昵称可能会改,所以聊天记录表里不保存用户详细信息,只保存QQ号,另一方面这也是为了节省空间。
  • 最终界面上要查用户聊天记录时,又要显示出用户昵称,这个时候就可以把用户表和聊天记录表关联起来一起查。

这个例子中,很明显用户表和聊天记录表通过QQ号建立了关系,这就是关系型数据库最基本的应用。
理解了为什么要有关系型数据库,尤其是脑海里有了表的概念后,应该会更容易理解你题目中的mysql,因为mysql就是一款关系型数据库软件


LINK:https://ask.csdn.net/questions/7683626?answer=53747352
SOURCE:CSDN_ASK
ASK_ID:7683658
ANSWER_ID:53747337
TITLE:aswAMSI.dll没有被指定在Windows 上运行
ANSWER:

这个路径是AVG杀毒软件,要修复的话可以下载一个安装包重新安装


LINK:https://ask.csdn.net/questions/7683658?answer=53747337
SOURCE:CSDN_ASK
ASK_ID:7683458
ANSWER_ID:53747249
TITLE:oracle里 查*快还是单查一个字段快 有没有文字性的理论依据
ANSWER:
  1. 查一个字段

    img


  2. 查*

    img



这很明显了吧,读取的字节数相差这么大


LINK:https://ask.csdn.net/questions/7683458?answer=53747249
SOURCE:CSDN_ASK
ASK_ID:7683541
ANSWER_ID:53747247
TITLE:第16关: order by与limit
ANSWER:

楼上这个回答有问题,假设前3笔单都是同一个用户购买,这个sql输出的就是同一个用户了。
下面这个是一种思路,或者用开窗函数中的dense_rank也行


select userid,min(时间) 最小时间 
from orders group by userid
order by 2 limit 3

LINK:https://ask.csdn.net/questions/7683541?answer=53747247
SOURCE:CSDN_ASK
ASK_ID:7683519
ANSWER_ID:53747240
TITLE:第17关 having
ANSWER:

查询订单详情表lineitem中…



select ??? from lineitem



商品购买总数量…



sum(quantity)



超过6件…



having sum(quantity)>6



的订单编号orderid、商品编号itemid和购买总数sum(quantity) as total。



select orderid,itemid,sum(quantity) as total



按购买总数total从大到小排列。



order by total desc


最后把这些玩意组装起来就是了。


select orderid,itemid,sum(quantity) as total 
from lineitem
group by orderid,itemid
having sum(quantity)>6
order by total desc

sql是最接近自然语言的开发语言之一,记熟一些关键词,简单的场景直接翻译一下就差不多了


LINK:https://ask.csdn.net/questions/7683519?answer=53747240
SOURCE:CSDN_ASK
ASK_ID:7683501
ANSWER_ID:53747170
TITLE:关于数据库的数据列多少是否会影响查询速度
ANSWER:

我做个类比吧,假设这两种情况,数据的载体是你的纸质笔记本,每一页写满,第一种情况写的页数多,第二种情况写的页数少,然后你在最前面写了一页目录,目录里写了哪个id在哪一页的哪一行,所以两者的目录大小是一样的,所以在找数据在哪里这个环节,两者是一样的。接着就是去对应的页码和行数提取数据,你根据id去查同一个id的时候,明显第二种情况翻页次数不会比第一种多,因此大多数情况下第二种的开销会比较少。
这里的目录就是主键或者索引,翻页这个动作就是磁盘磁头移动到不同的数据块


LINK:https://ask.csdn.net/questions/7683501?answer=53747170
SOURCE:CSDN_ASK
ASK_ID:7683487
ANSWER_ID:53747158
TITLE:hive的sql计算
ANSWER:

一天之内,同一个用户访问同一个绘本的同一页,是有可能出现多条记录的,而单行的退出时间减进入时间只表示单次的记录,考虑到你最终结果里存在"观看次数"这个字段,这个字段肯定是要count的,因此多行的观看时长需要进行sum。此sql中,除了count和sum以外的查询字段,都需要进行group by


LINK:https://ask.csdn.net/questions/7683487?answer=53747158
SOURCE:CSDN_ASK
ASK_ID:7683477
ANSWER_ID:53747146
TITLE:PGSQL月份分组查询问题
ANSWER:

给你两种方式,一个是递归,一个是数组转成一列


with RECURSIVE cte as(
select to_char(now() ,‘yyyy-MM’) as month,-1 lvl
union ALL
select to_char(now() +cast(lvl ||’ month’ as INTERVAL),‘yyyy-MM’),
lvl-1 from cte where lvl>-6)
select month from cte

select unnest( array[ 
to_char(now() ,‘yyyy-MM’),
to_char(now() + ‘-1 month’ ,‘yyyy-MM’),
to_char(now() + ‘-2 month’ ,‘yyyy-MM’),
to_char(now() + ‘-3 month’ ,‘yyyy-MM’),
to_char(now() + ‘-4 month’ ,‘yyyy-MM’),
to_char(now() + ‘-5 month’ ,‘yyyy-MM’)]);

img


LINK:https://ask.csdn.net/questions/7683477?answer=53747146
SOURCE:CSDN_ASK
ASK_ID:7683409
ANSWER_ID:53747113
TITLE:Merge into的使用问题
ANSWER:

建议看下执行计划,我写了一条简单的merge into 语句,执行计划长这样


img


可以看出这里是做了hash join ,而不是nested loop 或者fiter,所以应该是先进行匹配


当然不同数据库或者不同版本,原理可能会有区别


LINK:https://ask.csdn.net/questions/7683409?answer=53747113
SOURCE:CSDN_ASK
ASK_ID:7683306
ANSWER_ID:53747081
TITLE:数据库表的一个查询问题
ANSWER:

你这表里哪个字段是选修?还是说选修标识在其他表里?或者说所有课程都是选修?
这一个表count大于0没意义啊,如果所有课程都是选修的话,那么只要存在于这个表的所有学生都会满足这个条件。
所以你题目是不是没给完整?


LINK:https://ask.csdn.net/questions/7683306?answer=53747081
SOURCE:CSDN_ASK
ASK_ID:7683352
ANSWER_ID:53747064
TITLE:getdate()相关问题
ANSWER:

getdate()函数返回是带时分秒的,你表里的数据不带时分秒,相当于时分秒为’00:00:00’,当然会比getdate()要小,所以你要么getdate()减一天,要么格式化成年月日

img


LINK:https://ask.csdn.net/questions/7683352?answer=53747064
SOURCE:CSDN_ASK
ASK_ID:7683356
ANSWER_ID:53747052
TITLE:MySQL ORDER BY 语句失效
ANSWER:

符号用错了,你标成了单引号,单引号表示字符串


SELECT  a.`S`,a.`Sname`,
IFNULL(MAX(CASE c.Cname WHEN `语文` THEN b.score ELSE 0 END),0) `语文`,
IFNULL(MAX(CASE c.Cname WHEN `数学` THEN b.score ELSE 0 END),0) `数学`,
IFNULL(MAX(CASE c.Cname WHEN `英语` THEN b.score ELSE 0 END),0) `英语`,
IFNULL(CAST(AVG(b.score) AS DECIMAL(18,2)),0) `平均分`
FROM student a
LEFT JOIN sc b
ON a.`S` = b.`S`
LEFT JOIN course c
ON b.`C` = c.`C`
GROUP BY a.`S`,a.`Sname`
ORDER BY `平均分` ;

LINK:https://ask.csdn.net/questions/7683356?answer=53747052
SOURCE:CSDN_ASK
ASK_ID:7683401
ANSWER_ID:53747038
TITLE:oracle 计算本周为本年第几周
ANSWER:

去日期是本年第几周用to_char,格式化参数为ww 或iw


to_char(date‘2022-04-06’,‘ww’) 
–或
to_char(date‘2022-04-06’,‘iw’)

字符串转日期用to_date函数


to_date(‘220406’,‘YYMMDD’)

但是为了避免意外,建议将年份拼接完整,即


to_date(‘20’||‘220406’,‘YYYYMMDD’)

结合起来就是


 to_char(to_date(‘20’||‘220406’,‘YYYYMMDD’),‘ww’) 

LINK:https://ask.csdn.net/questions/7683401?answer=53747038
SOURCE:CSDN_ASK
ASK_ID:7683373
ANSWER_ID:53747005
TITLE:请问为什么不能插入图片呢?正确操作应该是什么呀?
ANSWER:

用这种方式插入图片的话,首先这个文件应该先放到数据库所在服务器的某个文件夹下,然后插入时,要使用全路径,注意这个路径必须是数据库用户有权限的路径
下面这个是我刚刚亲自测试的

img


LINK:https://ask.csdn.net/questions/7683373?answer=53747005
SOURCE:CSDN_ASK
ASK_ID:7682980
ANSWER_ID:53746551
TITLE:一对多left join(子查询group by)快还是left join副表,主表group by
ANSWER:

这题是不是有点问题?


  1. 上面是group by a.id ,下面是group by b.id,这两个sql完全不是一回事了 ;
  2. 明明a表是大表,但a表对b表却是1对多?
  3. 没说索引情况
  4. sql标准里,如果有group by,那么select的只能是聚合函数或者group by后面的字段(也可以是常量、变量)。目前常见数据库里只有老版本(8之前)的mysql默认没做这个限制,因此查不符合上述规则的字段时会显示随机数据



b表是小表,因此去重后数据会更少(比如只剩下了10行),而且去重后,数据就变成了1对1,此时A表来关联这个小量的数据,行数不会变大,因此内存消耗也不会变大。但反观第一种,在join的时候,A表的部分数据翻倍了,而且恐怖的是,翻倍是根据B表的重复记录数来的,这个消耗肯定比第2种方式大,所以此时应该第二个sql更快。


LINK:https://ask.csdn.net/questions/7682980?answer=53746551
SOURCE:CSDN_ASK
ASK_ID:7683012
ANSWER_ID:53746520
TITLE:oracle 单查一个字段和查*有什么区别
ANSWER:

查询数据时,先检索到对应的行,然后将行中指定的字段信息通过网络传输到客户端。很明显单查一个字段时,通过网络传输的数据要比多个字段更少,所以单查一个字段速度会更快


LINK:https://ask.csdn.net/questions/7683012?answer=53746520
SOURCE:CSDN_ASK
ASK_ID:7682821
ANSWER_ID:53746175
TITLE:请问pgsql图片文件要放在哪里呢?这里导入的时候为什么找不到图片呢?
ANSWER:

可以使用数据库服务用户有权限的目录的绝对路径,参考下面这篇文章中的例子


LINK:https://ask.csdn.net/questions/7682821?answer=53746175
SOURCE:CSDN_ASK
ASK_ID:7682837
ANSWER_ID:53746157
TITLE:mysql 输入文件目录报错Unknown command ‘\C’.
ANSWER:

斜杠的方向错了,要改成"/"


LINK:https://ask.csdn.net/questions/7682837?answer=53746157
SOURCE:CSDN_ASK
ASK_ID:7682749
ANSWER_ID:53746081
TITLE:MySQL8.0导入csv不成功怎么回事
ANSWER:

这里有个坑,路径里的斜杠方向要设置成和linux的方向一样,和windows的默认斜杠是相反的,可以参考下面这个问答


注意改完后要重启服务


LINK:https://ask.csdn.net/questions/7682749?answer=53746081
SOURCE:CSDN_ASK
ASK_ID:7682696
ANSWER_ID:53746036
TITLE:mysql改变字段类型报错
ANSWER:

你之前的字段类型是什么?
字段类型不是随便可以改的,尤其是在有数据的情况下




我模拟出来了,你原表中存在有空字符串’‘,而不是null,因此修改会报错


create table test_20220404_a (b VARCHAR(25) not null);
insert into test_20220404_a values (’‘);
ALTER TABLE test_20220404_a modify b int(25) not null;

img


下面这个方式可以把你的这个字段成功改掉,但是由于你设置了不允许为null,因此只能默认设置个0上去了


ALTER TABLE test_20220404_a modify b VARCHAR(25) ;
update test_20220404_a set b=0 where b =’';
ALTER TABLE test_20220404_a modify b int(25) not null;

img


LINK:https://ask.csdn.net/questions/7682696?answer=53746036
SOURCE:CSDN_ASK
ASK_ID:7682657
ANSWER_ID:53746004
TITLE:Mysql数据库操作语言的affect(0.02 sec)
ANSWER:

这是执行语句后,返回的信息,直接翻译成中文就行



1行被影响(0.01秒)



LINK:https://ask.csdn.net/questions/7682657?answer=53746004
SOURCE:CSDN_ASK
ASK_ID:7682423
ANSWER_ID:53745891
TITLE:oracle关系除法怎么做啊
ANSWER:

请给出你原题的描述及表结构,是哪个集合除以哪个集合,你目前问题里完全没有描述题目内容和你的代码是怎样的。




下面这篇文章讲得很清楚,你可以先参考一下


LINK:https://ask.csdn.net/questions/7682423?answer=53745891
SOURCE:CSDN_ASK
ASK_ID:7682440
ANSWER_ID:53745875
TITLE:ludadhi删不掉怎么办,求帮助😱
ANSWER:

正常卸载然后重启就好了,只是注意卸载的时候不要勾选保留温控模块


LINK:https://ask.csdn.net/questions/7682440?answer=53745875
SOURCE:CSDN_ASK
ASK_ID:7682512
ANSWER_ID:53745870
TITLE:怎么样修改文件归属?试了好多都不行
ANSWER:

你把你运行的代码及报错信息截个图出来看看


LINK:https://ask.csdn.net/questions/7682512?answer=53745870
SOURCE:CSDN_ASK
ASK_ID:7682529
ANSWER_ID:53745866
TITLE:mysql同表多字段查询
ANSWER:

先把sql里的password改成小写试试,因为你表里的字段名是小写的


LINK:https://ask.csdn.net/questions/7682529?answer=53745866
SOURCE:CSDN_ASK
ASK_ID:7682375
ANSWER_ID:53745733
TITLE:sql server 两个表数据如何同步
ANSWER:

需要定义一个更新来源,是来自于触发器或不是来自于触发器,否则你这个就是死循环了。
比如新增一个字段,标记是否来自触发器,手动更新数据时,写入标记为"否",然后触发器同步数据的时候,此标记写入为"是",
触发器每次被触发的时候,先加个if判断,判断写入的这个标记是什么,如果为"是",则什么都不执行,如果为"否",才执行同步。
同理,使用事务级全局变量也可以达到类似的效果


LINK:https://ask.csdn.net/questions/7682375?answer=53745733
SOURCE:CSDN_ASK
ASK_ID:7682191
ANSWER_ID:53745612
TITLE:关于mysql数据库无事务前提下并发修改的问题
ANSWER:

加锁只是为了防并发修改,不是为了防查,因此建议在查询之前先去查下有没有锁,没锁就加锁,然后再进行后续的查询和处理。


LINK:https://ask.csdn.net/questions/7682191?answer=53745612
SOURCE:CSDN_ASK
ASK_ID:7682276
ANSWER_ID:53745601
TITLE:Python并行计算写入文件问题
ANSWER:

不同的线程写入到不同文件里,最后再合并


LINK:https://ask.csdn.net/questions/7682276?answer=53745601
SOURCE:CSDN_ASK
ASK_ID:7682231
ANSWER_ID:53745594
TITLE:mysql 数据裤 没有全关联,但是要补全数据
ANSWER:

你这题与全外关联没关系,主要是少了col1加col2的完整清单,需要先自行构造。
可以先 select distinct col1 from表 作为一个子查询,与table2进行无条件关联,得到完整清单后,再左关联table1即可


LINK:https://ask.csdn.net/questions/7682231?answer=53745594
SOURCE:CSDN_ASK
ASK_ID:7682283
ANSWER_ID:53745582
TITLE:无法安装oracle database 19c
ANSWER:
  1. 它提示相同,你换个路径就好了
  2. 已存在同名实例,这意思就是你之前已经创建过这个名称的数据库了,要么删掉,要么就换个实例名称

LINK:https://ask.csdn.net/questions/7682283?answer=53745582
SOURCE:CSDN_ASK
ASK_ID:7682115
ANSWER_ID:53745382
TITLE:mysql 下出现Unknown column ‘saldesc’ in ‘order clause’
ANSWER:

sal后面少了一个空格,应该拼出来的sql应该是 "order by sal desc",但你这个变成了"order by saldesc"


LINK:https://ask.csdn.net/questions/7682115?answer=53745382
SOURCE:CSDN_ASK
ASK_ID:7682064
ANSWER_ID:53745325
TITLE:Rstudio中创建Rmarkdown时报错
ANSWER:

这个软件会写一些文件到你操作系统用户的应用文件夹中,从图上来看,你这个电脑的用户名包含有中文,因此被识别成乱码,报错了


LINK:https://ask.csdn.net/questions/7682064?answer=53745325
SOURCE:CSDN_ASK
ASK_ID:7681952
ANSWER_ID:53745303
TITLE:用Navicat操作MYSQL,审计功能怎么打开
ANSWER:

mysql免费版(社区版)没有审计功能,如果要实现类似的审计功能,建议安装插件,可以参考下面这篇文章


LINK:https://ask.csdn.net/questions/7681952?answer=53745303
SOURCE:CSDN_ASK
ASK_ID:7682028
ANSWER_ID:53745283
TITLE:大数据量关联分析相关技术
ANSWER:

可以去了解一下 "图数据库"


LINK:https://ask.csdn.net/questions/7682028?answer=53745283
SOURCE:CSDN_ASK
ASK_ID:7682004
ANSWER_ID:53745273
TITLE:数字用户可以出结果,数字之外的都不可以
ANSWER:

字符串漏了单引号,和这个问题是一样的原因


LINK:https://ask.csdn.net/questions/7682004?answer=53745273
SOURCE:CSDN_ASK
ASK_ID:7681697
ANSWER_ID:53745237
TITLE:请问一下pgsql怎么存储图片、文字和视频呀?
ANSWER:

一般来说,这种二进制文件,不太适合存储在关系型数据库中,但是关系型数据库的确大多都提供了这种类型的数据存储,在pgsql中是以bytea类型来存储二进制数据,可以通过pg_read_binary_file来获取指定文件的 bytea数据,再插入到表里即可,比如


create table test_bytea (content bytea);
insert into test_bytea values(pg_read_binary_file(‘lob/imagejpg’) );


当然也可以使用其他开发语言读取二进制数据,然后转换成对应的格式存入bytea字段。


关于二进制数据类型的相关转换,可以参考官方文档
http://postgres.cn/docs/13/datatype-binary.html


LINK:https://ask.csdn.net/questions/7681697?answer=53745237
SOURCE:CSDN_ASK
ASK_ID:7681791
ANSWER_ID:53745144
TITLE:多条件流程控制语句更新某一个字段值
ANSWER:

mysql里没有你这样的 REGEXP的用法,你要么把第二段的when都改成和第一段when的like那样,要么就使用regexp_like函数


UPDATE table 资产减值损失 set 分类=
(
case when 项目 like ‘%股权%’ or 项目 like ‘%长期投资%’ then ‘长期股权投资减值’
when regexp_like(项目, ‘债务重组|企业合并|债权|一年内到期的非流动资产|投资性房地产|融资租赁|融出资金|其他权益工具投资|期货|买入返售|可转债|可供出售|金融|黄金|担保|贷款|持有至到期|财务投资|未到期责任|持有待售|投资减值|利息|股利|拆出|理财|股票’ ) then ‘金融资产减值’
else ‘经营资产减值’
end);


LINK:https://ask.csdn.net/questions/7681791?answer=53745144
SOURCE:CSDN_ASK
ASK_ID:7681827
ANSWER_ID:53745132
TITLE:10-30 查询平均成绩最高的同学(MSSQL) (10 分)
ANSWER:

这个题里有个暗坑,sc表里存在有学生的部分科目分数为空,此时如果直接使用avg函数,会只对有分数的科目来进行平均计算,导致平均分偏高,因此需要把空的转化成0,或者使用sum(grade)/count(1)的方式。然后用top取排序后的第一行即可


select top 1 stu.sno,stu.sname,stu.sex,
datediff(year,stu.birdate,‘2020-01-01’) age,
avg(isnull(grade,0)) avg_grade
from
stu ,sc where stu.sno=sc.sno
group by stu.sno,stu.sname,stu.sex,
datediff(year,stu.birdate,‘2020-01-01’)
order by 5 desc

或者使用开窗函数取排名


select sno,sname,sex,age,avg_grade
from (
select stu.sno,stu.sname,stu.sex,
datediff(year,stu.birdate,‘2020-01-01’) age,
avg(isnull(grade,0)) avg_grade,
row_number() over(order by avg(isnull(grade,0)) desc) rn
from
stu ,sc where stu.sno=sc.sno
group by stu.sno,stu.sname,stu.sex,
datediff(year,stu.birdate,‘2020-01-01’)
) t where rn=1;

LINK:https://ask.csdn.net/questions/7681827?answer=53745132
SOURCE:CSDN_ASK
ASK_ID:7681839
ANSWER_ID:53745115
TITLE:ClickHouse数据库位图函数如何实现一列数组的交集
ANSWER:

bitmapAnd(bitmap1,bitmap2)
参考官方文档




一列数据的话,应该是用聚合函数了,看看下面这几个函数

img


https://clickhouse.com/docs/en/sql-reference/aggregate-functions/reference/groupbitmapor


LINK:https://ask.csdn.net/questions/7681839?answer=53745115
SOURCE:CSDN_ASK
ASK_ID:7681880
ANSWER_ID:53745112
TITLE:为什么代码换台机就不能运行了?
ANSWER:

先在侧边栏里的schema列表里选择一个数据库,然后再运行代码


LINK:https://ask.csdn.net/questions/7681880?answer=53745112
SOURCE:CSDN_ASK
ASK_ID:7680945
ANSWER_ID:53745109
TITLE:Sql server2000迁移问题
ANSWER:

官方迁移升级文档


LINK:https://ask.csdn.net/questions/7680945?answer=53745109
SOURCE:CSDN_ASK
ASK_ID:7681705
ANSWER_ID:53745049
TITLE:python 执行oracle sql 报错 ORA-00900: invalid SQL statement
ANSWER:

你这运行的是一个文件路径的字符串,当然不行了。至少得先把文件内容读出来吧,当然读出来你也会发现运行不了,因为它一次只能执行一条sql。但一旦你打算分隔语句逐条去执行,又会发现需要sql语法解析器…
所以为啥会有这种场景呢?python是用来写应用代码的,这种sql文件总不会也是python生成的吧?如果只用执行一次,用客户端直接连数据库执行不就好了?如果是做接口需要频繁导入,为啥不直接生成数据文件,然后python读取后再组装sql语句插入呢?
如果你非得用python来启动sql文件的执行,可以通过执行操作系统命令调用oracle客户端里的sqlplus来执行这个sql文件




定期数据不建议使用sql格式文件,sql格式一般是用于部署或者初始化一次性执行。你这个sql格式的目前只能调用操作系统命令通过sqlplus执行了。这不是复杂sql的问题,而是你一个文件里是有多条语句的,而在客户端一次只能执行一个sql语句或者一个plsql块,所以只能在sqlplus里来执行sql文件,sqlplus会按语法解析器自动把语句拆分并逐条执行


LINK:https://ask.csdn.net/questions/7681705?answer=53745049
SOURCE:CSDN_ASK
ASK_ID:7681806
ANSWER_ID:53745022
TITLE:有没有免费好用的MySQL数据库管理软件啊?
ANSWER:

mysql原厂的workbench是免费的,
另外还有很多有开源软件也支持,比如dbeaver


LINK:https://ask.csdn.net/questions/7681806?answer=53745022
SOURCE:CSDN_ASK
ASK_ID:7681810
ANSWER_ID:53745016
TITLE:SQL命令把pur纯度的数值后面都加上%
ANSWER:

这其实就是一个简单的字符串拼接而已,但要看你是用的什么数据库,还有你这个字段的类型是什么。
常见的拼接方式有oracle的双管道符、sqlserver的加号,以及很多数据库支持的concat函数


LINK:https://ask.csdn.net/questions/7681810?answer=53745016
SOURCE:CSDN_ASK
ASK_ID:7681729
ANSWER_ID:53744956
TITLE:MySQL中创建表1为男,0为女怎么弄,还有默认为女怎么弄
ANSWER:
sex char(2) not null default ‘0’

好像还要加个check


sex char(2) not null default ‘0’ check(sex in (‘0’,‘1’))

枚举值也可以用enum(‘0’,‘1’)


LINK:https://ask.csdn.net/questions/7681729?answer=53744956
SOURCE:CSDN_ASK
ASK_ID:7681388
ANSWER_ID:53744782
TITLE:关于#mysql#的问题:求 每个名字的所有科目总分(所有科目分数加起来),要用一条sql语句查询,分多条语句查询我会,但是在科目多了会影响效率名字 分数小明 155小红 77小利 55
ANSWER:
select 名字,sum(分数) 分数
from
where 有效=‘有’
group by 名字

LINK:https://ask.csdn.net/questions/7681388?answer=53744782
SOURCE:CSDN_ASK
ASK_ID:7681429
ANSWER_ID:53744776
TITLE:关于使用VMware使用openGauss时遇到无法连接默认数据库postgres的问题
ANSWER:

VirtualBox的报错是因为你电脑的用户名里包含中文。
下面VMWare的报错是因为26000端口冲突了。


给你个更简单的方法吧,反正你这已经安装了虚拟机了,可以在虚拟机里把docker装了,然后在docker拉取opengauss的镜像,启动容器,数据库就有了,完全不用管数据库的相关配置


LINK:https://ask.csdn.net/questions/7681429?answer=53744776
SOURCE:CSDN_ASK
ASK_ID:7681497
ANSWER_ID:53744761
TITLE:SQL server安装失败
ANSWER:

尝试一下鼠标右键使用管理员身份运行


LINK:https://ask.csdn.net/questions/7681497?answer=53744761
SOURCE:CSDN_ASK
ASK_ID:7681517
ANSWER_ID:53744758
TITLE:mysql中如何计算销售额
ANSWER:

你题目里不是已经把公式列出来了么?


select (单价*(1-折扣)*数量) 销售额 from

LINK:https://ask.csdn.net/questions/7681517?answer=53744758
SOURCE:CSDN_ASK
ASK_ID:7681570
ANSWER_ID:53744754
TITLE:oracle date类型字段直接to_char年月日 显示00000000 加个trunc再to_Char显示就正常了 这是为什么
ANSWER:

请把你的数据及代码贴出来,不知道你所说的正常是个什么意思


  1. to_char函数,第一个参数为date类型时,第二个参数需要指定输出格式,比如
    to_char(date字段,‘yyyy-mm-dd’),
    to_char(date字段,‘yyyy-mm-dd hh24:mi:ss’),
    to_char(date字段,‘yyyymmddhh24miss’)

    第一个会输出 “年-月-日”,第二个会输出 “年-月-日 时:分:秒”,第三个会输出 “年月日时分秒”,
    也就是说,你想输出什么格式完全可以自行定义。
  2. trunc函数,如果不加第二个参数,就是只取整数位,oracle的一天其实就是1,因此trunc(date字段)就是舍去时分秒,只保留年月日的信息。
  3. 在oracle中,date类型包含的有 年、月、日、时、分、秒 6个信息,当时分秒都为0时,在部分客户端工具会只显示 年、月、日这3个信息;
    反过来说,日期’2022-04-04’其实就是表示的’2022-04-04 00:00:00’这一时刻

LINK:https://ask.csdn.net/questions/7681570?answer=53744754
SOURCE:CSDN_ASK
ASK_ID:7681322
ANSWER_ID:53744747
TITLE:每个班级前5%的学生名单前5%学生成绩,计算5%时若非整数向上取整怎么写?
ANSWER:

分析:


  1. 题目中没说前5%的排序依据,不清楚是指总分占比还是指分数排名的前5%,这里假设是按分数倒序排名,排名占人数的占比为前5%,
    即如果班级是20人,那么就只要找出1人,而低于20人时,向上取整皆为只取一人
  2. 题目中没有指定数据库及版本,不同数据库的语法是有区别的,但由于目前大部分数据库均已支持开窗函数,因此结合第一点,给出下面的sql
    select x.cla_name,x.stu_name,x.grade from (
    select c.cla_name,s.stu_name,s.grade,
    ROW_NUMBER() OVER(PARTITION BY c.cla_id order by s.grade desc) rn,
    count(1) OVER(PARTITION BY c.cla_id ) ct
    from student s,class c where s.stu_id=c.stu_id
    ) x where (
    (ct > 20 and rn/ct<=0.05 ) or
    (ct <= 20 and rn=1)
    )




如果是指每班输出人数大于5的话,用下面这个


select x.cla_name,x.stu_name,x.grade from (
select c.cla_name,s.stu_name,s.grade,
dense_rank() OVER(PARTITION BY c.cla_id order by s.grade desc) rk,
count(1) OVER(PARTITION BY c.cla_id ) ct
from student s,class c where s.stu_id=c.stu_id
) x where (
(rk<=6 or cell(rk/ct*100)<=5 )



能不能把你的create table 和数据的insert发出一下?
题目要求是无重复且大于5人,dense_rank排行就是重复分排行一样,且排名递增为1。
然后排行为前5%,你题目中并没有说这个5%是要怎么计算得到的,光排序排名至少就有3种方式取前5%,分数占比排名也至少有2种方式取前5%,因此在题目不明确的情况下,选择和前面一致的dense_rank,下面的sql稍微改了一下分母的取值


select x.cla_name,x.stu_name,x.grade from (
select c.cla_name,s.stu_name,s.grade,
dense_rank() OVER(PARTITION BY c.cla_id order by s.grade desc) rk,
count(distinct x.grade) OVER(PARTITION BY c.cla_id ) ct
from student s,class c where s.stu_id=c.stu_id
) x where (
(rk<=6 or cell(rk/ct*100)<=5 )

LINK:https://ask.csdn.net/questions/7681322?answer=53744747
SOURCE:CSDN_ASK
ASK_ID:7681191
ANSWER_ID:53744300
TITLE:相同的存储过程语句在SQLyog执行报错,但在cmd中执行成功,这是为什么
ANSWER:

很明显,两边的语句结束符不一致,上面的结束符已经改成了"&#34;,下面的还是默认的&#34;;&#34;<br />你cmd里是不是执行过下面这个东西&#xff1f;</p><br/><pre><code class="language-sql">DELIMITER <span class="hljs-symbol">

LINK:https://ask.csdn.net/questions/7681191?answer=53744300
SOURCE:CSDN_ASK
ASK_ID:7681036
ANSWER_ID:53744275
TITLE:【MySQL】在一个trigger下实现insert or update 执行某语句块时失败
ANSWER:

mysql不像oracle那样可以支持定义多个触发事件,不同触发事件就得建不同的触发器,下面是mysql触发器的创建语法


CREATE
[DEFINER = user]
TRIGGER [IF NOT EXISTS] trigger_name
trigger_time trigger_event
ON tbl_name FOR EACH ROW
[trigger_order]
trigger_body

trigger_time: { BEFORE | AFTER }

trigger_event: { INSERT | UPDATE | DELETE }

trigger_order: { FOLLOWS | PRECEDES } other_trigger_name

官方文档


官方用例


LINK:https://ask.csdn.net/questions/7681036?answer=53744275
SOURCE:CSDN_ASK
ASK_ID:7681070
ANSWER_ID:53744258
TITLE:通过yum安装mariadb默认存放路径在哪里
ANSWER:

linux里安装的很多程序,其实文件会分散到不同的地方,比如bin下放可执行文件、lib下放动态库文件,所以你找到的很多文件存放位置其实都的确是它的存放位置,实际上并不存在一个完整的文件夹存放了它所有的文件。


你如果要找它的配置文件,一般是在etc目录下,根据madiadb版本的不同,有的直接在etc下,有的在etc/mysql下。
mariadb是基于mysql开发的,很多文件名都和mysql一样,因此你要找文件的时候,也得把mysql这个关键词带上


LINK:https://ask.csdn.net/questions/7681070?answer=53744258
SOURCE:CSDN_ASK
ASK_ID:7680796
ANSWER_ID:53743960
TITLE:为什么下面这段代码,用升序和降序会输出不一样的值?
ANSWER:

建议截图证明。
另外,对于某些数据库,除数为0时,也会有部分显示结果,但结果显示是不完整的。
因此你可以先不加这个除法,把结果都查出来看看,看看这个b里面是否存在为0的记录。
还有,不排除碰上了bug的情况,但这个概率是微乎其微


LINK:https://ask.csdn.net/questions/7680796?answer=53743960
SOURCE:CSDN_ASK
ASK_ID:7680386
ANSWER_ID:53743492
TITLE:一直报错,又不知道错在哪
ANSWER:

字符集不对,导致中文无法识别,要么修改这个窗口的字符集,要么不使用中文


LINK:https://ask.csdn.net/questions/7680386?answer=53743492
SOURCE:CSDN_ASK
ASK_ID:7680442
ANSWER_ID:53743491
TITLE:A表和B表 两张表 B表ID作为条件,过滤数据不显示
ANSWER:


上面这个题,把表名和字段名换一下就和你这个问题一模一样了,比如


select * from B where not exists (select 1 from A WHERE A.id=B.id);

LINK:https://ask.csdn.net/questions/7680442?answer=53743491
SOURCE:CSDN_ASK
ASK_ID:7680452
ANSWER_ID:53743489
TITLE:关于mysql自增id删除后继续添加新的数据后,id不连续的问题
ANSWER:

不连续是正常的,这个东西只要保证自增且唯一就行了。
如果想要连续的话,需要设置id不自增,每次插入数据前查一次当前最大值,然后指定id为这个最大值加1,但这样性能开销太大了。


LINK:https://ask.csdn.net/questions/7680452?answer=53743489
SOURCE:CSDN_ASK
ASK_ID:7680202
ANSWER_ID:53743380
TITLE:mysql数据库问题
ANSWER:

鼠标右键,使用管理员身份运行。
如果还闪退,用记事本打开这个bat文件,加pause断点,再执行,看是哪里报错了。


LINK:https://ask.csdn.net/questions/7680202?answer=53743380
SOURCE:CSDN_ASK
ASK_ID:7680316
ANSWER_ID:53743373
TITLE:我定义的v7视图是成功的,但是在v6视图的where中调用v7视图时却报错,这是怎么回事
ANSWER:

等于号后面不能接视图名称,只能接函数或者值
你先把你v7视图里查的那个东西起个别名


 CREATE VIEW V7 AS
SELECT
MIN (AV) min_av
FROM V4;

然后v6视图里后面的等于号改成一个查询


CREATE VIEW V6 AS
SELECT
department_id
FROM
employees
GROUP BY
departmENT_id
HAVING
AVG (SALARY)=(select min_av from V7)

这样语法就对了,视图返回的是一个查询表格,而不是一个值,所以只能select它,
但是一般没什么人会特意创建一个视图来取一个值作为having的条件的,
如果题目并没有要求你创建视图的话,建议尝试一下其他写法,比如说子查询,比如说开窗函数


LINK:https://ask.csdn.net/questions/7680316?answer=53743373
SOURCE:CSDN_ASK
ASK_ID:7679680
ANSWER_ID:53743205
TITLE:如何在windows环境下用软件检测hdmi输出
ANSWER:

windows有提供很多关于硬件的api的,可以参考这个vbs脚本中的例子


这个脚本可以输出有多少个显示器及显示器的相关信息


img


LINK:https://ask.csdn.net/questions/7679680?answer=53743205
SOURCE:CSDN_ASK
ASK_ID:7679679
ANSWER_ID:53743189
TITLE:.net npgsql的插入操作是不是底层报错有问题啊,总抛出主键重复
ANSWER:

从这个现象上来看,是插入代码被重复执行了,你可以尝试把插入的主键字段改成一个随机数,再执行一次,看看是不是插入了多条数据


LINK:https://ask.csdn.net/questions/7679679?answer=53743189
SOURCE:CSDN_ASK
ASK_ID:7679117
ANSWER_ID:53743176
TITLE:SQLserver 2019可否跨平台
ANSWER:

官方安装文档


docker版本


把它构建docker镜像的代码弄出来稍微改改,其实也就是在linux上的安装步骤了


LINK:https://ask.csdn.net/questions/7679117?answer=53743176
SOURCE:CSDN_ASK
ASK_ID:7680143
ANSWER_ID:53743150
TITLE:sqlite 模糊查询数据存在查询为空
ANSWER:

你数据里的确是不存在 ‘查询错误sql’ 这个值,在’查询错误’和’sql’中间还存在其他字符,用下面这个就能查到了


select * from msg where content like ‘%查询错误%sql%’

LINK:https://ask.csdn.net/questions/7680143?answer=53743150
SOURCE:CSDN_ASK
ASK_ID:7680061
ANSWER_ID:53743133
TITLE:怎么保证组内多条数据百分比之和始终为100,类似于秒杀问题
ANSWER:

你这是用户直接更新rate字段?比如一个组有两条记录,更新其中一条为80的时候,另一条要自动变成20?
然后会出现两个会话分别更新两条记录,比如A会话更新第1条记录为80,B会话更新第2条记录为30,怎么让它最后相加还是100?
这不是个矛盾么?要想避免这个冲突,只能在事务开始时加锁,事务结束时解锁,强制让会话存在先后顺序,哪怕两个会话间只有1毫秒的差异,那它也是存在先后顺序的


LINK:https://ask.csdn.net/questions/7680061?answer=53743133
SOURCE:CSDN_ASK
ASK_ID:7680117
ANSWER_ID:53743097
TITLE:PGSQL sql语句提交出现schema " " already exists
ANSWER:

你想创建的schema已经存在了,不能重复创建


LINK:https://ask.csdn.net/questions/7680117?answer=53743097
SOURCE:CSDN_ASK
ASK_ID:7679854
ANSWER_ID:53742790
TITLE:mysql怎么实现分组更新呢?
ANSWER:

分组排序查询


select a.,row_number() over(partition by 分组字段 order by 排序字段) -1 sn from a

更新


update a set 序号字段=( select t.sn from (select a.,row_number() over(partition by 分组字段 order by 排序字段) -1 sn from a) t where t. 主键字段=a.主键字段)
where exists ( select t.sn from (select a.*,row_number() over(partition by 分组字段 order by 排序字段) -1 sn from a) t where t. 主键字段=a.主键字段)



开窗函数要8.0以上才支持,而且开窗函数早就纳入了sql标准,mysql落后其他数据库太多了


img


对于不支持开窗函数的老版本数据库,这种操作建议写存储过程或者用其他开发语言来处理,
比如一个游标分组,循环里再用一个游标循环逐行更新序号,每更新一行加1,两个循环开始位置的中间重置序号


LINK:https://ask.csdn.net/questions/7679854?answer=53742790
SOURCE:CSDN_ASK
ASK_ID:7679557
ANSWER_ID:53742274
TITLE:mysql如何将一个表格中的id在一定条件下同步更新到另一个表格的某个列中?
ANSWER:
update B表 set cid=(select A表.id from A表 where A表.cname=B表.sname and A表.ud=B表.ud) 
where exists (select 1 from A表 where A表.cname=B表.sname and A表.ud=B表.ud)

需要确保A表中 ud+cname 是唯一的


LINK:https://ask.csdn.net/questions/7679557?answer=53742274
SOURCE:CSDN_ASK
ASK_ID:7679324
ANSWER_ID:53742180
TITLE:关于PLSQL题,实在是不会了
ANSWER:

最简单的方法的确是像楼上这样自关联两次


select a.*,a2.金额,a3.金额 from a a1 
left join a a2 on (a1.店名=a2.店名 and a1.日期=a2.日期+1)
left join a a3 on (a1.店名=a3.店名 and a1.日期=add_months(a2.日期,12))

用开窗函数的range滑动窗口可以找前1天或者前n天,但是要找前一年会稍微有点麻烦,还不如像上面这样多查一次这个表


LINK:https://ask.csdn.net/questions/7679324?answer=53742180
SOURCE:CSDN_ASK
ASK_ID:7679363
ANSWER_ID:53742163
TITLE:数据库查询多列中重复出现的数据次数,不是重复的行
ANSWER:

通用写法就是单独查每一列,union all起来,再count。
如果是支持行列转换语法的数据库,比如可以使用类似unpivot的写法,将这4列转换成1列,再count,这样sql更短效率也更高。
但你没说用的什么数据库,也没说版本,就没办法给行列转换的sql了


LINK:https://ask.csdn.net/questions/7679363?answer=53742163
SOURCE:CSDN_ASK
ASK_ID:7679410
ANSWER_ID:53742155
TITLE:Mysql关联查询,无数据的字段显示错误的数据
ANSWER:

漏了两个关联条件


img


另外,你这sql没必要一层一层的套, 下面这种写法也是可以的


select * from a 
join b on a.xx=b.xx and a.yy=b.yy
join c on a.xx=c.xx



下面两种写法都可以


select t.,
student_test_finish_record.start_time,
student_test_finish_record.finish_time
from (select a.student_id,
a.class_id,
c.teacher_id,
d.class_name,
b.test_id,
c.test_name,
c.open_status,
c.open_time,
c.close_time,
c.time_limit
from class_student a, class_test b, test_info c, class_info d
where a.class_id = d.class_id
and d.class_id = b.class_id
and b.test_id = c.test_id
and c.teacher_id = d.teacher_id) as t
left join student_test_finish_record e
on t.test_id = e.test_id
and t.student_id = e.student_id;

select t.,
student_test_finish_record.start_time AS start_time,
student_test_finish_record.finish_time AS finish_time
from (select class_student.student_id AS student_id,
class_student.class_id AS class_id,
test_info.teacher_id AS teacher_id,
class_info.class_name AS class_name,
class_test.test_id AS test_id,
test_info.test_name AS test_name,
test_info.open_status AS open_status,
test_info.open_time AS open_time,
test_info.close_time AS close_time,
test_info.time_limit AS time_limit
from class_student
join class_info
on class_student.class_id = class_info.class_id
join class_test
on class_info.class_id = class_test.class_id
and class_test.test_id = test_info.test_id
join test_info
on test_info.teacher_id = class_info.teacher_id) as t
left join student_test_finish_record
on t.test_id = student_test_finish_record.test_id
and t.student_id = student_test_finish_record.student_id;

LINK:https://ask.csdn.net/questions/7679410?answer=53742155
SOURCE:CSDN_ASK
ASK_ID:7679454
ANSWER_ID:53742147
TITLE:python 文件读写操作 怎么写才能尽量少用循环语句同时完成 读取 筛选 写入 并输出?
ANSWER:

用pandas包,可以快速过滤或聚合数据,
如果熟悉sql语法的话,再配上PandaSQL包,就可以写sql语句来查pandas的数据了。


LINK:https://ask.csdn.net/questions/7679454?answer=53742147
SOURCE:CSDN_ASK
ASK_ID:7678169
ANSWER_ID:53741947
TITLE:SQL:2个人一起去看电影,准备预定电影票横向坐在一起,从1-15编号中从这么多排座位中,找出连续2个空位的全部组合,结果输出座位组合情况例(1、2 4、5)
ANSWER:

先说下数据库类型及版本
如果支持开窗函数,可以用lead或者lag来获取相邻行的数据,再来对数据进行判断即可




下面是连续两个的


with t(seat,status) as (
select 1,‘Y’ FROM DUAL UNION ALL
select 2,‘Y’ FROM DUAL UNION ALL
select 3,‘N’ FROM DUAL UNION ALL
select 4,‘N’ FROM DUAL UNION ALL
select 5,‘N’ FROM DUAL UNION ALL
select 6,‘Y’ FROM DUAL UNION ALL
select 7,‘N’ FROM DUAL UNION ALL
select 8,‘N’ FROM DUAL UNION ALL
select 9,‘N’ FROM DUAL UNION ALL
select 10,‘N’ FROM DUAL UNION ALL
select 11,‘N’ FROM DUAL UNION ALL
select 12,‘Y’ FROM DUAL UNION ALL
select 13,‘Y’ FROM DUAL UNION ALL
select 14,‘N’ FROM DUAL UNION ALL
select 15,‘N’ FROM DUAL )

select SEAT,L_SEAT from (
select T.,
LAG(SEAT) OVER(ORDER BY SEAT) L_SEAT,
LAG(STATUS) OVER(ORDER BY SEAT) L_STATUS from T)
WHERE status=‘N’ AND L_STATUS=‘N’

img


下面是4个及以上连续座位的


select MIN(SEAT),MAX(SEAT) from (
select tt.
,sum(l) over(order by seat) d from (
select T.*,
case when LAG(STATUS) OVER(ORDER BY SEAT) =status then 0 else 1 end l from T) tt
) where status=‘N’
GROUP BY D HAVING COUNT(1)>=4

img


LINK:https://ask.csdn.net/questions/7678169?answer=53741947
SOURCE:CSDN_ASK
ASK_ID:7679153
ANSWER_ID:53741932
TITLE:sql server 语句问题请教下
ANSWER:

查非本行数据用开窗函数


select id,groupCtrlId, 
max(case when id=groupCtrlId then name end) over(partition by groupCtrlId)
from t

LINK:https://ask.csdn.net/questions/7679153?answer=53741932
SOURCE:CSDN_ASK
ASK_ID:7679168
ANSWER_ID:53741919
TITLE:where条件可能有多种,如何在一个表中拿到所有的结果
ANSWER:
select max(money) 最近一年最大,
max(case when 最近一月 then money end ) 最近一月最大
from t_money where 最近一年

LINK:https://ask.csdn.net/questions/7679168?answer=53741919
SOURCE:CSDN_ASK
ASK_ID:7678770
ANSWER_ID:53741862
TITLE:检索出每个班级中分数最低的同学id,姓名,分数,班级名称
ANSWER:

用开窗函数,每个表都只用查一次


select t.stu_id, c.name, t.score, d.name class_name
from (select a.stu_id,
a.class_id,
b.score,
dence_rank() over(partition by a.class_id order by b.score) rk
from tb_student_class a, tb_score b
where a.stu_id = b.stu_id) t,
tb_student c,
tb_class d
where t.rk = 1
and t.stu_id = c.id
and t.class_id = d.id

LINK:https://ask.csdn.net/questions/7678770?answer=53741862
SOURCE:CSDN_ASK
ASK_ID:7678777
ANSWER_ID:53741838
TITLE:oracle 判断字符串是否含逗号,如果有取第一个值
ANSWER:
 select case
when instr(t, ‘,’) > 0 then
substr(t, 1, instr(t, ‘,’) - 1)
else
t
end x
from (select ‘21355850,21356654,AF65385’ t from dual)

img


LINK:https://ask.csdn.net/questions/7678777?answer=53741838
SOURCE:CSDN_ASK
ASK_ID:7678808
ANSWER_ID:53741818
TITLE:sql server每月数据求和
ANSWER:

上个题我已经给过你提示了


下面是这个sql就是按照我上个题里的思路写的应该符合你的要求


select * from (
select t.jh,mth,sum(ryou_sum) over(partition by jh order by mth) ryou_sum1 from
(select jh,month(rq) mth,sum(ryou) ryou_sum from CSJING_SCSJB
where rq >=‘2022-01-01’ and rq<=‘2022-12-31’ group by month(rq),jh) t) tt
pivot (max(ryou_sum1) for mth in ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12])) as x

sqlserver里实测效果

img


不知道你要不要按jh分组,如果不分组,把jh相关的去掉就行了




没想到是这么老的版本,用下面这个吧



select jh,
case when sum(case when D.RQ BETWEEN ‘2022-01-01’ and ‘2022-01-31’ then d.ryou end) is null then null
else sum(case when D.RQ BETWEEN ‘2022-01-01’ and ‘2022-01-31’ then d.ryou end) end m1,
case when sum(case when D.RQ BETWEEN ‘2022-02-01’ and ‘2022-02-28’ then d.ryou end) is null then null
else sum(case when D.RQ BETWEEN ‘2022-01-01’ and ‘2022-02-28’ then d.ryou end) end m2,
case when sum(case when D.RQ BETWEEN ‘2022-03-01’ and ‘2022-03-31’ then d.ryou end) is null then null
else sum(case when D.RQ BETWEEN ‘2022-01-01’ and ‘2022-03-31’ then d.ryou end) end m3,
case when sum(case when D.RQ BETWEEN ‘2022-04-01’ and ‘2022-04-30’ then d.ryou end) is null then null
else sum(case when D.RQ BETWEEN ‘2022-01-01’ and ‘2022-04-30’ then d.ryou end) end m4
from CSJING_SCSJB d group by jh

img


LINK:https://ask.csdn.net/questions/7678808?answer=53741818
SOURCE:CSDN_ASK
ASK_ID:7678823
ANSWER_ID:53741796
TITLE:两台linux主机如何远程执行oracle数据泵导入操作?
ANSWER:

分下情况


  1. 假设数据量不大,建议将dmp内的各个对象用sql脚本的形式在B数据库执行
  2. 数据泵文件根据导出程序的不同,分为两种,一种是通过dmpdp导出的,一种是通过dmp导出的。对于dmp导出的文件,可以在imp命令中指定客户端本地路径的dmp文件,比如
    imp 用户名/密码@监听器路径/数据库实例名称 file=‘d:\数据库文件.dmp’ full=y ignore=y

  3. 想办法将这个dmp文件以一个blob值的方式存入B数据库中一个BLOB字段内,然后在B数据库上执行将这个BLOB字段作为文件写入B主机的目录,此时即可执行impdp命令。但将BLOB插入到数据库,这个就可能得借用其他开发语言了,如果有图形化工具能连数据库就可以直接导进去,可惜你这是通过跳板机再连的。
  4. 不知道你B主机能不能访问A主机,可以要求对方把A主机的一个目录挂载到B主机上,然后在B数据库内创建对应的目录,此时也可使用impdp导入

LINK:https://ask.csdn.net/questions/7678823?answer=53741796
SOURCE:CSDN_ASK
ASK_ID:7678834
ANSWER_ID:53741544
TITLE:关于#mysql#的问题:创建这个表格时控制台总会报错,看不出问题是什么原因
ANSWER:

你mysql的版本多少?实测你这个sql在5.5及以下版本会报错,但是在5.6及以上不会报错


img


img


LINK:https://ask.csdn.net/questions/7678834?answer=53741544
SOURCE:CSDN_ASK
ASK_ID:7678840
ANSWER_ID:53741537
TITLE:mysql大数据量查询 count groupby 查询无结果
ANSWER:

把order by去掉再试试,估计你这个数据量太大,src不同的值过多,临时表空间已经没法支撑排序了,建议得到group by 的结果后再排序,不要放在一起处理


LINK:https://ask.csdn.net/questions/7678840?answer=53741537
SOURCE:CSDN_ASK
ASK_ID:7678845
ANSWER_ID:53741532
TITLE:sq语句在线检测的网址或者工具
ANSWER:


这个应该可以满足你的要求,目前有9大数据库类型,共29个不同版本数据库可用


LINK:https://ask.csdn.net/questions/7678845?answer=53741532
SOURCE:CSDN_ASK
ASK_ID:7678871
ANSWER_ID:53741530
TITLE:oracle存储过程转换为MySQL存储过程
ANSWER:

看上去这是生成一组随机测试数据集。
里面大部分使用的oracle包及函数都可以找到mysql中的替代方式,但是poc_Name这个是你的自定义函数吧,这里面的逻辑也得转一个出来。
Dbms_Random是随机值,
trunc改成floor,
"||"改成用concat函数,
Decode改成case when,
Create_Time这个字段换一种写法,反正也是取随机,没必要完全按这个规则。
至于mysql的定义变量及循环结构,这个属于基础语法了,请自行查看相关基础教程


LINK:https://ask.csdn.net/questions/7678871?answer=53741530
SOURCE:CSDN_ASK
ASK_ID:7678547
ANSWER_ID:53740893
TITLE:sql server数据库中的两个ID之间是否存在联系
ANSWER:

可以用with递归,注意环的处理,比如


with t as (
select ‘3’ id1,‘4’ id2 union all
select ‘5’ id1,‘4’ id2 union all
select ‘6’ id1,‘5’ id2),
tt as (
select id1,id2 from t
union all
select id2,id1 from t
),
cte as (
select distinct ‘0’ id1,id1 id2,id1 root_node, 0 lvl from tt where id1=‘3’
union all
select tt.id1 ,tt.id2,cte.root_node,lvl+1 from tt join cte on tt.id1=cte.id2
where lvl<10
)
select distinct cte.root_node,id2 from cte where id2=‘6’

img


上面这个sql就是用’3’来找是否和’6’有关系,只看10层,不设限的话可能会有无限循环。
有必要的话,这个sql稍加改造,可以拼个关系链出来




下面这个就是从张3到马6的10层以内最短路径


with t as (
select ‘3’ id1,‘4’ id2 union all
select ‘5’ id1,‘4’ id2 union all
select ‘6’ id1,‘5’ id2),
tt as (
select id1,id2 from t
union all
select id2,id1 from t
),
cte as (
select distinct ‘0’ id1,id1 id2,cast(id1 as VARCHAR(100)) root_node,cast(id1 as VARCHAR(100)) path, 0 lvl from tt where id1=‘3’
union all
select tt.id1 ,tt.id2,cte.root_node,cast(cte.path+‘/’+tt.id2 as VARCHAR(100)) path,lvl+1 from tt join cte on tt.id1=cte.id2
where lvl<10
)
select top 1 root_node,id2,path from cte where id2=‘6’ order by lvl;

img


LINK:https://ask.csdn.net/questions/7678547?answer=53740893
SOURCE:CSDN_ASK
ASK_ID:7678318
ANSWER_ID:53740852
TITLE:SQL A表有 a1 a2字段,大概1000条数据。
ANSWER:

关联的条件不唯一,多对多关联,导致产生笛卡尔积,比如下面这个例子


img


LINK:https://ask.csdn.net/questions/7678318?answer=53740852
SOURCE:CSDN_ASK
ASK_ID:7678376
ANSWER_ID:53740837
TITLE:数据库这个是怎么回事呢?
ANSWER:

绝对是冲突了,不要只看当前界面,你当前数据处于编辑状态,不是表当前的实际数据。
建议你重新打开一个查询窗口,用sql去查查看到底有没有这个值,如果没有,就把前面的窗口关掉,在这个窗口执行insert插入


LINK:https://ask.csdn.net/questions/7678376?answer=53740837
SOURCE:CSDN_ASK
ASK_ID:7678455
ANSWER_ID:53740830
TITLE:mysql connector安装失败问题
ANSWER:

可能是网络原因导致下载失败,如果需要使用这两个连接驱动,可以去官网单独下载这两个包进行安装


img


LINK:https://ask.csdn.net/questions/7678455?answer=53740830
SOURCE:CSDN_ASK
ASK_ID:7678476
ANSWER_ID:53740825
TITLE:关于#mysql#的问题:mysql
ANSWER:

你学生不增加了是吧?确定是想用这种方法随机找一个学生?
为什么不随机定位一行呢?非得去找个学号?
用下面这种方式也能取随机一行


select * from students order by rand() limit 1

rand()是个伪列函数,返回的不是一个值,而是一列值,因此你表里有多少行数据,它就会返回多少个值,然后有概率刚好可以匹配上多行记录


LINK:https://ask.csdn.net/questions/7678476?answer=53740825
SOURCE:CSDN_ASK
ASK_ID:7678158
ANSWER_ID:53740808
TITLE:sql判断某一列,加载列的和
ANSWER:

说说看用的是什么数据库,不同数据库的写法不一样。
这个思路其实可以这样,先简单做每个月的月汇总,竖着的,然后使用开窗函数的移动窗口,从第一行到当前行累加,最后再做个行列转换就行了,
这样代码量比你目前的代码量少得多,而且可以达到你想要的效果


LINK:https://ask.csdn.net/questions/7678158?answer=53740808
SOURCE:CSDN_ASK
ASK_ID:7678276
ANSWER_ID:53740524
TITLE:ACCESS想查找一下customer里cust_id有但sales_detail表里cust_id无的数据,SQL写完运行无结果
ANSWER:
  1. not in
    SELECT customer.cust_name
    FROM customer
    WHERE customer.cust_id Not In (SELECT cust_id FROM sales_detail);

  2. not exists
    SELECT customer.cust_name
    FROM customer
    WHERE Not exists (SELECT 1 FROM sales_detail where customer.cust_id=sales_detail.cust_id);

  3. left join
    SELECT distinct customer.cust_name
    FROM customer left JOIN sales_detail ON customer.cust_id = sales_detail.cust_id
    WHERE sales_detail.cust_id is null


LINK:https://ask.csdn.net/questions/7678276?answer=53740524
SOURCE:CSDN_ASK
ASK_ID:7678295
ANSWER_ID:53740520
TITLE:在sql中多大的数据才算是大数据?
ANSWER:

"大数据量"和"大数据"不一样。
前者只是对量多少的一种模糊描述,而后者是一种方式或者说是一类工具。
使用"大数据"工具来处理"小数据量"的数据,其实也很常见;
使用"非大数据"工具,模拟"大数据"处理方式来处理"大量数据",也是有的。


LINK:https://ask.csdn.net/questions/7678295?answer=53740520
SOURCE:CSDN_ASK
ASK_ID:7678198
ANSWER_ID:53740515
TITLE:Oracle12 database安装时Activeperl与数据库建立联系时老是错误
ANSWER:

img


肉眼观察,此处空格宽度不对


LINK:https://ask.csdn.net/questions/7678198?answer=53740515
SOURCE:CSDN_ASK
ASK_ID:7678114
ANSWER_ID:53740426
TITLE:oracle中merge into怎么转换成postgresql?如图
ANSWER:
  1. postgresql从11版本起,支持merge into 语法
  2. 老版本可以使用insert on conflict语法,可以参考这篇文章
  3. 另外,还可以使用with,可参考这篇文章

LINK:https://ask.csdn.net/questions/7678114?answer=53740426
SOURCE:CSDN_ASK
ASK_ID:7678031
ANSWER_ID:53740149
TITLE:oracle存储过程重复执行,用于表1更新表2数据,怎么做到表2被更新过的数据不再拿来更新呢
ANSWER:

在表1上新增一个状态字段,默认为"未处理",每次更新都只找"未处理"状态的数据,更新完一次后,标记这个字段为"处理完成",注意在游标中处理,防止在更新数据时正好有数据写入


LINK:https://ask.csdn.net/questions/7678031?answer=53740149
SOURCE:CSDN_ASK
ASK_ID:7677834
ANSWER_ID:53740143
TITLE:sql的索引影响速度很大么?
ANSWER:

索引建得越复杂,插入速度就会越慢。
而且几百万的数据真不算大。
就算快0.01s也是快,积少成多,节省的时间也是不可小觑的。
在不同的场景中,应该要使用不同的方式,有些表不适合建索引,有些表需要建很多索引,
但是事情一做得多就容易犯错,没有很充足的经验,是无法很好的把握索引该如何建立的,
而经验很足的,甚至可以做到建很多索引都不怎么影响插入效率。
所以那些指导教程,就是针对那些不会深入研究数据库机制的人而说的,为了避免初学者犯错而切断了一条可行但容易犯错的道路。


LINK:https://ask.csdn.net/questions/7677834?answer=53740143
SOURCE:CSDN_ASK
ASK_ID:7678009
ANSWER_ID:53740124
TITLE:sql语句添加发生冲突
ANSWER:

你看下CSJING_JBXXB这个表的表结构,是不是有主键、唯一索引、约束、检查之类的东西。
比如某个字段是主键,然后这个表里已经存在这个值了,你再插入一个相同的值,它当然就会报错,如果不报错,数据不就重复了?


LINK:https://ask.csdn.net/questions/7678009?answer=53740124
SOURCE:CSDN_ASK
ASK_ID:7677670
ANSWER_ID:53739474
TITLE:刚在学数据库,大家看看该怎么码。
ANSWER:

弄个check判断一下就好了


LINK:https://ask.csdn.net/questions/7677670?answer=53739474
SOURCE:CSDN_ASK
ASK_ID:7677505
ANSWER_ID:53739473
TITLE:如何从K1到K16这16个组里 任意取10个组,保证这10个组的分数相加的和为33,请专家答疑解惑
ANSWER:
with t as (
select * from #tb where klass not in (‘k2’,‘k16’)
), x as (
select concat(‘-’,‘k2’ ,‘-’,t1.klass ,‘-’,t2.klass ,‘-’,t3.klass ,‘-’,t4.klass ,‘-’,‘k16’,‘-’) cc
from t t1,t t2,t t3,t t4
where t1.id<t2.id
and t2.id<t3.id
and t3.id<t4.id and
t1.wvalue+t2.wvalue+t3.wvalue+t4.wvalue=31),
c as (
select cc,klass,‘c’+cast(row_number() over(partition by cc order by id) as VARCHAR) rn from x ,#tb
where charindex(concat(‘-’,klass ,‘-’),cc)=0)
select c1,c2,c3,c4,c5,c6,c7,c8,c9,c10 from c pivot (max(klass) for rn in (c1,c2,c3,c4,c5,c6,c7,c8,c9,c10)) as z

img


思路:
16个数字里挑10个数字任意组合,有1099511627776种可能性,
当前16个数字求和为101,需要剔除6个数字之和为101-33=68,
转化为从16个数字里找6个数字之和为68,此时任意排列的可能性有16777216种,
观察数据分布规律,易得最大的两个数字为必选,否则无法满足6个数字为68,
因此问题转化为 14 个数字里挑 4个数字等于68-21-26=31,此时任意排列的可能性有38416种,
如果要按key从小到大排列,此时只有1001种可能性,数据库完全可以支撑计算,所以就有了上面这个sql


LINK:https://ask.csdn.net/questions/7677505?answer=53739473
SOURCE:CSDN_ASK
ASK_ID:7677188
ANSWER_ID:53739264
TITLE:Mysql 更新表时Incorrect Datetime Value
ANSWER:

把你目标表的表结构发出来一下看看


LINK:https://ask.csdn.net/questions/7677188?answer=53739264
SOURCE:CSDN_ASK
ASK_ID:7677213
ANSWER_ID:53739260
TITLE:请问怎么把jieba库的结果导入进mysql,还是只能jieba分词结果手动输入进mysql
ANSWER:

在python 里可以连接mysql数据库,可以拼接sql语句,将jieba的结果insert到数据库里指定的一张表里去


LINK:https://ask.csdn.net/questions/7677213?answer=53739260
SOURCE:CSDN_ASK
ASK_ID:7677237
ANSWER_ID:53739255
TITLE:sql语句的问题,有什么好办法
ANSWER:

一个简单的关联后再count而已


select areaId,
count(distinct a.id) 学校数,
count(1) 师生数
from a,b
where a.id=b.schoolId
group by areaId

LINK:https://ask.csdn.net/questions/7677237?answer=53739255
SOURCE:CSDN_ASK
ASK_ID:7677315
ANSWER_ID:53739248
TITLE:oracle 12c 插拔式数据库,密码无效。
ANSWER:

这个要用PDB的名称作为service_name来新建一个tnsname,然后连接的时候指定连接到pdb环境,
或者用下面这种方式


conn test2/oracle@localhost:1521/orclpdb

不指定环境的话,它默认就连到cdb上去了,而cdb里面没这个用户,它当然报错了


LINK:https://ask.csdn.net/questions/7677315?answer=53739248
SOURCE:CSDN_ASK
ASK_ID:7677327
ANSWER_ID:53739236
TITLE:Oracle19草Scott登录被拒绝求解答
ANSWER:

因为oracle19c版本里压根就没有scott这个用户,那些用scott用户的教程都是十几年前的过时教程了。
新的教程应该教你怎么安装hr用户,并以hr用户为例来写sql用例


LINK:https://ask.csdn.net/questions/7677327?answer=53739236
SOURCE:CSDN_ASK
ASK_ID:7677343
ANSWER_ID:53739228
TITLE:无法绑定由多个部分组成的标识符,如何解决?
ANSWER:

img


同一层的表连接要么都用逗号,要么都用join,别两种混用


LINK:https://ask.csdn.net/questions/7677343?answer=53739228
SOURCE:CSDN_ASK
ASK_ID:7677391
ANSWER_ID:53739226
TITLE:Oracle更新多行某字段数据
ANSWER:

请用数据举例


LINK:https://ask.csdn.net/questions/7677391?answer=53739226
SOURCE:CSDN_ASK
ASK_ID:7677122
ANSWER_ID:53738904
TITLE:dbeaver连接click house有问题,提示不能创建实例
ANSWER:

can't load driver class 'com.clickhouse.jdbc.ClickHouseDriver'



还是少了驱动文件


LINK:https://ask.csdn.net/questions/7677122?answer=53738904
SOURCE:CSDN_ASK
ASK_ID:7677098
ANSWER_ID:53738898
TITLE:tracer for oracle 跟踪oracle中文字段是乱码
ANSWER:

你访问数据库的客户端字符集与这个软件显示的字符集不一致,但这个软件貌似没有地方可以调整字符集,
因此尝试设置把环境变量里的NLS_LANG最后一节设置成ZHS16GBK或者AL32UTF8试试,虽然不一定有用。


LINK:https://ask.csdn.net/questions/7677098?answer=53738898
SOURCE:CSDN_ASK
ASK_ID:7677065
ANSWER_ID:53738862
TITLE:请问oracle存储过程更新员工请假数据问题
ANSWER:

不应该采取这种更新加的方式,而是应该直接根据当前数据把这些值统计出来,因为光根据时间是无法判断数据是否为新增


select 员工id,请假类型,
sum(case when 扣假类型=‘扣调休’ then 请假时长 else 0 end ) 扣调休,
sum(case when 扣假类型=‘扣年假’ then 请假时长 else 0 end ) 扣年假,
sum(case when 扣假类型=‘扣事假’ then 请假时长 else 0 end ) 扣事假

from1 where last_day(开始时间)=last_day(sysdate)
group by 员工id,请假类型

这样你就可以直接拿这个数据更新,甚至可以直接用这个数据出报表了


LINK:https://ask.csdn.net/questions/7677065?answer=53738862
SOURCE:CSDN_ASK
ASK_ID:7676767
ANSWER_ID:53738827
TITLE:sql 求各班级平均分及个人平均分
ANSWER:

用开窗函数呗


select t.*,
avg(grade) over(partition by studentno) 个人平均分,
avg(grade) over(partition by classno) 班级平均分
from STSCORE t

本行数据要出现非本行数据中的字段或用到了非本行数据的统计值,要么另外写个子查询来关联,要么就用开窗函数


LINK:https://ask.csdn.net/questions/7676767?answer=53738827
SOURCE:CSDN_ASK
ASK_ID:7676769
ANSWER_ID:53738812
TITLE:case when 结合 sum函数失效
ANSWER:

最直接的思路,先查一次合计的,然后再union all 一次没有合计的


select * fromwhere level2=‘合计’
union all
select * from 表 a where not exists
(select 1 from 表 b where a.comcode=b.comcode and a.pubdate=b.pubdate and b.level2=‘合计’)

另外一种思路,将合计和非合计的统计成两个字段分别统计,再判断原有的合计是否为0,为0则取非合计的统计值,不为0则取合计的统计值


select comcode ,pubdate,
case when
sum(case when level2=‘合计’ then 出栏量 else 0 end ) =0 then
sum(case when level2<>‘合计’ then 出栏量 else 0 end )
else
sum(case when level2=‘合计’ then 出栏量 else 0 end )
end
fromgroup by comcode ,pubdate

其实上面两种方式,要么是按行拆开,要么是按列拆开,当然也有其他写法,但方向应该都是怎么把数据拆开,才方便进行统计


LINK:https://ask.csdn.net/questions/7676769?answer=53738812
SOURCE:CSDN_ASK
ASK_ID:7676805
ANSWER_ID:53738785
TITLE:修改oracle的系统时间,使sysdate为之后指定的时间
ANSWER:

oracle的sysdate是从数据库所在的服务器操作系统上取的,通俗点说就是电脑时间,随便修改可能会导致各种异常问题。
下面几种方式都可以指定日期时间


select date ‘2022-03-22’ 指定日期,
date2022-03-22’ + 8 / 24 指定日期8点,
sysdate + 3 当前时间加3天,
to_date(‘20220401’,‘yyyymmdd’) 指定日期,
to_date(‘2022-04-01 08:35:45’,‘yyyy-mm-dd hh24:mi:ss’) 指定日期时间
from dual

img


LINK:https://ask.csdn.net/questions/7676805?answer=53738785
SOURCE:CSDN_ASK
ASK_ID:7676846
ANSWER_ID:53738580
TITLE:Oracle查询出column1一致column2不一致的数据
ANSWER:

不一致不就是不相等么?没明白你为什么会想着写个这么复杂的sql


select * from tableName  where column1 <>column2

如果有空值


select * from tableName  where nvl(column1,‘x’) <>nvl(column2,‘x’)



column1一致column2不一致,查询结果只需要对应的column1有哪些值的话


select column1 from tableName group by column1 having count(distinct column2)>1

如果需要同时展示原表所有字段数据,要么用上面这个数据作为匹配条件,要么用开窗函数来实现只对原表进行一次查询


select * from (
select a.*,count(distinct column2) over(partition by column1) ct from tableName a)
where ct>1

LINK:https://ask.csdn.net/questions/7676846?answer=53738580
SOURCE:CSDN_ASK
ASK_ID:7676928
ANSWER_ID:53738572
TITLE:如何Excel Power Query分组依据分组后,提取每一个分组的前10行数据
ANSWER:

可以参考这篇文章


另外,也可以使用TABLE.GROUP


LINK:https://ask.csdn.net/questions/7676928?answer=53738572
SOURCE:CSDN_ASK
ASK_ID:7676146
ANSWER_ID:53737830
TITLE:sql Server过程(如下图)这种是什么原因昂
ANSWER:

这个报错是说这个东西是个表,不能当成过程来执行,查询表只能用select


LINK:https://ask.csdn.net/questions/7676146?answer=53737830
SOURCE:CSDN_ASK
ASK_ID:7676514
ANSWER_ID:53737821
TITLE:MySQL里 求在A表中的SFZH和name两列,和B表中的sfzh和name两列没有的数据,如何解决?
ANSWER:
select * from a 
where not exists (select 1 from b where a.SFZH=b.sfzh and a.name=b.name)

LINK:https://ask.csdn.net/questions/7676514?answer=53737821
SOURCE:CSDN_ASK
ASK_ID:7676314
ANSWER_ID:53737776
TITLE:NBA预测应用数据统计
ANSWER:

你预测是想说预测胜负?重点是看你用什么数据,以及各数据所占的权重、整体的计算模型设计。
预测比赛胜负这种事大把的人做,对于实力相差悬殊的,算出来会很准,但实力差不多的,那就要看数据是否足够多、足够精细、模型拟合度是否足够高了。
理论上,如果能掌握所有因子,那么未来就是可以预测的,难点就是无法找出所有的因子




影响胜负的因子可不仅仅只有这一点点球员数据哦,比如这个球员吃了什么,赛前做了什么事,教练心情怎么样,观众有哪些,球场地板状态,裁判等等…还要结合历史每一场的这些因子,综合判断所有因子对这个胜负模型的影响,考虑得越多预测得就越准


LINK:https://ask.csdn.net/questions/7676314?answer=53737776
SOURCE:CSDN_ASK
ASK_ID:7676354
ANSWER_ID:53737764
TITLE:sql问题,目前卡住了
ANSWER:

说下你用的数据库是什么,版本是多少。
这题的思路可以这样,先用case when 按区间获得4个字段,一行数据,然后再进行行列转换,但你没说你用的什么数据库,我先用oracle举个例子


 with t as (  
select ‘PNO0011’ 运单号, ‘CC001’ 客户id, ‘2020-05-01’ 创建日期 from dual)
select * from (
select
count(case when ct between 0 and 5 then 1 end) t0_t5,
count(case when ct between 6 and 10 then 1 end) t6_t10,
count(case when ct between 11 and 20 then 1 end) t11_t20,
count(case when ct > 20 then 1 end) t20_max from
(select 客户id,count(1) ct from t group by 客户id))
unpivot (v for 单量 in (T0_T5, T6_T10, T11_T20, T20_MAX))

img




mysql的话,用下面这个写法


 with t as (  
select ‘PNO0011’ 运单号, ‘CC001’ 客户id, ‘2020-05-01’ 创建日期 from dual)

select 单量,客户数 from (
select
count(case when ct between 0 and 5 then 1 end) a,
count(case when ct between 6 and 10 then 1 end) b,
count(case when ct between 11 and 20 then 1 end) c,
count(case when ct > 20 then 1 end) d from
(select 客户id,count(1) ct from t group by 客户id) t1) t2
cross join lateral (
select a, ‘0-5’ union all
select b, ‘6-10’ union all
select c, ‘11-20’ union all
select d, ‘20以上’
) as x(客户数, 单量)

img


LINK:https://ask.csdn.net/questions/7676354?answer=53737764
SOURCE:CSDN_ASK
ASK_ID:7676357
ANSWER_ID:53737739
TITLE:如何解决查询20部门奖金为空的员工信息的问题
ANSWER:

请给出你的表结构、数据,以及你想要得到的查询结果样例


LINK:https://ask.csdn.net/questions/7676357?answer=53737739
SOURCE:CSDN_ASK
ASK_ID:7676423
ANSWER_ID:53737736
TITLE:PYMYSQL 总说语法错误
ANSWER:

img


这两个逗号好像长得不一样


LINK:https://ask.csdn.net/questions/7676423?answer=53737736
SOURCE:CSDN_ASK
ASK_ID:7676401
ANSWER_ID:53737729
TITLE:Navicat15怎么设置默认小写??
ANSWER:

能不能说一下你的操作步骤,再截几个图说明一下?你指的大写是什么时候在哪里出现大写?




你说的是关键词自动完成的功能?
那你可以关闭这个自动完成,全手动输入,想大写就大写,想小写就小写。
另外,sql规范里的确有说建议关键词大写。
大写看多了就习惯了。


LINK:https://ask.csdn.net/questions/7676401?answer=53737729
SOURCE:CSDN_ASK
ASK_ID:7676177
ANSWER_ID:53737719
TITLE:为啥有人说谈恋爱不要找程序员?
ANSWER:

开启debug1,然后手动运行job,看看具体报什么错


SET client_min_messages TO DEBUG1;
CALL run_job(1000);

参考官方文档


LINK:https://ask.csdn.net/questions/7676177?answer=53737719
SOURCE:CSDN_ASK
ASK_ID:7676080
ANSWER_ID:53737565
TITLE:HIVESQL数据排序问题
ANSWER:
  1. 如果不要求数据绝对精准,hive中有一些近似查询函数,带有approx前缀或者后缀,可以朝这个方向考虑
  2. "无法全局排序",但他没说是不是可以分片排序。比如,可以把原数据拆成N份,每份分别进行排序,每份都取前10条,获得10N条的记录,然后再针对这10N条的数据排序取前十。

LINK:https://ask.csdn.net/questions/7676080?answer=53737565
SOURCE:CSDN_ASK
ASK_ID:7676164
ANSWER_ID:53737545
TITLE:如何将冗杂SQL进行简易传达
ANSWER:

首先,必须要了解这个sql中的用到的所有语法,
然后,把sql拆解,连上数据库去查,了解具体是查的什么数据,
必要的时候甚至要去看程序代码及数据流程设计(如果有的情况下)来分析。
这种几乎完全是看经验了,当你积累得多了,之后自然就能快速解读sql了


LINK:https://ask.csdn.net/questions/7676164?answer=53737545
SOURCE:CSDN_ASK
ASK_ID:7675591
ANSWER_ID:53737533
TITLE:oracle 如何实现树结构合并查询
ANSWER:

with递归比connect by 递归更容易理解


–测试数据
create table test_20220329_company (dept_id number ,name varchar2(100),pid number);
insert into test_20220329_company values(0,‘总公司’,null);
insert into test_20220329_company values (1,‘一公司’,0);
insert into test_20220329_company values (2,‘一公司销售部’,1);
insert into test_20220329_company values (7,‘一公司销售部一分部’,2);
insert into test_20220329_company values (4,‘二公司’,0);
insert into test_20220329_company values (6‘二公司采购部’,4);
commit;
create table test_20220329_employee (user_id number ,dept_id number);
insert into test_20220329_employee values(10,7);
insert into test_20220329_employee values (11,2);
insert into test_20220329_employee values (12,4);
commit;

–查询sql
with t(dept_id,name,pid,p) as
(select dept_id,name,pid, a.name p
from test_20220329_company a
where dept_id = 0
union all
select a.dept_id,a.name,a.pid, a.name || ‘/’ || t.p p
from test_20220329_company a, t
where a.pid = t.dept_id)
select user_id,p from t,test_20220329_employee e where e.dept_id=t.dept_id;

img


LINK:https://ask.csdn.net/questions/7675591?answer=53737533
SOURCE:CSDN_ASK
ASK_ID:7675601
ANSWER_ID:53737510
TITLE:SQL中的数字转换事宜
ANSWER:

不知道你用的是什么数据库,不同的数据库这几个函数有一点点区别,下面以oracle为例


  1. to_char可以将很多种类型的数据转换成指定格式的字符串,这里注意关键词 “多种类型” “指定格式”
    官方文档:

img


  1. to_date,将字符串,根据指定的格式转换成日期,比如


    to_date(‘20220329174000’,‘yyyymmddhh24miss’),
    to_date(‘2022-03-04’,‘yyyy-mm-dd’),
    to_date(‘03-04-2022’,‘mm-dd-yyyy’),
    to_date(‘04-03-2022’,‘dd-mm-yyyy’)

    注意2个参数格式要保持一致
    官方文档:


  2. cast,将某种类型转换成某种类型,和上面相比,这就很明显了,在某些情况下,当你不指定格式的时候,它是不知道该如何进行转换的,比如’03-04-2022’ 究竟是3月4号还是4月3号呢?当然,cast其实也可以指定格式,但用起来比to_date 和to_char要麻烦一点
    官方文档:



LINK:https://ask.csdn.net/questions/7675601?answer=53737510
SOURCE:CSDN_ASK
ASK_ID:7675603
ANSWER_ID:53737494
TITLE:SQL中SET函数的问题
ANSWER:

把"new"的值,赋给dips.sql.hgt.getjsonobj这个对象中的new值


LINK:https://ask.csdn.net/questions/7675603?answer=53737494
SOURCE:CSDN_ASK
ASK_ID:7675608
ANSWER_ID:53737491
TITLE:mysql中函数的问题!
ANSWER:

GET_JSON_OBJECT是一个函数,第一个参数是一个json字段,第二个参数是json的路径,
也就是说,它找的是 "hdyjjs_ehtend_fehgd"这个字段里,根路径下存在 "ghdyg"这个key,并且"ghdyg"的值存在0号元素(即是个元素个数大于0的列表)


LINK:https://ask.csdn.net/questions/7675608?answer=53737491
SOURCE:CSDN_ASK
ASK_ID:7675649
ANSWER_ID:53737483
TITLE:MySQL一直出现这个问题
ANSWER:

这语法错误很明显啊,随便找个现有的表对比一下就知道了,下面这个语法才是正确的


CREATE TABLE user(
id int unsigned not null auto_increment,
name nvarchar(32),
sex nvarchar(32),
age int,
password nvarchar(32),
primary key(id) )
engine=Innodb;

img


LINK:https://ask.csdn.net/questions/7675649?answer=53737483
SOURCE:CSDN_ASK
ASK_ID:7675674
ANSWER_ID:53737474
TITLE:mysql的更新、删除执行慢,为什么?
ANSWER:

要删除表里面的全部数据时,请使用truncate


TRUNCATE TABLE 表名;

delete 执行的并非单纯的删除,建议去了解一下undo、redo的相关机制,update也是同理。
另外,一次性处理太多数据时,对内存压力会很大,建议分批处理
如果你是带条件更新数据,而这个条件字段是有索引的,的确会提升检索效率,但是如果你要更新的字段上也有索引,那么索引的存在反而会导致效率降低,插入和删除也是同理


LINK:https://ask.csdn.net/questions/7675674?answer=53737474
SOURCE:CSDN_ASK
ASK_ID:7675727
ANSWER_ID:53737448
TITLE:如何创建一个小吃的数据库
ANSWER:

如何创建不重要,重要的是你想做成什么样子,如果想不出,你可以先拿个excel表格填一填,第一列为小吃id,第二列为小吃名称,第一行为小吃的各个属性名称,想得差不多了,数据库里的表就可以照着这个样子建了


LINK:https://ask.csdn.net/questions/7675727?answer=53737448
SOURCE:CSDN_ASK
ASK_ID:7675766
ANSWER_ID:53737410
TITLE:Oracle12,用PLSQL Developer可以正常连接,用ado或DB Tools Open Connection VI 访问都是都出错
ANSWER:

有两种方式,使用oracle官方提供的新版ODAC或ODBC驱动,这需要到oracle官网下载


具体可以参考下面这篇文章


LINK:https://ask.csdn.net/questions/7675766?answer=53737410
SOURCE:CSDN_ASK
ASK_ID:7675857
ANSWER_ID:53737388
TITLE:python读取mysql生成excel然后以html形式在邮件正文发送邮件
ANSWER:

你是不是用了啥EXCEL转换成HTML的组件?这完全没必要啊,HTML的表格语法很简单的,你直接读出数据然后循环去拼标签就行了,你想让表格长啥样就能长啥样
表格语法可以参考下面这个


比如下面这段html代码


<table border=“1”>
<tr>
<th>Heading</th>
<th>Another Heading</th>
</tr>
<tr>
<td>row 1, cell 1</td>
<td>row 1, cell 2</td>
</tr>
<tr>
<td>row 2, cell 1</td>
<td>row 2, cell 2</td>
</tr>
</table>

下面是展示效果


HeadingAnother Heading
row 1, cell 1row 1, cell 2
row 2, cell 1row 2, cell 2
LINK:https://ask.csdn.net/questions/7675857?answer=53737388
SOURCE:CSDN_ASK
ASK_ID:7675936
ANSWER_ID:53737362
TITLE:就是怎么去吧11239这五位数字的排列组合一一的显示出来
ANSWER:

有没有要求用什么语言代码实现?
另外,第一个1和第二个1交换顺序是算一种新的排列还是不算一种新的排列?然后,这些数字是否允许重复出现?
下面这个是用oracle的sql实现的


with t as (
select 1 rn, 1 a from dual union all
select 2, 1 from dual union all
select 3, 2 from dual union all
select 4, 3 from dual union all
select 5, 9 from dual )
select distinct t1.a||t2.a||t3.a||t4.a||t5.a
from t t1,t t2,t t3,t t4,t t5
where t1.rn<>t2.rn and t1.rn<>t3.rn and t1.rn<>t4.rn and t1.rn<>t5.rn
and t2.rn<>t3.rn and t2.rn<>t4.rn and t2.rn<>t5.rn
and t3.rn<>t4.rn and t3.rn<>t5.rn
and t4.rn<>t5.rn

img


结果不重复的有60个,如果那两个1要当成不一样的,把distinct去掉,就是120个


LINK:https://ask.csdn.net/questions/7675936?answer=53737362
SOURCE:CSDN_ASK
ASK_ID:7676028
ANSWER_ID:53737284
TITLE:怎么设置数据表的bit数据类型?
ANSWER:

数据库里面存的是什么值就是什么值,没有所谓的存是一个值显式又是另一个值了,因为数据库本身并不提供"显示"功能,“显示"都是由数据库外的其他工具来负责的.


一般来说,如果一个字段要存"真假” 类型的数据,大多数情况下是直接设置成整形,用1和0来表示,有些数据库支持BOOLEAN类型字段,当然也可以直接使用,但这在其他语言开发时可能会要进行一些特殊处理。另外,如果要求不严格,也是可以直接存成’Y/N’或者’及格/不及格’的字符串,但这样就增大了需要的存储空间,而且查询效率也会变低,因此还是建议用1和0来表示


另外,可以在sql里对值进行转换处理


select case when 字段=1 then ‘及格’ when 字段=0 then ‘不及格’ eles ‘未知’ end from 表; 

LINK:https://ask.csdn.net/questions/7676028?answer=53737284
SOURCE:CSDN_ASK
ASK_ID:7676054
ANSWER_ID:53737263
TITLE:为什么总提示我的派生表不存在,我的括号什么的都检查没错了,求经验丰富的同志解答
ANSWER:

子查询只能在包住它的上一层select里使用,不能再其他地方使用,更加不能再select这个子查询的别名。
如果要对一个子查询进行多次select,应该在最前面使用with as 来对这个子查询进行定义。
另外,你这个sql里错误地方太多,完全不符合sql语法逻辑,因此没办法通过小改来进行修正了


select 
from (select row_number() over(order by avg(a.salary)) rn, a.department_id
from employees a
group by a.department_id) aa,
departments b
where aa.department_id = b.department_id
and rn = 1;

img


如果不使用开窗函数的话,就用下面这个


with t as
(select a.department_id, avg(a.salary) av
from employees a
group by a.department_id)
select b.

from t, departments b
where av = (select min(av) from t)
and t.department_id = b.department_id

img


LINK:https://ask.csdn.net/questions/7676054?answer=53737263
SOURCE:CSDN_ASK
ASK_ID:7675942
ANSWER_ID:53737214
TITLE:postgre数据库sql查询中,如何使一个id字段等于一个id的列表
ANSWER:

你贴的这个sql对解答这个问题貌似没有任何帮助,
建议你把这个逻辑简化一下,贴出对应的数据结构,看看你是什么样的数据想和什么样的数据关联,最后想要得到的数据是长什么样子。
关系型数据库的关联条件本就是可以一对多的,
如果是想让一个值和一个由多个值组成的字符串关联,也是可行的,但这种情况不同数据库的处理方式不一样,所以你还得说明一下你用的是什么数据库




问题改了后清晰多了,这就一个简单的开窗函数运用问题,把一个表里下一行的数据放到本行。


开窗函数lead,是可以使用partition by 关键词来进行分组的,也就是说可以按照路程号分组,每组之间的数据并不会出现交叉,
比如下面就是按journey_number分组


select a.*,
lead(longitude) over(partition by journey_number order by client_time) 下一个经度,
lead(latitude) over(partition by journey_number order by client_time) 下一个纬度
from vehicle_location a

LINK:https://ask.csdn.net/questions/7675942?answer=53737214
SOURCE:CSDN_ASK
ASK_ID:7676030
ANSWER_ID:53737192
TITLE:手机可以在不使用浏览器的情况下实现浏览网站吗?
ANSWER:

你在"我的电脑"的地址栏输入网址后回车,其实也是打开的网页浏览器,相当于你把网址保存成了一个快捷方式,然后双击打开这个快捷方式一个效果,它并不能在资源管理器中直接浏览网页。
手机上也有类似的操作,但不同手机不一样,比如某些手机上滑直接打开全局搜索,然后输入网址就会跳转到浏览器打开,或者直接一个语音告诉手机要打开什么网址,其实都是一样的,必须要使用网页浏览器。
在我的电脑里输入网址,如果是ftp协议的,是可以直接在资源管理器里显示的,但是很多手机的文件管理器没这个功能,需要借助第三方文件管理器,比如ES文件管理器


LINK:https://ask.csdn.net/questions/7676030?answer=53737192
SOURCE:CSDN_ASK
ASK_ID:7675363
ANSWER_ID:53736266
TITLE:怎么用jupyter notebook 绘制词云图
ANSWER:

pip安装wordcloud和jieba这两个包


pip3 install wordcloud jieba

然后再找个例子稍微改改就行了


可以参考这篇文章


img


这个是我用上面这篇文章的代码在本机测试的


至于在python里怎么读取文本文件内容作为字符串,这个就是基础知识了,与wordcloud怎么用没啥关系


LINK:https://ask.csdn.net/questions/7675363?answer=53736266
SOURCE:CSDN_ASK
ASK_ID:7675275
ANSWER_ID:53736148
TITLE:请问这个sql还能怎么优化
ANSWER:

把这3个表的表结构贴出来看看,
尤其是这个cy_custinfo,如果它的custId也是唯一的话,那么根本就没必要再关联这个表了,因为它既没使查询结果增加行数,也没有使用过滤条件来减少数据;
如果它的custId不是唯一,那么你这个sql就有问题了,构造了一个笛卡尔积,数据翻倍。
所以假定是唯一,那么直接把这个表去掉,会发现sql变成了这样


select count(1)
from sys_user a, dingding_office do
where a.cust_id = do.cust_id
AND a.office_id = do.dingding_id
and a.login_name != ‘’
AND a.system IS NULL
AND a.del_flag = ‘0’

此时再要提升查询效率就应该从索引上着手了


LINK:https://ask.csdn.net/questions/7675275?answer=53736148
SOURCE:CSDN_ASK
ASK_ID:7675353
ANSWER_ID:53736139
TITLE:sql 查询 省略毫秒 通过分查询显示结果
ANSWER:

一般有两种方式,使用范围条件 ,或者对字段进行格式化
比如要查2022年3月28号的17点整(含)到18点整(不含),以mysql为例


where 字段 between concat(‘2021-03-38 17:00:00’,‘.000’) and concat(‘2021-03-38 17:59:59’,‘.999’) 
–或
where 字段 >=‘2021-03-38 17:00:00’ and 字段<‘2021-03-38 18:00:00’

where  date_format(字段, ‘%Y-%m-%d %H’)=‘2021-03-38 17

一般推荐使用范围查询的方式,因为对字段进行格式化会影响查询效率。
另外,不同数据库的字符串拼接方式以及日期格式化函数不一样,由于你未提供数据库类型,如果不会转换,请自行搜索相关数据库的函数


LINK:https://ask.csdn.net/questions/7675353?answer=53736139
SOURCE:CSDN_ASK
ASK_ID:7675214
ANSWER_ID:53735993
TITLE:oracle把一个字段按逗号拆开
ANSWER:

用正则截取加递归


SELECT REGEXP_SUBSTR(T.STR, ‘[^,]+’, 1, LEVEL) AS A
FROM (select ‘22,37,42,84,40’ str from dual) T
CONNECT BY LEVEL <= REGEXP_COUNT(T.STR, ‘[^,]+’)

img


另外一种截取方式和另外一种递归方式


with t as
(select ‘22,37,42,84,40’ || ‘,’ str from dual),
x(val,lvl) as
(select substr(str, 1, instr(str, ‘,’) - 1), 1 lvl
from t
union all
select substr(str,
instr(str, ‘,’, 1, lvl) + 1,
instr(str, ‘,’, 1, lvl + 1) - instr(str, ‘,’, 1, lvl) - 1),
lvl + 1
from x, t
where instr(str, ‘,’, 1, lvl + 1) <> 0)
select * from x;

img


LINK:https://ask.csdn.net/questions/7675214?answer=53735993
SOURCE:CSDN_ASK
ASK_ID:7675112
ANSWER_ID:53735879
TITLE:pgsql正则表达式匹配数字问题
ANSWER:

你原始数据长什么样?能不能举个例子?




select string_agg(case when a <110 then a end,‘、’) from 
(select (regexp_matches(‘10、35、20、110、200、500’,‘\d+’,‘g’))[1] a )

img


LINK:https://ask.csdn.net/questions/7675112?answer=53735879
SOURCE:CSDN_ASK
ASK_ID:7675149
ANSWER_ID:53735874
TITLE:如何实现SQL语句查询表字段'相同的值'给展示出来,注意,在头部的查询功能依然可以查出该字段'其他的值'。
ANSWER:

你所谓的头部查询功能,是不是出现一个值列表让用户选择?但这个值列表本身不就应该也是个单独的查询么?


select distinct 姓名 from

当然如果有单独的用户表更好。




下拉框中的值和查询数据本体应该设计成两个不同的sql,所有的报表都应如此。页面打开后直接发起下拉框中sql的查询,获得下拉框的值,然后用户选择一个值,再点击查询,此时发起报表本体的查询sql。
如果你非得在一个查询里实现,那性能损耗是得不偿失的。一个sql返回的就只能是一个表格,构成表格的要素就是行和列,你要放的这些值肯定不能以新增行的形式体现,因为会导致查询结果不符合预期,那么就只能新增一个列,来放上你的查询条件,但是如果最终数据只有一行,而你的下拉列表值又必须超过一行,所以无论是新增行还是新增列都不行。如果加一个字段,使用逗号分割所有下拉框中的值,此时你下拉框的逻辑更难写。


LINK:https://ask.csdn.net/questions/7675149?answer=53735874
SOURCE:CSDN_ASK
ASK_ID:7675161
ANSWER_ID:53735861
TITLE:我又来问问题了,这次是这个错误
ANSWER:

在insert 语句中,如果不在表后面指定字段顺序,那么就会按照默认字段顺序将你的values值插进去,
你这图上虽然看不到字段名称,但是根据顺序来看,这个表的第二个字段长度是4,但是你插入的values的第二个值是 '10101001',长度为8,当然会报错了


LINK:https://ask.csdn.net/questions/7675161?answer=53735861
SOURCE:CSDN_ASK
ASK_ID:7675169
ANSWER_ID:53735854
TITLE:DATAGRIP的备注问题
ANSWER:

数据库版本不一致,你看的视频应该是8.0的,但你数据库是低于8.0的


img


img


LINK:https://ask.csdn.net/questions/7675169?answer=53735854
SOURCE:CSDN_ASK
ASK_ID:7675060
ANSWER_ID:53735672
TITLE:oracle查询一直执行中
ANSWER:

查看后台是否存在该会话,会话当前的等待事件是什么


LINK:https://ask.csdn.net/questions/7675060?answer=53735672
SOURCE:CSDN_ASK
ASK_ID:7674683
ANSWER_ID:53735549
TITLE:help .openGauss
ANSWER:

这个报错只能说明你这个ip和端口上并没有在运行的数据库


LINK:https://ask.csdn.net/questions/7674683?answer=53735549
SOURCE:CSDN_ASK
ASK_ID:7674725
ANSWER_ID:53735545
TITLE:asp怎么用OpenDataSource插入数据到sql数据库中?
ANSWER:

把你这个数据库里的wycy002这个表的表结构贴出来看看,肯定是列名不匹配,比如有大小写区分




你的sql是 INSERT INTO wycy002 (jh,rq,scsj,rzsl,rpzsl)
这个括号里的jh是指wycy002这个表里的jh字段,但从你贴出来的字段名来看,实际wycy002这个表并没有jh字段,只有JH,所以会报错




你先登录到数据库里,单独执行一下insert语句后面的那个查询看看,另外,那个文件地址你自己确认一下准确性


Select jh,rq,scsj,rzsl,rpzsl From OpenDataSource(‘MICROSOFT.JET.OLEDB.4.0’,‘Excel 8.0;HDR=NO;IMEX=1;DATABASE=E:\ccy0502\data\wcyy002.xls’)…[sheet1]<br/></code></pre><br/><p>上面这个如果报字段不存在,就查下面这个,看看它识别出来的字段名到底是个啥</p><br/><pre><code class="language-sql"><span class="hljs-attribute">Select</span> * From OpenDataSource(&#39;MICROSOFT.JET.OLEDB.<span class="hljs-number">4</span>.<span class="hljs-number">0</span>&#39;,&#39;Excel <span class="hljs-number">8</span>.<span class="hljs-number">0</span>;HDR&#61;NO;IMEX&#61;<span class="hljs-number">1</span>;DATABASE&#61;E:\ccy0502\data\wcyy002.xls&#39;)...[sheet1]

LINK:https://ask.csdn.net/questions/7674725?answer=53735545
SOURCE:CSDN_ASK
ASK_ID:7674825
ANSWER_ID:53735534
TITLE:为什么安装虚拟机和iso文件后,仍然打不开虚拟机?
ANSWER:

因为你设置了这个

img


要支持硬件加速的话,需要进主板BIOS,开启VT-X虚拟化


LINK:https://ask.csdn.net/questions/7674825?answer=53735534
SOURCE:CSDN_ASK
ASK_ID:7674853
ANSWER_ID:53735528
TITLE:ORACLE:为何经过计算或判断的数值全部变为字符串类型?
ANSWER:

建议你把你的完整使用场景说明一下,你可能对这个东西有所误解


  1. 如果你所有的代码都是在数据库里,那么你的SumQty 就是数字型,它并没有变成字符型,它可以在数据库里进行各种加减乘除计算;
  2. 但是你如果是直接导出数据为文本,那么实际上就是导出的原始数据,对于oracle而言,0.5这个数值在数据库中的存储就是 .5 ,可以理解为这是为了节省存储空间(这点其实其他数据库也有类似的做法),而且前面有没有0实际上并不影响计算

img


  1. 如果你是使用其他开发语言接收查询数据,那么请使用其对应的数据类型进行接收

LINK:https://ask.csdn.net/questions/7674853?answer=53735528
SOURCE:CSDN_ASK
ASK_ID:7674862
ANSWER_ID:53735511
TITLE:请问这个SQL查出来的结果是什么
ANSWER:

这个sql一看上去就一股违和感,它的常规写法应该是这样的


 SELECT COUNT(user_no) FROM t_dwd_fusion_order 
where date=202203
AND com_key IN(‘ABC’,‘DEF’)
GROUP BY user_no,date,com_key
HAVING COUNT(user_no) > 1 ;

这个sql和你的sql查出来的结果应该是一样的,但是这个sql可能会比你的sql查询效率要高一点,因为我这个是先过滤数据再聚合,而你的是先聚合再过滤数据
假设user_no不会为空的话,那么它表示按user_no、date、com_key分组,条目数大于1;
假设user_no可能为空的话,那么它表示按user_no、date、com_key分组,user_no不为空的条目数大于1


LINK:https://ask.csdn.net/questions/7674862?answer=53735511
SOURCE:CSDN_ASK
ASK_ID:7674882
ANSWER_ID:53735473
TITLE:mysql 获取每个时间段之间的某条数据
ANSWER:

题目没有说要不要根据线路分组,下面这个sql是取每条线路每个小时的第一条


–测试数据
create table test_20220328_a(id int,linenumber int,createtime datetime);
insert into test_20220328_a values(1,1,‘2022-02-01 01:21:00’);
insert into test_20220328_a values(2,1,‘2022-02-01 01:31:00’);
insert into test_20220328_a values(3,1,‘2022-02-01 02:21:00’);
insert into test_20220328_a values(4,1,‘2022-02-01 02:51:00’);
insert into test_20220328_a values(5,1,‘2022-02-02 04:21:00’);
insert into test_20220328_a values(6,1,‘2022-02-02 05:21:00’);
insert into test_20220328_a values(7,1,‘2022-02-02 09:21:00’);
insert into test_20220328_a values(8,2,‘2022-02-01 01:21:00’);
insert into test_20220328_a values(9,2,‘2022-02-01 01:31:00’);
insert into test_20220328_a values(10,2,‘2022-02-01 02:21:00’);
insert into test_20220328_a values(11,2,‘2022-02-01 02:51:00’);
insert into test_20220328_a values(12,2,‘2022-02-02 04:21:00’);
insert into test_20220328_a values(13,2,‘2022-02-02 05:21:00’);
insert into test_20220328_a values(14,2,‘2022-02-02 09:21:00’);

–查询sql
select * from (
select a.*,
row_number() over(partition by linenumber,date_format(createtime, ‘%Y%m%d%H’) order by createtime,id) rn
from test_20220328_a a
where createtime between ‘2022-02-01 00:00:00’ and ‘2022-02-20 23:59:59’
) t where rn=1

img


如果不要按线路分组,把开窗函数里的linenumber干掉就是了


LINK:https://ask.csdn.net/questions/7674882?answer=53735473
SOURCE:CSDN_ASK
ASK_ID:7674887
ANSWER_ID:53735460
TITLE:ORACLE 中如何取到自己想要的数据
ANSWER:
select 学生,
listagg(teacher,‘,’) within group (order by 1) teachers,
max(学习评价) 学习评价,
max(品德评价) 品德评价
from (
select 学生,
teacher,
first_value(学习评价) over(partition by 学生 order by 学习评价分数 desc) 学习评价,
first_value(品德评价) over(partition by 学生 order by 品德评价分数 ) 品德评价
from t)
group by 学生

img


LINK:https://ask.csdn.net/questions/7674887?answer=53735460
SOURCE:CSDN_ASK
ASK_ID:7674527
ANSWER_ID:53734843
TITLE:【MySQL】如何在多表查询语句中加入字段,并让该字段的值根据其他字段的值显示不同的内容
ANSWER:

这个具体要看你这个新字段和原来某字段之间的转换规则,
如果是简单的枚举值或者范围映射,就用上面的case when;
如果是函数转换关系,就用对应的函数处理,比如获取原字段长度、全部转换成大写、拼接一个字符串等等,
各字段之间用逗号隔开就行了,和查已有的字段没什么区别。比如


–新字段为原字段长度
select 字段1,字段2,length(字段2) as 新字段 from

–新字段为原有两个字段拼接
select a.字段1,a.字段2,
b.字段1,b.字段2 ,
concat(a.字段1,b.字段2) as 新字段
from a join b on a.id=b.id

LINK:https://ask.csdn.net/questions/7674527?answer=53734843
SOURCE:CSDN_ASK
ASK_ID:7674424
ANSWER_ID:53734788
TITLE:关于Oracle数据库的问题
ANSWER:

参考oracle官方文档 ,



The DEFAULT expression can include any SQL function as long as the function does not return a literal argument, a column reference, or a nested function invocation
The DEFAULT expression can include the sequence pseudocolumns CURRVAL and NEXTVAL, as long as the sequence exists and you have the privileges necessary to access it
A DEFAULT expression cannot contain references to PL/SQL functions or to other columns, the pseudocolumns LEVEL, PRIOR, and ROWNUM, or date constants that are not fully specified
The expression can be of any form except a scalar subquery expression



简单来说,在create table的语法中,字段的默认值可以为很多东西,但是不能为另一个列(序列伪列除外)。
因此,建议采用触发器的形式


–测试表
create table test_20220327 (sno varchar2(10),create_by varchar2(10) );
–触发器
create or replace trigger TEST_20220327_create_by_tri
before insert on TEST_20220327
for each row
declare
begin
:new.create_by := :new.sno;
end;
/
–插入数据
insert into test_20220327(sno) values (‘abc’);
–查询结果
select * from test_20220327;

img


LINK:https://ask.csdn.net/questions/7674424?answer=53734788
SOURCE:CSDN_ASK
ASK_ID:7674279
ANSWER_ID:53734611
TITLE:sql 语句查询计算 等问题
ANSWER:
create table test_20220327_a (A1 VARCHAR(100),A2 VARCHAR(10),A3 datetime,A4 datetime);
INSERT INTO test_20220327_a VALUES (‘1’,‘’,‘2022-02-27 00:00:00’,‘2022-03-27 00:00:00’);
INSERT INTO test_20220327_a VALUES (‘1’,‘’,‘2022-01-27 00:00:00’,‘2022-02-27 00:00:00’);
INSERT INTO test_20220327_a VALUES (‘1’,‘’,‘2022-01-27 00:00:00’,‘2022-02-27 00:00:00’);
INSERT INTO test_20220327_a VALUES (‘2’,‘’,‘2022-01-27 00:00:00’,‘2022-02-27 00:00:00’);
INSERT INTO test_20220327_a VALUES (‘2’,‘’,‘2022-02-27 00:00:00’,‘2022-03-27 00:00:00’);
INSERT INTO test_20220327_a VALUES (‘2’,‘’,‘2022-01-21 00:00:00’,‘2022-05-27 00:00:00’);

–假设查2022-02

select 部门,月初在职,月末在职,入职人数,离职人数,
round(入职人数/((月初在职+月末在职)/2)100,2) 入职率,
round(离职人数/((月初在职+月末在职)/2)
100,2) 离职率
from (
select A1 部门,
cast(count(case when ‘2022-02-01’ between A3 and isnull(A4,‘9999-12-31’) then 1 end ) as NUMERIC) 月初在职,
cast(count(case when ‘2022-02-28’ between A3 and isnull(A4,‘9999-12-31’) then 1 end ) as NUMERIC) 月末在职,
cast(count(case when A3 between ‘2022-02-01’ and ‘2022-02-28’ then 1 end) as NUMERIC) 入职人数,
cast(count(case when isnull(A4,‘9999-12-31’) between ‘2022-02-01’ and ‘2022-02-28’ then 1 end) as NUMERIC) 离职人数
from test_20220327_a
GROUP BY A1) b

img


如果只使用一个变量日期,那么可以根据这个变量来计算出对应的月初和月末是哪一天,把对应的计算表达式放到上面的sql中即可


 select dateadd(day,-day(‘2022-02-03’)+1,‘2022-02-03’) firstday,
dateadd(day,
-day(‘2022-02-03’),
dateadd(month,1,‘2022-02-03’)) lastday
from t1



SQLSERVER有坑,除数为0时不会直接报错,而是输出不完整的数据,因此需要使用case when先判断一下除数是否为0


select 部门,月初在职,月末在职,入职人数,离职人数,
CASE WHEN 月初在职+月末在职 =0 THEN NULL ELSE round(入职人数/((月初在职+月末在职)/2)100,2) END 入职率,
CASE WHEN 月初在职+月末在职 =0 THEN NULL ELSE round(离职人数/((月初在职+月末在职)/2)
100,2) END 离职率
from (
select deptpath 部门,
cast(SUM(case when ‘2020-03-01’ between a0144 and isnull(lzdate,‘9999-12-31’) then 1 ELSE 0 end ) as NUMERIC) 月初在职,
cast(SUM(case when ‘2020-03-31’ between a0144 and isnull(lzdate,‘9999-12-31’) then 1 ELSE 0 end ) as NUMERIC) 月末在职,
cast(SUM(case when a0144 between ‘2020-03-01’ and ‘2020-03-31’ then 1 ELSE 0 end) as NUMERIC) 入职人数,
cast(SUM(case when isnull(lzdate,‘9999-12-31’) between ‘2020-03-01’ and ‘2020-03-31’ then 1 ELSE 0 end) as NUMERIC) 离职人数
from A01
GROUP BY deptpath) b

LINK:https://ask.csdn.net/questions/7674279?answer=53734611
SOURCE:CSDN_ASK
ASK_ID:7674229
ANSWER_ID:53734532
TITLE:sql 查询语句 查询部门路径的问题
ANSWER:

从题目上来看, 当前的部门名称为"1级.2级.3级",想查询出"1级》2级》3级"。
你这只是想把".“这个符号替换成”》"?


select 员工编号,员工姓名,部门名称,replace(部门名称,‘.’,‘》’) 部门路径 from

LINK:https://ask.csdn.net/questions/7674229?answer=53734532
SOURCE:CSDN_ASK
ASK_ID:7673199
ANSWER_ID:53734503
TITLE:使用CDN加速无法访问wordpress后台
ANSWER:

有很多种方法,比如下面三种


  • nginx里设置指定的url路径(即管理页面和api地址)重定向至源站ip
  • CDN里设置回源
  • 在nginx里开个二级域名指向源站ip,以后访问管理页面就用新的这个二级域名

LINK:https://ask.csdn.net/questions/7673199?answer=53734503
SOURCE:CSDN_ASK
ASK_ID:7673998
ANSWER_ID:53734481
TITLE:想要内录电脑音频竟然没有立体声混音
ANSWER:
  1. 选项-控制器属性

    img


  2. 修改录音设备为你的当前声音输出设备,比如扬声器、耳机之类的

    img



LINK:https://ask.csdn.net/questions/7673998?answer=53734481
SOURCE:CSDN_ASK
ASK_ID:7674134
ANSWER_ID:53734472
TITLE:朋友们,救帮助!这路由器设置该怎样调才能使网速最快最好?(操作系统-ubuntu)
ANSWER:

你图上这几个数值的话,最好是保持出厂自带的参数设置,最多改个穿墙。
如果你是连接wifi的设备网络不稳定,比如手机,建议连接5Ghz信号,因为目前2.4Ghz设备太多了,干扰太强,就算手动改WIFI信道,2.4Ghz其实也没几个信道,基本都会被占满。但5Ghz信号穿墙能力不行,这就看你取舍了。
另外,掉线是分多种场景及多种原因的,不一定就和路由器有关系,这个一般要在现场才方便检查。


LINK:https://ask.csdn.net/questions/7674134?answer=53734472
SOURCE:CSDN_ASK
ASK_ID:7674192
ANSWER_ID:53734467
TITLE:虚拟机无法使用,该怎么操作 ,为什么会报错啊
ANSWER:

先把这玩意解压看看,看看文件类型是什么,如果是iso就没问题

img


你图上选择的那个文件后缀是个"downloading",这个是下载器下载还未完成的文件,不能直接使用的


LINK:https://ask.csdn.net/questions/7674192?answer=53734467
SOURCE:CSDN_ASK
ASK_ID:7674175
ANSWER_ID:53734458
TITLE:MySQL,为啥老是报错,我不知道哪里出错了
ANSWER:

尝试将字段名使用重音符号包起来,比如


create table book
(`图书编号` varchar(10) not null primary key,
`书名` varchar(40) not null);

注意这个不是引号,是键盘左上角的,数字1旁边的那个点


LINK:https://ask.csdn.net/questions/7674175?answer=53734458
SOURCE:CSDN_ASK
ASK_ID:7674139
ANSWER_ID:53734403
TITLE:为什么SparkSQL,dbeaver,hive命令行使用相同的语句操作hive表的结果不一样
ANSWER:
  1. 把情景一改成这样试试
    spark.sql(“”“
    INSERT INTO hive_test_one.djia_table(date, open, high, low, close, volume, adj_close) VALUES(‘2022-03-27’, 0, 0, 0, 0, 0, 0)
    ”“”
    )

  2. 尝试不要使用date这种关键词作为字段名

以上主要是考虑重音符号及sql保留关键词在各sql语法解析中的兼容性问题


LINK:https://ask.csdn.net/questions/7674139?answer=53734403
SOURCE:CSDN_ASK
ASK_ID:7674111
ANSWER_ID:53734394
TITLE:SQL查询语句的问题统计
ANSWER:

问sql题请提供一下数据库类型及版本。
根据问题描述来看,是要按部门分组,每个组按入职日期倒序排序,取每个组的第二行,那么这自然就想到了要使用开窗函数row_number,但并不是所有数据库都支持开窗函数的


select * from (
select aa.*,row_number() over(partition by A1 order by A4 desc) rn from aa) as b
where rn=2

LINK:https://ask.csdn.net/questions/7674111?answer=53734394
SOURCE:CSDN_ASK
ASK_ID:7673944
ANSWER_ID:53734385
TITLE:导入别人的.sql文件十几个表只成功了四个表,其余都显示1146和1064错误,如何解决?
ANSWER:

楼上说得对,你sql文件语法有问题,建议把sql文件内容发出来看看,尤其是建表的sql。
另外,你也要说明一下你使用的mysql版本是多少


LINK:https://ask.csdn.net/questions/7673944?answer=53734385
SOURCE:CSDN_ASK
ASK_ID:7673916
ANSWER_ID:53734382
TITLE:数据库mysql worbench用eer图生成代码报错
ANSWER:

你看看你的mysql版本是多少,创建索引时的VISIBLE关键词是mysql 8.0才增加的,具体可参考官方文档


一般默认就是VISIBLE,所以如果是老版本,把这玩意去掉就行了


LINK:https://ask.csdn.net/questions/7673916?answer=53734382
SOURCE:CSDN_ASK
ASK_ID:7673794
ANSWER_ID:53734374
TITLE:SQL top3 语句查询前三个数据,出来的数据却是倒数三个数据
ANSWER:

“top 3” 指的是排序取前3,并不是最大的3个值。
你这个sql中并没有定义排序规则,排序是必须要使用order by 的


select DISTINCT top 3  选修人数
from sequene
order by 选修人数 desc

LINK:https://ask.csdn.net/questions/7673794?answer=53734374
SOURCE:CSDN_ASK
ASK_ID:7673828
ANSWER_ID:53734367
TITLE:不同过滤维度(筛选条件)下的日活跃度的数据模型是怎么样的?
ANSWER:

原始数据肯定是有明细,然后可以根据不同维度建立单一维度或者多个维度的汇总表;
另外,根据举例的这个数据量来看,建立一个 日期、设备、城市、运营商级别的合计活跃用户数和总用户数就好了,这个汇总表数据量不大,而且可以满足当前各维度筛选的需求。




这里在效率以及数据准确性上要做个取舍,用下面这个sql做汇总表,肯定比你原表效率要高,但是并非绝对准确,不过既然一天之内跨城市或多设备使用的用户很少,那么这种用户对这个数据的影响也就不会很大。


select 日期,设备,城市,运营商,count(distinct uid) 用户数 fromgroup by 日期,设备,城市,运营商

另外一种方式,以 日期、uid 两个字段作为唯一键,将城市、设备、运营商三者的所有值全部展开成列,值为1时表示是,空表示否,查询时根据不同的条件来指定不同的字段进行查询,这样表的行数也可以大大减少,但是由于城市数过多,很有可能超过列数上限。考虑到一天内一个用户很少跨城市,那么也可以把这个方案修改成日期、uid、城市三个字段作为唯一键,把设备和运营商的所有值展开成列


LINK:https://ask.csdn.net/questions/7673828?answer=53734367
SOURCE:CSDN_ASK
ASK_ID:7673584
ANSWER_ID:53733821
TITLE:为什么我的table表格不居中?
ANSWER:

text-align 这个是针对文本的,设置成center表示文本居中,从图上来看,你文本的确都在每个单元格中间


LINK:https://ask.csdn.net/questions/7673584?answer=53733821
SOURCE:CSDN_ASK
ASK_ID:7673455
ANSWER_ID:53733681
TITLE:第一次配置mysql,已经启动后输入mysql -u root -p,出现enter password 是什么意思
ANSWER:

这是让你输入密码,你截图的教程里也有这个enter password


LINK:https://ask.csdn.net/questions/7673455?answer=53733681
SOURCE:CSDN_ASK
ASK_ID:7672879
ANSWER_ID:53733038
TITLE:SQL 递回 写法(OLD 及 NEW)
ANSWER:

下面是sqlserver版本


with T as(
select 1 SN,‘1’ Id,‘212’ Old,‘302’ New
union
select 2 SN,‘1’ Id,‘302’ Old,‘212’ New
union
select 3 SN,‘1’ Id,‘212’ Old,‘304’ New
union
select 4 SN,‘1’ Id,‘215’ Old,‘302’ New),
tt as (
select T.,old root_value from T where sn=1 /第一个根节点/
union all
select t.
,tt.root_value from t,tt where t.sn=tt.sn+1 and tt.new=t.old /下一个节点/
union all
select t.,t.old from t,tt where t.sn=tt.sn+1 and tt.new<>t.old /新的根节点/
)

select id,old,new from (
select tt.
,row_number() over(partition by root_value order by sn desc) rn from tt) as x
where rn=1 /按根节点进行分组排序,取最后一个/

img


LINK:https://ask.csdn.net/questions/7672879?answer=53733038
SOURCE:CSDN_ASK
ASK_ID:7672849
ANSWER_ID:53732983
TITLE:写了个批处理脚本,但不知道问题出在哪里
ANSWER:

子程序里面加一行代码,切换执行目录到本文件所在目录


@echo off
pushd %~dp0
del /q %cd%

LINK:https://ask.csdn.net/questions/7672849?answer=53732983
SOURCE:CSDN_ASK
ASK_ID:7672843
ANSWER_ID:53732975
TITLE:sql怎么把这个两个放到同一语句里啊?
ANSWER:
update 表 set 字段1=‘admin’,字段2=‘admin’,字段3=‘admin’ where id=1

LINK:https://ask.csdn.net/questions/7672843?answer=53732975
SOURCE:CSDN_ASK
ASK_ID:7672704
ANSWER_ID:53732898
TITLE:有没有人知道怎么查看b站上某一标签下的视频总数
ANSWER:

B站视频下面的标签有两种,一种是话题,一种是搜索关键词


img


上面的前两个就是话题,点进去可以直接看到视频总数;
后两个点进去会定向到搜索页面,要根据下方的页码及一页的视频数量来计算大概有多少个视频。
如果要做自动的,可以使用下面二个api


  1. 获取分类列表
    https://api.bilibili.com/x/web-interface/web/channel/category/list
  2. 根据单个分类id获取频道列表
    https://api.bilibili.com/x/web-interface/web/channel/category/channel_arc/list?id=6&offset=
    里面的archive_count就是对应频道的视频总数

LINK:https://ask.csdn.net/questions/7672704?answer=53732898
SOURCE:CSDN_ASK
ASK_ID:7672550
ANSWER_ID:53732687
TITLE:求,ora-18008 无法找到outln方案
ANSWER:

请参考此篇文章修复此用户


LINK:https://ask.csdn.net/questions/7672550?answer=53732687
SOURCE:CSDN_ASK
ASK_ID:7672513
ANSWER_ID:53732676
TITLE:这个表,能你们有思路做吗
ANSWER:

不知道这么直白的东西还需要什么思路。。。这压根就不算题目啊


img


LINK:https://ask.csdn.net/questions/7672513?answer=53732676
SOURCE:CSDN_ASK
ASK_ID:7672354
ANSWER_ID:53732467
TITLE:数据库存在该数据但查询时不显示数据
ANSWER:

你把你select 后面的字段的单引号去掉就行了。
对于sql而言,用单引号包裹的是字符串,也就是说你上面的sql只是在 select 一个 字符串常量


select 姓名,出生日期 from student_info order by 出生日期 desc

LINK:https://ask.csdn.net/questions/7672354?answer=53732467
SOURCE:CSDN_ASK
ASK_ID:7672316
ANSWER_ID:53732459
TITLE:php8.1怎么连接oracle10g
ANSWER:

oracle高版本客户端是兼容低版本数据库的,不需要特意去用低版本客户端。而且高版本客户端还解决了不少低版本客户端中的bug


LINK:https://ask.csdn.net/questions/7672316?answer=53732459
SOURCE:CSDN_ASK
ASK_ID:7671923
ANSWER_ID:53732454
TITLE:JDBC update时通过?指定要修改的列名?
ANSWER:

你的问号是个sql绑定变量,变量是不能作为关键词、对象名、字段名等信息的。
如果要实现动态指定字段,只能采取常规字符串拼接的方式,但要注意的是,一定要做好防SQL注入


LINK:https://ask.csdn.net/questions/7671923?answer=53732454
SOURCE:CSDN_ASK
ASK_ID:7671969
ANSWER_ID:53732443
TITLE:关于#大数据#的问题,如何解决?
ANSWER:

先要了解你需要监控的设备是否提供数据采集接口,一般不同的设备接口都不一样,这里就可能需要做不少开发了,
然后数据采集后,全部都放到一个数据库里,但这个数据库需要做一些设计,来适应各种不同的设备数据结构,并且方便查询,
最后就是前端开发了,也就是你说的网页。
当然,数据采集、数据库、前端网页服务 这些,都需要有服务器,小项目的话可以集成到一台机子里。
另外,这玩意其实就是 "物联网" 的一部分了,目前其实有很多软件厂商有开发类似的软件(数据采集部分需要单独配置,如果自己不会写的话,软件厂商可以提供相关服务),你可以沿着 "物联网监控"这种关键词去找一找


LINK:https://ask.csdn.net/questions/7671969?answer=53732443
SOURCE:CSDN_ASK
ASK_ID:7672102
ANSWER_ID:53732405
TITLE:最近分析一个文件,应该是一个数据库,但不清楚是什么数据库,能看看是什么类型的吗?
ANSWER:

这应该是某款空间设计软件保存的图纸信息,因为从这个文件内容上来看,很像是室内装修设计的信息.
如果要解析的话,应该需要使用"某款空间设计软件"了


LINK:https://ask.csdn.net/questions/7672102?answer=53732405
SOURCE:CSDN_ASK
ASK_ID:7672121
ANSWER_ID:53732321
TITLE:如何避免小数点带来的误差
ANSWER:

这个东西,在进销存系统中及财务系统中是有专门的科目来进行处理的,一般叫做库存进价调整或者成本调整。
你题目中的这个大包拆小包的场景是无可避免的,就算没有大包拆小包,在税率计算或者移动加权平均成本计算中,也会存在小数点差异,所以进销存系统中也应该增加一个这样的事务单据来让 “期初加减发生等于期末”,在财务口径上也必须增加对应的科目来处理这种差异
我之前有写过关于类似的差异金额处理的文章,虽然不是你这种大包拆小包的场景,应该也可以借鉴一下



由于在计算时使用了除法,会导致计算出来的平均成本出现小数的情况,大多数情况都是除不尽的,而且业务软件系统中数值也有小数位数控制,所以只能四舍五入。几乎每次计算都会有一点偏差,导致总进货成本-总存货成本<>总出货成本,这部分需要定期进行处理,有两种方式
A.当差异累计到某个值的时候(比如足以使小数点后最后一位数发生变化),重算平均成本,即
新成本单价=(存量*成本单价+差异额)/存量
这种方式有一定的滞后性,但工作量小
B.根据差异产生成本调整的单据,即把差异合理化
————————————————
版权声明:本文为CSDN博主「DarkAthena」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wwwwwwgame/article/details/120670484



LINK:https://ask.csdn.net/questions/7672121?answer=53732321
SOURCE:CSDN_ASK
ASK_ID:7672126
ANSWER_ID:53732309
TITLE:为什么以开窗函数倒序排序了,在前端没有排序
ANSWER:

首先,你这个写法的意思是,针对每一组t.shop和t.spu来进行排序,也就是说原始数据中 ,一个t.shop和一个t.spu 有多行记录,如果只有一行记录,那这个排序就没意义了。
另外,开窗函数中的排序只是为了计算出字段显示的值,不一定会对整个结果的排序产生影响,你需要在sql最后面加上order by 来定义输出结果的顺序。


LINK:https://ask.csdn.net/questions/7672126?answer=53732309
SOURCE:CSDN_ASK
ASK_ID:7672211
ANSWER_ID:53732291
TITLE:MySQL use库的问题
ANSWER:

你第一行已经使用 DELIMITER 把结束符号定义成了 "//",导致它无法识别分号作为结束符了。
解决方式:关闭连接,重新连接,删掉第一行代码,直接执行 use sdb;


LINK:https://ask.csdn.net/questions/7672211?answer=53732291
SOURCE:CSDN_ASK
ASK_ID:7672243
ANSWER_ID:53732286
TITLE:sql表设计时使某字段值等于另外一个字段的值怎么写?
ANSWER:
  1. 可以设置字段的默认值为函数表达式,但不同数据库的设置方式不一样;另外的确也可以使用触发器
  2. 批量修改只需要使用一个update语句就行了,根据你的需要看是全部覆盖还是只更新空值

–全部覆盖
update user set telephone=mobile where 1=1;
–只更新telephone为空的
update user set telephone=mobile where telephone is null;

LINK:https://ask.csdn.net/questions/7672243?answer=53732286
SOURCE:CSDN_ASK
ASK_ID:7672256
ANSWER_ID:53732282
TITLE:关于刚学数据建立数据库的问题不知道咋办了!
ANSWER:

请把你运行的代码贴出来


LINK:https://ask.csdn.net/questions/7672256?answer=53732282
SOURCE:CSDN_ASK
ASK_ID:7672267
ANSWER_ID:53732279
TITLE:Oracle存储过程在添加的时候判断表里有没有相同的id怎么写
ANSWER:

报错的原因是因为你的 num 参数 是个 “in” 的,只能由外部传入,不能赋值,除非设置成 “in out”
另外,就算你设置成了in out ,它还是会报错,报查到了多行数据 ,因为 你的where 条件是 userid!=‘’,多行记录是不能塞到一个char类型里的字段里去的,
而且,假设你表里没有记录,它也会直接报错nodatafound。
你如果是想校验传入的v_userid 是否已存在,建议改成这样


create or replace procedure user_add(resultStr   out char,
v_username in CHAR,
v_userid in CHAR,
v_password in CHAR,
v_id_number in VARCHAR2,
v_roleid in CHAR) is
num number;
Begin
select count(1) into num from userinfo where userid = v_userid;
if num = 0 then
insert into userinfo
(username, userid, password, id_number)
values
(v_username, v_userid, v_password, v_id_number);
insert into user_role (userid, roleid) values (v_userid, v_roleid);
ResultStr := ‘success: 添加成功!’;
else
ResultStr := ‘success: 用户名已存在!’;
end if;
End;

LINK:https://ask.csdn.net/questions/7672267?answer=53732279
SOURCE:CSDN_ASK
ASK_ID:7672273
ANSWER_ID:53732258
TITLE:SQL语句怎么给smalldatetime添加check约束
ANSWER:

你是不是日期没打引号,导致它把中间的横杠当成减号了


create table test_20220325_a (a smalldatetime)
ALTER TABLE test_20220325_a ADD CONSTRAINT aaaa CHECK (a>=‘1984-12-31’ AND a<=‘1994-12-31’);

insert into test_20220325_a values (‘1990-01-31’);

img


LINK:https://ask.csdn.net/questions/7672273?answer=53732258
SOURCE:CSDN_ASK
ASK_ID:7671846
ANSWER_ID:53731529
TITLE:请教,一个每天更新的全量表,求按照DS分区时间来统计每天更新的表内一共多少条数据
ANSWER:

你的sql只有20220323的数据是因为有这个条件


ds = TO_CHAR(DATEADD(GETDATE(), - 1,‘dd’),‘yyyymmdd’)

今天是 20220324,减1天自然就是20220323了。


你想要的查询条件到底是静态的 “0320~0323” ?还是会跟着日期一起变的动态时间范围?如果是动态的,那么这个动态范围的规则是什么?


  1. 假设是静态时间范围
    SELECT  ds AS 时间
    ,count(item_id) AS 总量
    FROM A
    WHERE ds between ‘20220320’ and ‘20220323’
    GROUP BY ds

  2. 假设是动态范围,只统计前4天到前1天的数据
    SELECT  ds AS 时间
    ,count(item_id) AS 总量
    FROM A
    WHERE ds between TO_CHAR(DATEADD(GETDATE(), - 4,‘dd’),‘yyyymmdd’) and
    TO_CHAR(DATEADD(GETDATE(), - 1,‘dd’),‘yyyymmdd’)
    GROUP BY ds


LINK:https://ask.csdn.net/questions/7671846?answer=53731529
SOURCE:CSDN_ASK
ASK_ID:7671845
ANSWER_ID:53731515
TITLE:mysql到最后一步安装不上
ANSWER:

安装前,建议先关掉所有杀毒软件


LINK:https://ask.csdn.net/questions/7671845?answer=53731515
SOURCE:CSDN_ASK
ASK_ID:7671840
ANSWER_ID:53731512
TITLE:字符串格式化的时候报错ValueError: NaTType does not support strftime,如何解决?
ANSWER:

to_datetime是指将字符串按照指定的格式转换成日期时间,这个格式必须和原字符串匹配,
很明显你这里设定的格式只有年月日,和原字符串是不匹配的,所以就报错了。
一般有两种处理方式,


  1. 既然你原字符串是年月日时分秒,那么转换成日期的格式化参数也应该是年月日时分秒,在获得一个日期时间类型的值后,再对其进行反向的格式化,转换成年月日的字符串
  2. 直接用空格作为字符串截断的位置

LINK:https://ask.csdn.net/questions/7671840?answer=53731512
SOURCE:CSDN_ASK
ASK_ID:7671808
ANSWER_ID:53731498
TITLE:配置MySQL时出现问题
ANSWER:

建议把你my.ini文件的内容贴出来看看
所有的配置必须归属于某个组里,你看看是不是最前面没有组名,组名是用中括号括起来的


LINK:https://ask.csdn.net/questions/7671808?answer=53731498
SOURCE:CSDN_ASK
ASK_ID:7671782
ANSWER_ID:53731491
TITLE:Linux是32位,安装了64位的hadoopmvn clean package -Pdist,native -DskipTests -Dta
ANSWER:

把你的maven源改一下,建议换成国内源,你这从国外下载速度太慢了,而且网络不稳定,你目前这个现象应该就是网络卡住了,再等个一段时间应该就会提示网络连接失败之类的了



LINK:https://ask.csdn.net/questions/7671782?answer=53731491
SOURCE:CSDN_ASK
ASK_ID:7671780
ANSWER_ID:53731486
TITLE:数据集A已知一批坐标的经纬度,数据集B已知全国三级市县的经纬度,如何通过SQL语句筛选出属于A中属于重庆的数据
ANSWER:

问sql题请提供原表的create table 命令及模拟的insert 数据,以及最终需要的输出格式。否则没人知道该怎么对着空气写sql


LINK:https://ask.csdn.net/questions/7671780?answer=53731486
SOURCE:CSDN_ASK
ASK_ID:7671701
ANSWER_ID:53731405
TITLE:HiveServer2Error('Invalid OperationHandle: OperationHandle [opType=EXECUTE_STATEMENT
ANSWER:

加一行代码,把 arraysize 设置成 1


try:
conn = connect(host=hive_host, port=hive_port, database=hive_database, user=hive_user,
password=hive_password, auth_mechanism=‘PLAIN’, timeout=60)

print(‘=====>获取数据-1’)
cursor = conn.cursor()
cursor.arraysize = 1
print(‘=====>获取数据-2’)
cursor.execute(‘select guid from large_data.wjc_test_ques limit 2000’)
#cursor.execute(‘select longitude from large_data.zatest limit 0,2000’)
print(‘=====>获取数据-3’)
data_original = cursor.fetchall()
print(“data_original length:”, len(data_original))
except Exception as e:
print(‘======>error’)
print(repr(e))

LINK:https://ask.csdn.net/questions/7671701?answer=53731405
SOURCE:CSDN_ASK
ASK_ID:7671646
ANSWER_ID:53731398
TITLE:初始化hive报错 dbType myaql
ANSWER:

你看看你的 dbType 参数是不是写错了,没有myaql这种数据库类型的 ,最接近的应该是 mysql


LINK:https://ask.csdn.net/questions/7671646?answer=53731398
SOURCE:CSDN_ASK
ASK_ID:7671638
ANSWER_ID:53731395
TITLE:hbase的查询是不是只能查询出值不为空的字段
ANSWER:

hbase可以查询空值 ,使用 NullComparator ,具体可参考这篇文章


LINK:https://ask.csdn.net/questions/7671638?answer=53731395
SOURCE:CSDN_ASK
ASK_ID:7671628
ANSWER_ID:53731389
TITLE:请大家看一眼是哪有错误,字段名和表名是没错的。
ANSWER:

最近有好多人在问类似的问题,你们是不是遇到了同一个老师哦,版本都没做要求



LINK:https://ask.csdn.net/questions/7671628?answer=53731389
SOURCE:CSDN_ASK
ASK_ID:7671543
ANSWER_ID:53731137
TITLE:sql更新数据内容过长自动截取问题
ANSWER:

问题不够详细,既没说明是什么数据库,也没说明是个什么场景
对于数据库而言,如果设置了字段长度,想更新超过它设定长度的字符串进去是会报错的,可以看下面这个测试


create table test_20220324_b ( a VARCHAR(1));
insert into test_20220324_b values (‘1’);
update test_20220324_b set a=‘11’;

img


LINK:https://ask.csdn.net/questions/7671543?answer=53731137
SOURCE:CSDN_ASK
ASK_ID:7671473
ANSWER_ID:53731119
TITLE:hive hql 数据库近 7天 30天的 点击,展示 点击率 这个广告方面的
ANSWER:

将每天的分子和分母分别求和,最后再除,这个是没问题的。
但是并不清楚你问题卡在哪里了,如果你只想算7天的,直接加个where条件过滤一下数据不就行了?


select min(create_time ) 开始时间,max(create_time ) 结束时间,
sum(clic) 点击,sum(show) 展示,sum(clic)/sum(show) 点击率
from zbjs_ggzsdjdjl_one
where create_time between ‘2022-02-19’ and ‘2022-02-25’

能不能弄个表格示意一下你最终需要的数据格式是什么样的么?


LINK:https://ask.csdn.net/questions/7671473?answer=53731119
SOURCE:CSDN_ASK
ASK_ID:7671430
ANSWER_ID:53731089
TITLE:mysql如何为视图添加备注等等一些注释信息,他生成出来那个默认的View我想改成别的
ANSWER:

根据mysql官方文档的语法来看,不支持在创建视图的同时添加注释


CREATE
[OR REPLACE]
[ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
[DEFINER = user]
[SQL SECURITY { DEFINER | INVOKER }]
VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]

并且在视图创建好后,也无法进行修改,因为视图上根本就没有"注释"这个属性


ALTER
[ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
[DEFINER = user]
[SQL SECURITY { DEFINER | INVOKER }]
VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]

mysql诞生至今这几十年,有很多人向官方反馈过,但MYSQL都没打算支持给视图添加注释


LINK:https://ask.csdn.net/questions/7671430?answer=53731089
SOURCE:CSDN_ASK
ASK_ID:7671425
ANSWER_ID:53731061
TITLE:Oracle创建定时器报错
ANSWER:

你存储过程要求传入两个参数,但是job的what里面又没传,当然会报错了,要改成下面这样


DECLARE
unlockTest_timer number;
BEGIN
SYS.DBMS_JOB.SUBMIT(
job => unlockTest_timer,
what => ‘declare
resultStr char;
v_vlt_id CHAR;
begin
tk_days_add(resultStr,v_vlt_id);
end;’,
next_date => SYSDATE,
interval => ‘sysdate+1/(24*60)’);
Commit;
End;

这个与时间类型加减没关系,oracle的date类型本就可以加减,sysdate+1表示当前时间加1天




提示对象无效


  1. 确认你创建存储过程的用户和创建job的用户是同一个
  2. 确认你这个存储过程本身是否存在编译错误或当前为无效对象



你回复的这个一眼就能看出错误呀,你没有声明ResultStr这个变量,怎么能给它赋值呢?而且你这个赋值本身没有任何意义呀,既不打印又不输出,为什么不删掉这一行呢?


create or replace procedure tk_days_add (
v_vlt_id in CHAR
)
is
Begin
update Ticket set tk_days=tk_days+1 where vlt_id=v_vlt_id;

End;

上面这个语法就没错了,就是不知道你表名和字段名是不是对的,
而且,你这个job其实执行其实也没有任何意义,传个空值进去做where 的等于条件,永远都更新不到数据。
建议你再想一想你创建定时任务是为了做什么?是否真的需要外部参数?如果需要外部参数,那参数的值获得的逻辑是什么?


LINK:https://ask.csdn.net/questions/7671425?answer=53731061
SOURCE:CSDN_ASK
ASK_ID:7671208
ANSWER_ID:53730838
TITLE:Sql根据条件判断,分别执行不同的查询并返回结果集
ANSWER:

首先,你这问题标签写了两个数据库,到底是想在哪个数据库里实现这样的功能呢?不同数据库支持的功能不一样,语法也有很多区别。
然后,你说的这个功能,必须要满足两个数据集的字段个数和字段类型完全匹配,才能在select语句中使用。因为数据库里的select语句,必须在一开始就确定好了输出结果有哪些字段及字段类型,不能在进行任何判断及查询后发生变更。
建议你说下原始场景是什么,举个例子看看,可能根本不需要做什么判断就可以实现




查同一个表的话,用or来处理条件就好了


select * from table where  (判断条件满足 and   条件1 ) or (判断条件不满足 and 条件2 )

LINK:https://ask.csdn.net/questions/7671208?answer=53730838
SOURCE:CSDN_ASK
ASK_ID:7671291
ANSWER_ID:53730820
TITLE:树形结构数据有其中一个节点怎么找他的整个分支
ANSWER:

请先说明一下你的数据库类型以及版本,不同数据库甚至同一数据库的不同版本的递归sql都可能有区别


LINK:https://ask.csdn.net/questions/7671291?answer=53730820
SOURCE:CSDN_ASK
ASK_ID:7671292
ANSWER_ID:53730817
TITLE:sql server 2008R2怎么取一段时间每个月的最后一天
ANSWER:

其实上个题就已经给你答案了,
SQL SERVER 2005之后新增了CTE功能,可以利用CTE实现递归查询


with t as (
select cast (‘2021-01-01’ as date) a
union all
select dateadd(month,1,a) from t where dateadd(month,1,a)<=‘2021-12-31’
)
select dateadd(month, datediff(month, -1, a), -1) from t

img


LINK:https://ask.csdn.net/questions/7671292?answer=53730817
SOURCE:CSDN_ASK
ASK_ID:7670964
ANSWER_ID:53730264
TITLE:SQL中 cast的使用方法
ANSWER:

其实你把它当英语的自然语言直接翻译就懂了
cast(Id as string)
将 id 视为 字符串类型


LINK:https://ask.csdn.net/questions/7670964?answer=53730264
SOURCE:CSDN_ASK
ASK_ID:7670963
ANSWER_ID:53730263
TITLE:请同仁解释下关于数据库选择的这句话
ANSWER:

它这里其实是针对两个指标的极端场景,即读写速度和稳定性,哪个优先级更高


  1. 保存数据慢但不易丢失
  2. 保存数据快但容易丢失

如果有上面这两种数据库让他选择的话,他会选第一个


LINK:https://ask.csdn.net/questions/7670963?answer=53730263
SOURCE:CSDN_ASK
ASK_ID:7670779
ANSWER_ID:53730070
TITLE:SQL查询同时选修了操作系统和数据库两门课的学生
ANSWER:

img


你这个写法不是画蛇添足么? cname本来就是课程名称,你这段sql就等同于 cname=‘操作系统’ ,同理,下面那段 等同于 cname=‘数据库’ ,第三个sql就变成了


 cname=‘操作系统’ and cname=‘数据库’

等价于


‘操作系统’=‘数据库

这个条件怎么可能查出数据嘛


要找出同时参与了指定两个课程的人,初学者的思路一般是先分别取得两个课程对应的姓名清单,然后再同时去in这两个姓名清单,但你这又变成了in课程,当然不对。
另外,更加合理的做法应该是,在where 条件 里in这两门课程,然后按姓名group by ,取having count(课程)=2的,这样就不需要重复查询这些表了


LINK:https://ask.csdn.net/questions/7670779?answer=53730070
SOURCE:CSDN_ASK
ASK_ID:7670725
ANSWER_ID:53729956
TITLE:SQL学习如何从网站下载
ANSWER:

使用客户端工具连接数据库后,把这些代码全部复制到客户端里执行就是


LINK:https://ask.csdn.net/questions/7670725?answer=53729956
SOURCE:CSDN_ASK
ASK_ID:7670577
ANSWER_ID:53729836
TITLE:analys安装报错
ANSWER:

很明显文件名乱码了,导致程序没有找到这个文件。
建议看一下你环境里有没有什么中文的东西,比如操作系统用户名、安装过程中输入了中文名称之类的。


LINK:https://ask.csdn.net/questions/7670577?answer=53729836
SOURCE:CSDN_ASK
ASK_ID:7670572
ANSWER_ID:53729834
TITLE:这个怎么办啊!有人会吗
ANSWER:

你有没有想过,"外键"为什么叫"外"键呢?它为什么不直接叫"键",而且也不叫"内键"?
外键的话,至少得有两个表,第二个表中的某个字段的值依赖于第一个表中的某个字段的值,也就是说,必须第一个表里有指定的值了,这个值才能出现在第二个表里。
你这截图里就创建了一个表 "book",然后创建个外键还是依赖于 "book"这张表,这叫什么外键呢?
建议再多看几个创建外键的例子学习一下


LINK:https://ask.csdn.net/questions/7670572?answer=53729834
SOURCE:CSDN_ASK
ASK_ID:7670551
ANSWER_ID:53729826
TITLE:oracle没有正常启动,这两个毛病找了半天没解决,求帮助!
ANSWER:

参数设置有问题,"内存目标"比"内存最大目标"还大,建议先看一下这两个参数的值,然后使用alter命令进行适当调整


LINK:https://ask.csdn.net/questions/7670551?answer=53729826
SOURCE:CSDN_ASK
ASK_ID:7670532
ANSWER_ID:53729822
TITLE:SqlServer跨库查询Oracle表数据中文乱码
ANSWER:

把环境变量NLS_LANG修改成 SIMPLIFIED CHINESE_CHINA.ZHS16GBK 或者 SIMPLIFIED CHINESE_CHINA.AL32UTF8试试,
"SIMPLIFIED CHINESE"这个东西与字符集没很大关系,后面的"US7ASCII"这个才是字符集,
并且,通过sql是无法查到oracle数据库服务端的字符集的,这个只能看配置文件,但客户端查询是否乱码与Oracle数据库端的字符集本身关系真不大。
还有,”PLSQL Developer“如果开启了unicode,会自动给你转换成可以识别的字符集数据,因此不能用来判断是否存在乱码问题
更多关于oracle字符集的分析,可以看我这篇文章



你这样查的字符集NLS_CHARACTERSET,其实就是你在环境变量NLS_LANG里设置的字符集。你可以尝试把环境变量改了后,再重新连接ORACLE执行这个查询,会发现NLS_CHARACTERSET变成了你修改后的字符集。Oracle数据库里并没有提供任何用sql查询的方式来查询数据库的字符集,网上有些文章说的用sql查oracle数据库端字符集的都是错的。
至于plsql developer里,勾上unicode就能正常显示中文了


img


我觉得你可能得先判断一下原始数据本身是不是已经出现字符集错误的情况了,plsqldev能正常显示,并不代表此时数据的字符集就是正确的,在我上面那篇文章中也有举例


LINK:https://ask.csdn.net/questions/7670532?answer=53729822
SOURCE:CSDN_ASK
ASK_ID:7670512
ANSWER_ID:53729801
TITLE:sql 语句怎么取一段时间每个月最后一天
ANSWER:

这个要看一下sqlserver的版本,EOMONTH只能在 SQL Server 2012 (11.x)及以上版本执行,否则就要使用多个函数组合来实现取月底最后一天的效果了。
另外,你这个好像是想"无中生有",即不是根据目前表里已经存在的数据,而是想直接生成只有一个列的虚拟表,此时一般需要使用到递归


with t as (
select cast (‘2019-03-01’ as date) a
union all
select dateadd(month,1,a) from t where dateadd(month,1,a)<=‘2020-12-31’
)
select eomonth(a) from t

img


LINK:https://ask.csdn.net/questions/7670512?answer=53729801
SOURCE:CSDN_ASK
ASK_ID:7670405
ANSWER_ID:53729656
TITLE:怎样手动删除LocalDB里的数据
ANSWER:

执行sql命令


delete from 表名  where 1=1;

这样就能删除这个表里面的全部数据了


LINK:https://ask.csdn.net/questions/7670405?answer=53729656
SOURCE:CSDN_ASK
ASK_ID:7670460
ANSWER_ID:53729650
TITLE:关于使用开窗函数报错的问题(求解决方案,提问帖)
ANSWER:

img


MYSQL 8.0 版本,执行没有报错,不确定你说的”系统报错“是指数据库返回错误还是答题系统判断你的答案不对?
如果是数据库返回错误的话,很可能是因为你使用的数据库版本太老了,在8版本之前是不能使用开窗函数的;
如果是答题系统判断你的答案不对,建议再仔细阅读下题目的要求


LINK:https://ask.csdn.net/questions/7670460?answer=53729650
SOURCE:CSDN_ASK
ASK_ID:7670450
ANSWER_ID:53729638
TITLE:MySQL 查询某月一整月的数据
ANSWER:

你前台传给后台的值是什么?“202204"还是 “2022-04” 还是"2022-04-01”…?
如果你前台已经固定了传值,那么根据不同的格式,你可以在数据库里,通过格式化函数以及日期加减函数,把这个字符串转换成 2022-04-01 和 2022-04-30 两个日期,然后拼到sql里去用between and 作为条件;
如果你前台可以改,那么请参考 楼上 @於黾 的答案。
其他几位的回答其实也能用,但是查询效率会低,因为使用了函数来对字段进行处理,走不到索引了,需要对表里的每行数据进行格式化才能进行数据过滤,因此建议在某个阶段获取到两个日期,使用between and进行处理


LINK:https://ask.csdn.net/questions/7670450?answer=53729638
SOURCE:CSDN_ASK
ASK_ID:7670449
ANSWER_ID:53729626
TITLE:关于sql 的连表查询
ANSWER:

表关联并不需要表字段名称一样,重点是看表之间的逻辑关系,以及各字段的定义。
建议仔细看题目中的文字部分、表结构定义(注意是否有外键)、还有数据示例(可根据参考数据来识别应该用哪两个字段来进行连接)


LINK:https://ask.csdn.net/questions/7670449?answer=53729626
SOURCE:CSDN_ASK
ASK_ID:7670448
ANSWER_ID:53729615
TITLE:请问一下Pgsql连接时出现这个问题怎么解决?
ANSWER:

这个报错在问你,数据库服务目前是否正在运行?是不是在运行在你localhost的5432端口上?
换句话来说,他其实就是告诉你,你要连接的 localhost:5432上面是没有检测到在运行的数据库的


LINK:https://ask.csdn.net/questions/7670448?answer=53729615
SOURCE:CSDN_ASK
ASK_ID:7670121
ANSWER_ID:53729607
TITLE:SqlServer通过Openquery调用Oracle中的存储过程得到一个select结果集
ANSWER:

如果你把它改造成一个函数,return这个V_RESULT 是不是就能用select解决了?
另外,sqlserver的openquery调用存储过程用call命令,可以参考一下这篇文章


但是,你这么做应该达不到想要的目的,因为"REF CURSOR"这种类型并不是实实在在的数据,这种类型本身其实只相当于一个对象id,其数据还是在原数据库里,只能被原数据库使用。如果你想要得到数据,可以尝试使用表函数返回一个table类型,这样就能当成普通的select语句使用了,直接查询出来也是一个表格


LINK:https://ask.csdn.net/questions/7670121?answer=53729607
SOURCE:CSDN_ASK
ASK_ID:7670174
ANSWER_ID:53729552
TITLE:mysql数据库创建表报错,不理解
ANSWER:

img


建表要有表名,上图是在5.5版本的mysql中进行的测试,加上表名后就没有报错了


LINK:https://ask.csdn.net/questions/7670174?answer=53729552
SOURCE:CSDN_ASK
ASK_ID:7670375
ANSWER_ID:53729542
TITLE:hql语句的优化,广告方面的计算 hive hql 数据库
ANSWER:
  1. 首先,你这个代码本身应该存在问题,t1/t2/t3输出的数据不止一行,因为有"group by ADS_CODe",但你并没有写任何关联条件,这样会导致产生笛卡尔积,数据结果记录翻倍。
  2. 然后,要优化这个sql,很明显你这都是查的同一个表,而且聚合的维度一样,那么完全可以只用查一次,把不同的查询条件放到count里用case when 处理
    select ADS_CODe,
    count( case when operate_type=‘show’ then 1 end ) c1,
    count( case when operate_type=‘clic’ then 1 end ) c2,
    count( case when operate_type=‘clic’ then 1 end )/count( case when operate_type=‘show’ then 1 end ) c3
    from ods_gg_ql where create_time =‘2022-02-19’ group by ADS_CODe


LINK:https://ask.csdn.net/questions/7670375?answer=53729542
SOURCE:CSDN_ASK
ASK_ID:7670376
ANSWER_ID:53729520
TITLE:关于MySQL中RANK()函数报错
ANSWER:

在mysql 8.0版本,直接用你的脚本测试,没有报错


img


因此你mysql的版本可能是8以前的老版本,老版本不支持开窗函数的


LINK:https://ask.csdn.net/questions/7670376?answer=53729520
SOURCE:CSDN_ASK
ASK_ID:7670233
ANSWER_ID:53729511
TITLE:sqlserver 把这一句sql 从默认的周日到周6为一周的改成周三到下周2为一周的有人会改吗?求解决
ANSWER:

这题你都问了4个版本了。。。
建议你先给个create table 、insert的模拟数据,以及想要的结果表格例子,否则容易陷入死胡同,这题真没那么麻烦,只要计算好偏差量就行了.
下面这两题要看懂了我的回答,你就能灵活运用了



这个问题不管小时,那么直接加3天就好了



with t as (
select2022-03-24 08:55:00’ checkTime union all
select2022-03-24 07:55:00’ union all
select2022-03-23 08:55:00’ union all
select2022-03-23 07:55:00’ union all
select2022-03-22 08:55:00’ union all
select2022-03-22 07:55:00’ union all
select2022-03-21 08:55:00’ union all
select2022-03-21 07:55:00’ union all
select2022-03-17 08:55:00’ union all
select2022-03-17 07:55:00’ union all
select2022-03-16 08:55:00’ union all
select2022-03-16 07:55:00’ union all
select2022-03-15 08:55:00’ union all
select2022-03-15 07:55:00’ )

select checkTime,datename(weekday,checkTime), datepart(week,DATEADD(day,3,checkTime)) -2 from t

img


LINK:https://ask.csdn.net/questions/7670233?answer=53729511
SOURCE:CSDN_ASK
ASK_ID:7670120
ANSWER_ID:53729439
TITLE:sql server中时间归不到这个时间段里,求解决
ANSWER:

你这段代码写错了,dateadd函数输出的是日期,你在后面加个整数7是什么意思?




只要计算好偏差量,这玩意不是想怎么划区间都可以么?



with t as (
select ‘2022-01-11 23:39:43’ checkTime union all
select ‘2022-01-11 23:41:37’ union all
select ‘2022-01-11 23:50:23’ union all
select ‘2022-01-11 23:52:26’ union all
select ‘2022-01-05 08:04:00’ union all
select ‘2022-01-05 08:16:54’ union all
select ‘2022-01-05 08:17:11’ union all
select ‘2022-01-12 08:17:11’ union all
select ‘2022-01-13 08:17:11’
)

select checkTime,
DATEADD(HOUR,-64, DATEADD(week,datepart(week,DATEADD(HOUR,88,checkTime))-2,dateadd(year, datediff(year, 0, checkTime), 0)) ) 开始,
DATEADD(HOUR,104, DATEADD(week,datepart(week,DATEADD(HOUR,88,checkTime))-2,dateadd(year, datediff(year, 0, checkTime), 0)) ) 结束,
datepart(week,DATEADD(HOUR,88,checkTime)) 分组 from t;

img


LINK:https://ask.csdn.net/questions/7670120?answer=53729439
SOURCE:CSDN_ASK
ASK_ID:7665505
ANSWER_ID:53728767
TITLE:如何把网站和某些关键字进行绑定?
ANSWER:

上面有不少回答都已经说得很完整了,不知道为什么会有那么多人点无用。
除了百度站长平台里做sitemap自动搜录、做好自己站点的seo以及内容以外,我再补充点我亲身经历的。
我也开了个网站,在上线后的前两周,在百度上搜索关键词,是排行前4以内的,但是两周后,在百度就搜不到了,但是,在其他搜索引擎,比如bing和google,按关键词搜索我的网站都是排行第一的。不信可以点这个链接看


img


bing无论是国际版还是国内版,我的网站都是关键词排行第一


于是我去百度站长客服中心提交了投诉,在等了一个月后,客服说之前技术那边出了问题,已经处理好了,然后我百度一搜,果然在百度排第一了。但是,一周后,在百度上又搜不到了!连翻十几页都没看到!就算是热度下降了,也不至于在短短一周内从第一名跌到看不到名次!
这也就是说,不论你网站做得再好,只要你的网站搜索排行靠前了,它就很可能会把你网站踢出搜索列表(至于要怎么做才不会被踢,上面有人说了)。
所以我也没继续找百度麻烦了,反正搜到的其他页面也能引流回来,就自己继续写文章。
目前建站大概有大半年了,百度最近又偷偷的把我的网站加回搜索列表了,只是排名比较靠后。从这一点上来说,可能百度关键词搜索排行也与建站的时长有关,不像国外的BING和谷歌,就算我不提交sitemap,他们也一样自动收录我的网站。百度排名的这个算法权重占比里,可能money的权重比较高,如果你不想pay,就只能把自己网站的内容做好,然后到处宣传,等热度足够超过money的权重影响时,搜索排行自然就上去了


LINK:https://ask.csdn.net/questions/7665505?answer=53728767
SOURCE:CSDN_ASK
ASK_ID:7669910
ANSWER_ID:53728711
TITLE:MySQL-flume -hdfs SLF4J: Defaulting to no-operation (NOP) logger implementation
ANSWER:

打开你这个报错中提到的链接,里面有说解决方案



This warning message is reported when the org.slf4j.impl.StaticLoggerBinder class could not be loaded into memory. This happens when no appropriate SLF4J binding could be found on the class path. Placing one (and only one) of slf4j-nop.jar slf4j-simple.jar, slf4j-log4j12.jar, slf4j-jdk14.jar or logback-classic.jar on the class path should solve the problem.



意思就是slf4j-nop.jar slf4j-simple.jar, slf4j-log4j12.jar, slf4j-jdk14.jar or logback-classic.jar 这几个文件,只要放其中任意一个(只能有一个)到类的路径里就行了


LINK:https://ask.csdn.net/questions/7669910?answer=53728711
SOURCE:CSDN_ASK
ASK_ID:7669842
ANSWER_ID:53728643
TITLE:hivesql 查询语句 字段+字段和 +分组条件
ANSWER:

这题问得太有歧义了,楼上两位专家都出现截然不同的理解。


  1. 假设,你是想把A/B/C三个字段,横着相加,并且按D分组后,竖着也相加
    select d,sum(a+b+c) fromgroup by d

  2. 假设,你是想按D分组,分别对A/B/C三个字段求和
    select d,sum(a),sum(b),sum©  fromgroup by d

    建议,在你没把握清楚的用文字描述问题时,请举例来说明你想达到的效果

LINK:https://ask.csdn.net/questions/7669842?answer=53728643
SOURCE:CSDN_ASK
ASK_ID:7669837
ANSWER_ID:53728634
TITLE:#怎么判断手机号和身份证是 一个人(关键词-验证手机号)
ANSWER:

你当前有什么数据?麻烦说明一下问题背景
匹配数据是要求在当前已有的数据的基础上进行匹配,
如果你有一个表,记录了 "手机号,姓名,身份证"这三个字段,直接用这三个字段去匹配就是了;
如果你当前没有任何数据,那么你是无法完成任何匹配的,姓名和身份证号的匹配关系在公安系统里你拿不到,手机号和姓名的匹配关系是在各个运营商你也拿不到,况且手机号并非全部实名制。
而且,就算身份证号和手机号对应的姓名一样,也不一定就是同一个人,因为存在同名同姓的人


LINK:https://ask.csdn.net/questions/7669837?answer=53728634
SOURCE:CSDN_ASK
ASK_ID:7669600
ANSWER_ID:53728605
TITLE:数据库设计一定要用id做为主键吗?看到阿里规范上是这么说的
ANSWER:

这种流水记录,不要使用时间作为主键,
打个比方,假设由于什么不可预知的原因,同一个设备1秒内连发两条,然后后面那条数据才是正确的,由于你设置了主键,数据就写不进去,然后假设这玩意做了失败异步重试,就会一直重试到设定的重试次数上限,最终数据还是丢了,而且还浪费了资源。
因此,宁愿数据多写进来几条,之后再去做数据清洗,也一定要保证数据的完整性,或者在程序逻辑里做好控制。
留着id,到时候在数据运维阶段就可以知道数据产生的先后顺序了,光靠时间其实无法判断先后顺序的,因为时间精度有限。最简单的例子,写个开窗函数发现有几行的时间都一样,无法排序,id就有用了


LINK:https://ask.csdn.net/questions/7669600?answer=53728605
SOURCE:CSDN_ASK
ASK_ID:7669612
ANSWER_ID:53728588
TITLE:关于使用WITH语句创建临时表进行查询问题
ANSWER:

这玩意判断下空值就好了,你这个sql “@折扣为NULL” 的时候,并不是折扣为0 ,出现的其实是全部的数据,因为满足你的查询条件 “@折扣 is null”
常见的用nvl、ifnull、isnull、coalesce之类的函数处理下就行了,但不知道你用的什么数据库,所以下面这个case when 的方法更通用


where Discount.折扣 =case when @折扣 is null then Discount.折扣 else @折扣 end 

LINK:https://ask.csdn.net/questions/7669612?answer=53728588
SOURCE:CSDN_ASK
ASK_ID:7669666
ANSWER_ID:53728582
TITLE:sql group by分组去重问题
ANSWER:
  1. group by 的目的是分组聚合,它本身并没有所谓的排序功能,不要相信网上说的什么取第1条,在实际开发场景中,应该理解为取随机的一条,将它视为无效数据。
  2. 你题目中的这种sql语法,只在老版本的mysql中才会支持,在mysql8.0之后就默认不支持了,甚至其他数据库绝大多数从一开始就是都不支持的,因为这种写法并不严格,同一个sql多次查询同一个数据甚至可能会出现查询结果不一样的情况。
  3. 在聚合函数查询中,对于非聚合字段,必须放到group by 后面去;反过来,如果出现了group by ,那么select 的字段必须是group by的字段或聚合函数,不能出现其他字段,更不能是select *
  4. 如果你的目的是保留一行,用order by 加 limit就好了;当然也可以使用开窗函数取row_number ,然后在外面再对序号进行过滤

LINK:https://ask.csdn.net/questions/7669666?answer=53728582
SOURCE:CSDN_ASK
ASK_ID:7669759
ANSWER_ID:53728560
TITLE:SQL server的datetime指定列宽
ANSWER:

这个报错都已经用中文告诉你了,就是不能指定,
datetime的长度和格式已经是固定的,不能再进行人工指定。
如果你非要存储 20220322 这样的字符串,那就只能设置成字符串类型,但这样后续的开发就会很麻烦了


LINK:https://ask.csdn.net/questions/7669759?answer=53728560
SOURCE:CSDN_ASK
ASK_ID:7669753
ANSWER_ID:53728553
TITLE:【pgsql】select * into tab_b from tab_a 和Navicat里面的复制表有什么不同,内部具体执行是怎么样的?
ANSWER:

pg是postgresql这个数据库的简称,
Navicat是一个系列软件的系列名称,包含了十几款软件,其中有8款软件是数据库图形化管理工具,包括了 for mysql /for oracle/for postgresql/for sqlserver 等等,下面这个链接是Navicat的软件清单


只要你连接的是同一个数据库的同一个版本,不管你用什么软件去连接管理它,语法都是一样的。
你现在用的pg数据库,一样的可以用navicat去连接它,只是要用navicat for postgresql 或者navicat Premium而已




使用navicat一样可以连接pg数据库,使用菜单里的复制表功能,当然也可以用sql命令来执行

img


这个复制表功能不过就是个create table new_table as select * from old_table 命令罢了,如果是仅复制结构,只需要加一个条件 where 1=2
一般情况下,都是使用create table as 来复制表,你题目中的 select * into 极少使用,甚至在pg的官方文档里也是推荐使用create table as
http://postgres.cn/docs/13/sql-selectinto.html



CREATE TABLE AS在功能上与 SELECT INTO相似。CREATE TABLE AS 是被推荐的语法,因为这种形式的SELECT INTO在ECPG 或PL/pgSQL中不可用,因为它们对 INTO子句的解释不同。此外, CREATE TABLE AS提供的功能是 SELECT INTO的超集。
与CREATE TABLE AS相比,SELECT INTO 不允许指定属性,就像带有USING method的表访问方法或者带有TABLESPACE tablespace_name的表的表空间。 如果必要,使用CREATE TABLE AS。



LINK:https://ask.csdn.net/questions/7669753?answer=53728553
SOURCE:CSDN_ASK
ASK_ID:7669515
ANSWER_ID:53728299
TITLE:问下各位sql server咋么在一张数据表中统计3个月数据
ANSWER:

用开窗函数的滑动窗口,前2两行到当前行



with t as (
select ‘2022-01’ dt,1 amt union all
select ‘2022-02’ dt,2 amt union all
select ‘2022-03’ dt,3 amt union all
select ‘2022-04’ dt,4 amt union all
select ‘2022-05’ dt,5 amt union all
select ‘2022-06’ dt,6 amt union all
select ‘2022-07’ dt,7 amt )
select t.*,sum(amt) over(order by dt rows between 2 preceding and current row) 前3from t

img


需要注意的是,统计前两行数据所需要的数据由于已经被where过滤掉了,没统计到,
因此要保证每一行都是前三个月的话,需要先把查询条件放宽,查出数据后再过滤一次


LINK:https://ask.csdn.net/questions/7669515?answer=53728299
SOURCE:CSDN_ASK
ASK_ID:7669154
ANSWER_ID:53728275
TITLE:sql多对多数据横向合并
ANSWER:

用开窗函数,给主修和选修分组排个序号,然后再根据序号和学号来关联,比如



with t as (
select 1001 学号,‘zs’ 姓名),
t1 as (
select 1001 学号,‘a’ 主修科目 union all
select 1001 学号,‘b’ 主修科目 union all
select 1001 学号,‘c’ 主修科目
),
t2 as (
select 1001 学号,‘x1’ 选修科目 union all
select 1001 学号,‘x2’ 选修科目
)
select t.学号,tx.主修科目,tx.选修科目 from t left join
(
select isnull(t11.学号,t22.学号) 学号,主修科目,选修科目 from
(select t1.,row_number() over(partition by 学号 order by 主修科目) rn from t1) as t11
full join
(select t2.
,row_number() over(partition by 学号 order by 选修科目) rn from t2) as t22
on t11.学号=t22.学号 and t11.rn=t22.rn
) as tx
on t.学号=tx.学号

img


用full join 的原因是,怕有人选修的科目比主修的还多


LINK:https://ask.csdn.net/questions/7669154?answer=53728275
SOURCE:CSDN_ASK
ASK_ID:7669494
ANSWER_ID:53728240
TITLE:请教mysql一个字段同时满足多个条件
ANSWER:

用count来计数,判断是否等于3,类似下面这样


select 用户 fromgroup by 用户 having count(1)=3



不是不可行,因为你并没有给全前提条件,建议你先把表结构和模拟数据放出来,上面这个sql里,count里还可以写条件的,只对满足要求的数据进行计数,甚至还可以去重,比如


select 用户 fromgroup by 用户 having count( distinct case when 第几轮字段 in (x,y,z) then 1 end )=3

LINK:https://ask.csdn.net/questions/7669494?answer=53728240
SOURCE:CSDN_ASK
ASK_ID:7669302
ANSWER_ID:53728231
TITLE:sqlserver 周报 问题求解决,
ANSWER:


这次不分月了?


with t as (
select2022-03-24 08:55:00’ d union all
select2022-03-24 07:55:00’ union all
select2022-03-23 08:55:00’ union all
select2022-03-23 07:55:00’ union all
select2022-03-22 08:55:00’ union all
select2022-03-22 07:55:00’ union all
select2022-03-21 08:55:00’ union all
select2022-03-21 07:55:00’ union all
select2022-03-17 08:55:00’ union all
select2022-03-17 07:55:00’ union all
select2022-03-16 08:55:00’ union all
select2022-03-16 07:55:00’ union all
select2022-03-15 08:55:00’ union all
select2022-03-15 07:55:00’ )

select d,datename(weekday,d), cast( datepart(week,DATEADD(HOUR,88,d)) as VARCHAR) from t

img


LINK:https://ask.csdn.net/questions/7669302?answer=53728231
SOURCE:CSDN_ASK
ASK_ID:7669471
ANSWER_ID:53728170
TITLE:无法连接上MySql
ANSWER:

已经连上了,这个报错提示的是sql语法错误



java.sql.SQLSyntaxErrorException: Unknown column 'id' in 'where clause'



你的表里面没有id这个字段,因此不能在where条件中使用


LINK:https://ask.csdn.net/questions/7669471?answer=53728170
SOURCE:CSDN_ASK
ASK_ID:7669447
ANSWER_ID:53728131
TITLE:pgsql查询出分组后的起始单号和截止单号
ANSWER:

给个create table 和几行insert模拟数据出来,并用表格说明一下想要的数据结果格式


最容易想到的就是用开窗函数了,但你这没给结构,不确定是否还有未知因素


LINK:https://ask.csdn.net/questions/7669447?answer=53728131
SOURCE:CSDN_ASK
ASK_ID:7669441
ANSWER_ID:53728123
TITLE:Mysql的安装问题
ANSWER:

这是提醒你有依赖没有安装,就是你这个框框挡住的后面那两个玩意,应该是vs和python,建议先把那两个东西装了,反正可以用得上


LINK:https://ask.csdn.net/questions/7669441?answer=53728123
SOURCE:CSDN_ASK
ASK_ID:7668959
ANSWER_ID:53728112
TITLE:group by加了一个字段“激活年月”,为什么加字段前的count(1)和加字段后的不一致
ANSWER:

理论上,你两个sql中的count(1)字段,所有行求和后,结果是一样的,
也就是说,对于一组 "品类,系列,激活年份" 按照 "激活年月",又拆成了多组数据,所以前一个count(1)里的数据又分到了多个count(1)里去了


LINK:https://ask.csdn.net/questions/7668959?answer=53728112
SOURCE:CSDN_ASK
ASK_ID:7669114
ANSWER_ID:53728089
TITLE:用一条sql查询平均工资,最高工资,最低工资,10号部门最高工资,20号部门最高工资
ANSWER:

问sql题请提供create table 语句以及模拟数据,还有最终想要输出的数据格式及例子,
否则别人不知道你表结构和数据情况,无法给出匹配你环境的回答。
这里我假设你是用的oracle自带的 hr.employees 表


select avg(salary) 平均工资,
max(salary) 最高工资,
min(salary) 最低工资,
max(decode(DEPARTMENT_ID, 10, salary, 0)) “10号部门最高工资”,
max(decode(DEPARTMENT_ID, 20, salary, 0)) “20号部门最高工资”
from hr.employees

img


LINK:https://ask.csdn.net/questions/7669114?answer=53728089
SOURCE:CSDN_ASK
ASK_ID:7669358
ANSWER_ID:53728067
TITLE:sql语句查询一个字段后面有几个值,可以实现吗?
ANSWER:

建议使用case when 或者ifnull/isnull之类的方式判断后再相加,
如果用count这个聚合函数,查询效率可能会变低,因为这里本来就是一行,不需要聚合。
另外,如果你数据里的值要么为空要么是8位时,其实可以全部都拼接起来,获取字符串长度,然后除以8就行了


 length(CONCAT(IFNULL(RbAd1,‘’),IFNULL(RbAd2,‘’),IFNULL(RbAd3,‘’)))/8

LINK:https://ask.csdn.net/questions/7669358?answer=53728067
SOURCE:CSDN_ASK
ASK_ID:7669343
ANSWER_ID:53728046
TITLE:sql窗口运行,打开某个表时,中文字段显示不出汉字
ANSWER:

打开cmd ,输入


chcp 95001

回车,然后再连接mysql进行查询


LINK:https://ask.csdn.net/questions/7669343?answer=53728046
SOURCE:CSDN_ASK
ASK_ID:7669263
ANSWER_ID:53728037
TITLE:建立非聚集索引后sql还是照常写吗?
ANSWER:

楼上回答有问题,
数据库一般都有优化器,会根据各项指标参数,自动选择它认为最优的执行计划。
因此,并不是建了索引就一定会走索引的。
如果在执行计划里观察到没有走索引,但你认为按索引会更快时,对于mysql 要加上 use index() 或者 force index(),
甚至如果它走了索引,你认为不走索引会更快时,要加 ignore index()


LINK:https://ask.csdn.net/questions/7669263?answer=53728037
SOURCE:CSDN_ASK
ASK_ID:7669199
ANSWER_ID:53728015
TITLE:sqlldr执行脚本报错 错误信息如下 各位看看
ANSWER:

你命令是咋执行的?你贴的这个不是可以直接执行的sql语句,这只是一个控制文件




sqlldr常见用法如下,你写的那个load data应该要放在control参数指定的文件内,而不是直接去执行它


sqlldr testuser/testuser@testdb silent=feedback,header control=load.ctl log=log.log data=aaa.txt bad=bad.bad

下面这个问答里有一个完整的用例


LINK:https://ask.csdn.net/questions/7669199?answer=53728015
SOURCE:CSDN_ASK
ASK_ID:7668816
ANSWER_ID:53727033
TITLE:请教!使用spyder连接MySQL数据库,提取一个字段显示不完整是什么情况T_T
ANSWER:

因为你这个工具的控制台只会显示最近的300条记录,超过300条就把前面的顶掉了。
如果想校验代码准确性的话,可以把print改成输出到文件,这样记录就不会被"吞"了


LINK:https://ask.csdn.net/questions/7668816?answer=53727033
SOURCE:CSDN_ASK
ASK_ID:7668686
ANSWER_ID:53726926
TITLE:win10系统,想连接的wifi在“管理已知网络”里怎么办?
ANSWER:

你看下你这个wifi信号是5Ghz的还是2.4Ghz的?然后你电脑是不是只能搜索到2.4Ghz的信号?


LINK:https://ask.csdn.net/questions/7668686?answer=53726926
SOURCE:CSDN_ASK
ASK_ID:7668505
ANSWER_ID:53726656
TITLE:统计用户产生换绑行为的数据
ANSWER:

首先这个肯定是用lag开窗函数分组取上一行,
但是,题目中出现一个矛盾的地方,



“应用版本,平台,用户名称加起来唯一确定一个用户”



如果是这样,那为何在图二中,会出现两个用户名称?如果用户名称会被修改,此时如何确定它改之前是谁?此时图一中仅根据应用版本和平台是无法确认唯一用户的。如果用户名称不改,那么图一里变化的仅仅只有一个绑定时间了


另外,"换绑"到底是种什么操作?有哪几种场景?每种场景可能会修改什么信息?




题目改了后,这就是个最简单的lag开窗函数的应用场景了


select 应用版本,
平台,
店铺名称,
lag(公司名称) over(partition by 应用版本, 平台, 店铺名称 order by 绑定时间) 公司名称1,
lag(绑定时间) over(partition by 应用版本, 平台, 店铺名称 order by 绑定时间) 绑定时间1,
公司名称 公司名称2,
绑定时间 绑定时间2
from

LINK:https://ask.csdn.net/questions/7668505?answer=53726656
SOURCE:CSDN_ASK
ASK_ID:7668215
ANSWER_ID:53726629
TITLE:sqlserver 周报问题 ,想获取这个月内所有的周报,求解决
ANSWER:

其实你这个就是想按周来切分一个月份,可以使用datepart函数,
但由于这个函数是按星期日为一周的第一天,因此需要将你当前日期减去3天再来使用这个函数,
最后再用这个函数的值和月份结合,来识别区间段就好了


 select cast( datepart(week,(DATEADD(d,-3,日期字段))) as VARCHAR)+‘-’+ cast(month(日期字段) as VARCHAR)

如果要写成查询条件的话


 where cast( datepart(week,(DATEADD(d,-3,日期字段))) as VARCHAR)+‘-’+ cast(month(日期字段) as VARCHAR)=
cast( datepart(week,(DATEADD(d,-3,当前日期))) as VARCHAR)+‘-’+ cast(month(当前日期) as VARCHAR)



  1. sqlserver的周是按每年断开的,往前推3天会有年初的影响,那么可以往后推4天
    select cast( datepart(week,DATEADD(d,4,‘2022-01-04’)) as VARCHAR)+‘-’+ cast(month(‘2022-01-04’) as VARCHAR)

  2. 周日的0点到周三的8点,中间相差243+8=80小时,所以 DATEADD(HOUR,-80,日期字段) ,但考虑到上面说的年初的影响,所以再倒过来247-80=88小时,即 DATEADD(HOUR,88,日期字段)

LINK:https://ask.csdn.net/questions/7668215?answer=53726629
SOURCE:CSDN_ASK
ASK_ID:7668453
ANSWER_ID:53726602
TITLE:关于mysql的安装问题
ANSWER:

上面那个勾勾上只是可能会让你当前这个列表里多显示几个数据库而已,实际不会影响你的操作结果,因为它只是在问你"要不要显示可能正在运行的只读数据库?"


LINK:https://ask.csdn.net/questions/7668453?answer=53726602
SOURCE:CSDN_ASK
ASK_ID:7668451
ANSWER_ID:53726595
TITLE:关于oracle数据库SQL语句问题
ANSWER:

你写的存储过程代码有bug呗,没有考虑到所有场景


LINK:https://ask.csdn.net/questions/7668451?answer=53726595
SOURCE:CSDN_ASK
ASK_ID:7668427
ANSWER_ID:53726589
TITLE:sql请教,谢谢你们的回答
ANSWER:

看看是不是这个意思:
这个表里的时间字段,就是插入数据时的日期,相当于在这个表里,每日都有一份全量数据,现在你想比较相邻的两天,第二天相较于第一天,数据有些什么区别,可能是有增加,也可能是有减少,也有可能是修改了部分字段的值,你想把这些数据都提取出来,最好是能生成对应的对前一天数据的操作指令?
这玩意是个接口表吧?你是不是想获取变更情况来处理对应的正式表?这里需要考虑一个问题,是否会存在要删除的情况,即某天存在的一条数据,在第二天不存在。因为这会影响到处理方案。如果不删,对着原表直接一个merge into 就完事了;如果要删或者是打失效标记,就得再附加一个操作了
假定正式表名为area


merge into area a
using (select dt, city, cityname, county, countyname, groid, grodname
from t_area
where dt = trunc(sysdate)) b
on (a.groid = b.groid and (
nvl(a.city, ‘x’) <> nvl(b.city, ‘x’) or
nvl(a.cityname, ‘x’) <> nvl(b.cityname, ‘x’) or
nvl(a.county, ‘x’) <> nvl(b.county, ‘x’) or
nvl(a.countyname, ‘x’) <> nvl(b.countyname, ‘x’) or
nvl(a.grodname, ‘x’) <> nvl(b.grodname, ‘x’)))
when MATCHED then
update
set a.dt = b.dt,
a.city = b.city,
a.cityname = b.cityname,
a.county = b.county,
a.countyname = b.countyname,
a.grodname = b.grodname
when not MATCHED then
insert into
(dt, city, cityname, county, countyname, groid, grodname)
values
(b.dt, b.city, b.cityname, b.county, b.countyname, b.groid, b.grodname);

如果只是要查出不一样的数据,用下面这个


select *
from t_area b
where dt = trunc(sysdate)
and (exists
(select 1
from area a
where a.groid = b.groid
and (nvl(a.city, ‘x’) <> nvl(b.city, ‘x’) or
nvl(a.cityname, ‘x’) <> nvl(b.cityname, ‘x’) or
nvl(a.county, ‘x’) <> nvl(b.county, ‘x’) or
nvl(a.countyname, ‘x’) <> nvl(b.countyname, ‘x’) or
nvl(a.grodname, ‘x’) <> nvl(b.grodname, ‘x’))) or not exists
(select 1 from area a where a.groid = b.groid))

要找少了的数据的话,原表not exists 接口表就好了


LINK:https://ask.csdn.net/questions/7668427?answer=53726589
SOURCE:CSDN_ASK
ASK_ID:7668370
ANSWER_ID:53726523
TITLE:Mysql where多条件 可能缺省如何写语句
ANSWER:

判断每个条件其实不蠢,这样往数据库发送的sql更精简。写在sql里反而是偷懒的做法,比如下面这样


select * from table where a = (case when ? =‘’ or ? is null then a else ? end ) 

当传空值时,这个sql就会等价为


select * from table where a=a 

相当于没有a条件了,当然前提是你的a列的数据没有null值,如果有null值的话就还要再加点处理,比如


select * from table where (a = (case when ifnull(?,‘’)=‘’ then a else ? end )  or (ifnull(?,‘’)=‘’ and a is null))

LINK:https://ask.csdn.net/questions/7668370?answer=53726523
SOURCE:CSDN_ASK
ASK_ID:7668347
ANSWER_ID:53726497
TITLE:sql语句如何查询编码等于四位数字
ANSWER:

看是什么数据库,一般用于判断长度的函数是 “length”,但有的数据库是"len",


where length(部门编码)=4

LINK:https://ask.csdn.net/questions/7668347?answer=53726497
SOURCE:CSDN_ASK
ASK_ID:7668337
ANSWER_ID:53726494
TITLE:请教oracle在同一SQL中多次跨库查询
ANSWER:

要先在B库用dblink创建相关对象,比如同义词或者视图,然后再在A库来访问B库里创建的这个对象。
没办法在一个库里直接调用另一个库的dblink的,必须要中转一次


LINK:https://ask.csdn.net/questions/7668337?answer=53726494
SOURCE:CSDN_ASK
ASK_ID:7668218
ANSWER_ID:53726486
TITLE:sql语句创建表失败
ANSWER:

没有这种语法

img


LINK:https://ask.csdn.net/questions/7668218?answer=53726486
SOURCE:CSDN_ASK
ASK_ID:7668122
ANSWER_ID:53726472
TITLE:sql server 获取相邻日期范围问题 求解
ANSWER:

建议你以表格的形式说明一下你想要输出的数据格式,目前题目里描述得不是很清楚,实在没看出分组是在干啥。
我唯一想到的合理需求是想获取向下数距离当前行最近的一个不相同日期了


原日期找到日期
2022-01-022022-01-05
2022-01-052022-01-10
2022-01-052022-01-10
2022-01-052022-01-10
2022-01-102022-01-15

但是也不清楚需求,是要去重还是要在原数据上增加一列,题目里已知信息太少了,建议把问题背景描述一下吧,思路别跑偏了


LINK:https://ask.csdn.net/questions/7668122?answer=53726472
SOURCE:CSDN_ASK
ASK_ID:7667918
ANSWER_ID:53725639
TITLE:Win11家庭版如何解决找不到文件gpedit.msc的问题?
ANSWER:

你在网上找的那个代码,要鼠标右键使用管理员模式运行才有用,下面这篇文章里就是在win11home版里演示的


LINK:https://ask.csdn.net/questions/7667918?answer=53725639
SOURCE:CSDN_ASK
ASK_ID:7667794
ANSWER_ID:53725620
TITLE:oar-01017问题怎么解决?
ANSWER:

用户名或密码不正确,请确认有创建这个用户,以及密码是否正确。
如果无法确定,可以用sys账号登录后,查询 select username from dba_users where username='大写用户名';
如果能查出来说明已创建对应的用户,如果查不出来,请先创建用户


LINK:https://ask.csdn.net/questions/7667794?answer=53725620
SOURCE:CSDN_ASK
ASK_ID:7667773
ANSWER_ID:53725612
TITLE:mysql递归如何实现,p_uid对应的uid数量
ANSWER:

先说明下你的mysql版本吧,8之前和8之后的方法不一样
如果是8.0以上的话,使用with递归很容易实现


–测试数据
create table test_20220320_a (p_uid int,uid int);
insert into test_20220320_a value (null,2);
insert into test_20220320_a value (2,83);
insert into test_20220320_a value (2,84);
insert into test_20220320_a value (83,85);
insert into test_20220320_a value (83,87);
insert into test_20220320_a value (84,86);
insert into test_20220320_a value (84,88);
insert into test_20220320_a value (3,5);

–查询sql
with RECURSIVE cte as (
select p_uid, uid,uid root_uid from test_20220320_a where uid=2
union all
select a.p_uid,a.uid,cte.root_uid from test_20220320_a a,cte where a.p_uid=cte.uid
)
select count(p_uid),count(uid) from cte

img


上面这个sql就是在查询结果里增加了根节点的字段,这样就方便使用group by 聚合了


LINK:https://ask.csdn.net/questions/7667773?answer=53725612
SOURCE:CSDN_ASK
ASK_ID:7667777
ANSWER_ID:53725608
TITLE:mysql两张表如何关联查询?
ANSWER:

你这两个表的关联字段是什么?id?如果是id的话,直接关联不就好了?而且也没说两个表是否完全匹配,我先假定是完全匹配的


select a.id,a.product,a.type,
count
(case when a.status=‘pass’ then a.id end) total_pass,
count
(case when a.status=‘pass’ then a.id end) max(price) 总价,
count
(a.sn) total_sn,
concat
(round(count(case when a.status=‘pass’ then a.id end)/count(a.sn)
100,2),‘%’) rate
from table1 a,table2 b where a.id=b.id group by a.id,a.product,a.type

你这个应该不是原表结构,没人会这么设计表格的,上面的sql仅针对你这个奇怪的表结构而写




是否存在table1有的type,在table2中不存在?如果全部都存在,那么直接用type关联就好了,


select a.id,a.product,a.type,
count(case when a.status=‘pass’ then a.id end) total_pass,
count(case when a.status=‘pass’ then a.id end) * max(price) 总价,
count(a.sn) total_sn,
concat(round(count(case when a.status=‘pass’ then a.id end)/count(a.sn)*100,2),‘%’) rate
from table1 a,table2 b where a.type=b.type group by a.id,a.product,a.type

但奇怪的是,为啥你的price是个VARCHAR?而且还带符号?,这样的话要先把符号去掉才能计算


replace(price,‘¥’,‘’) 

LINK:https://ask.csdn.net/questions/7667777?answer=53725608
SOURCE:CSDN_ASK
ASK_ID:7667726
ANSWER_ID:53725448
TITLE:关于sql server 查询效率低的问题!
ANSWER:

把表结构先贴出来,目前无法判断你a表各字段的唯一情况,你子查询里的那张表是不是唯一完全不用管,因为你反正都是聚合。
只要a表里的项目名称是唯一的就行了,但是,一般这玩意不就应该有个项目id的么?
而且,"v_jh_销售出库单查询"这个玩意看上去是一张视图啊,难道里面没有"项目名称"、"项目归属"、"项目类型"这三个字段么?
就算没有,也可以把这三个字段直接加进去啊,然后查的时候就不用关联a表来查了,直接一个聚合完事


LINK:https://ask.csdn.net/questions/7667726?answer=53725448
SOURCE:CSDN_ASK
ASK_ID:7667717
ANSWER_ID:53725439
TITLE:微服务的项目应该怎么启动
ANSWER:

微服务不是指的某个软件,而是指的一种软件架构方式,特点是按业务进行划分为独立的服务单元。
只要满足这种架构方式开发的软件都叫微服务,因此没有通用的先启动什么再启动什么的说法,不同的软件项目的各个组件启动顺序都不一样。
(其实在"微服务"这个名称出来之前,早就有很多能称之为使用了微服务架构的软件系统了)


LINK:https://ask.csdn.net/questions/7667717?answer=53725439
SOURCE:CSDN_ASK
ASK_ID:7667342
ANSWER_ID:53725052
TITLE:SQL中union all的使用
ANSWER:

与列名没关系,如果提示 "表达式必须具有与相对应表达式相同的数据类型",那么肯定就是出现了类型不同的情况,请贴出你的表结构和完整sql看看


LINK:https://ask.csdn.net/questions/7667342?answer=53725052
SOURCE:CSDN_ASK
ASK_ID:7667304
ANSWER_ID:53725049
TITLE:MySQL创建外键出现错误
ANSWER:

画红圈的两个地方不一样

img


LINK:https://ask.csdn.net/questions/7667304?answer=53725049
SOURCE:CSDN_ASK
ASK_ID:7667274
ANSWER_ID:53725045
TITLE:mysql中两个count值相除,如何合并?
ANSWER:

group by 的维度一样,没必要分两次查,可以直接在count里写判断条件


select orderid,product,
count(case when status=‘pass’ then id end) total_pass,
count(sn) total_sn,
concat(round(count(case when status=‘pass’ then id end)/count(sn)*100,2),‘%’) rate
from table1 group by group by orderid,product

LINK:https://ask.csdn.net/questions/7667274?answer=53725045
SOURCE:CSDN_ASK
ASK_ID:7667214
ANSWER_ID:53725033
TITLE:SQLserver中,AS RESULT(TNAME,C#,AVG_SCORE)AS X报错为啥??
ANSWER:
  1. 没有 “as RESULT as X” 这种语法,一个子查询只能有一个别名
  2. 最后面的这个子查询也不对,你没有定义一个全局的RESULT,所以最后的RESULT是无效的。

如果要对同一个子查询别名引用两次以上,应该使用with as
另外,要实现你题目中的要求,其实没必要写得这么麻烦,判断课程数量是否和满足80分以上的课程数量一致就行了


select TNAME from (
SELECT TNAME,C.C#,
case when AVG(SCORE) >=80 then 1 end s
FROM T,C,SC
WHERE T.T#=C.T# AND C.C#=SC.C#
GROUP BY TNAME,C.C#) as x
group by TNAME having count(1)=count(s)

LINK:https://ask.csdn.net/questions/7667214?answer=53725033
SOURCE:CSDN_ASK
ASK_ID:7667134
ANSWER_ID:53724808
TITLE:利用mysql解决多条件查询
ANSWER:

你不把表和数据贴出来,别人怎么对着你的环境来解释?
sql这种语言最大的优势就是最接近自然语言,这题目要求完全就是按着sql的逻辑说的,没有绕任何弯,把中文对应的sql关键字套上去就是了:


  1. "查看cid<3的记录" - "where cid<3"
  2. "按分数递减显示" - "order by 分数 desc"
  3. "若分数相同则按cid递减显示" - "order by 分数 desc,cid desc"
  4. "若还相同则按sid递减显示" - "order by 分数 desc,cid desc,sid desc"

LINK:https://ask.csdn.net/questions/7667134?answer=53724808
SOURCE:CSDN_ASK
ASK_ID:7666858
ANSWER_ID:53724417
TITLE:用sql求出哪个地区男生的各科均分均比女生低?
ANSWER:

问sql题请提供建表及模拟数据的sql,并说明使用的数据库类型及版本号,这样才能方便答题人进行测试


select splace from (
select splace, cid,
case when
avg(case when ssex=‘男’ then cmark end) <
avg(case when ssex=‘女’ then cmark end)
then 1 end x
from student st, mark m
where st.sid = m.sid
group by splace, cid
) group by splace having count(x)=count(1)

LINK:https://ask.csdn.net/questions/7666858?answer=53724417
SOURCE:CSDN_ASK
ASK_ID:7666820
ANSWER_ID:53724405
TITLE:关于Oracle里exists可以和in等价改写
ANSWER:

你最后这个sql的确是删不掉数据的,"a.rowid in (select b.rowid …) "表示 要找出 “a.rowid=b.rowid"的数据,但是这个in里面,又有这个条件"a.rowid < b.rowid”,既等于又小于,这两个条件是不可能同时成立的,因此找不到数据。
另外,你第一个sql


delete test a
where exists(select b.object_id
from test b
where a.object_id = b.object_id
and a.rowid < b.rowid);

其实子查询里select 的字段可以为任何东西,你select 1都行,比如


delete test a
where exists(select 1
from test b
where a.object_id = b.object_id
and a.rowid < b.rowid);

因为它的重点不在于select了哪个字段,而是在于后面的这两个条件 object_id 和 rowid,
可以发现,object_id是用的相等,所以object_id可以用in找到;而rowid是小于,当然就不能用in找到了


LINK:https://ask.csdn.net/questions/7666820?answer=53724405
SOURCE:CSDN_ASK
ASK_ID:7666750
ANSWER_ID:53724378
TITLE:请教各位专家:pandas写入excel时,时间太长如何解决?
ANSWER:

xlsx文件实际上是多个xml文件构成的压缩包,数据、格式等等都定义在了不同的xml文件内,甚至同一个sheet中的数字和文本都是放在了不同的xml文件里,因此读取数据和写入数据都需要进行不少的解析动作。
如果你想要快速将数据写入文件,最好的方式是直接存成文本文件,这样要继续对已存在的文件增加数据时,不需要再次读取原文件内容进行解析了。
如果最终目标是生成xslx文件,可以在文本文件的内容全部生成后,一次性转换成xlsx


LINK:https://ask.csdn.net/questions/7666750?answer=53724378
SOURCE:CSDN_ASK
ASK_ID:7666746
ANSWER_ID:53724300
TITLE:CONNECT BY ROWNUM
ANSWER:

请提供一下所使用的mysql版本号,
如果是mysql8.0以上的话,可以使用with递归


with RECURSIVE cte as (
select cast(‘00:00:00’ as time) t,1 lvl union all
select date_add(t, interval ‘00:10:00’ hour_second),lvl+1 from cte where lvl<=24*6-1
)
select time_format(t,‘%H:%i’) t from cte

img


LINK:https://ask.csdn.net/questions/7666746?answer=53724300
SOURCE:CSDN_ASK
ASK_ID:7666715
ANSWER_ID:53724298
TITLE:虚拟机突然找不到基础命令如:vi,scp是为什么?
ANSWER:

执行一下这个看看


/bin/ls

如果可以执行,说明你环境变量出问题了,建议检查一下配置文件


LINK:https://ask.csdn.net/questions/7666715?answer=53724298
SOURCE:CSDN_ASK
ASK_ID:7666637
ANSWER_ID:53724180
TITLE:find_in_set,函数,怎么用才能不影响索引
ANSWER:

由于你的“ad.all_start_activity"这个字段是多个值拼出来的字符串,因此不管你怎么写都不会快,正常开发应该是要避免这种结构设计的,老老实实的放到一列里去吧


LINK:https://ask.csdn.net/questions/7666637?answer=53724180
SOURCE:CSDN_ASK
ASK_ID:7666555
ANSWER_ID:53724086
TITLE:Navicat中MySQL导入CSV文件之后没法使用表中的中文字符查询
ANSWER:

这是因为你当前窗口的字符集不匹配导致,处理方法为:
打开cmd,输入 chcp 65001 回车,然后再连接mysql并执行查询


LINK:https://ask.csdn.net/questions/7666555?answer=53724086
SOURCE:CSDN_ASK
ASK_ID:7666310
ANSWER_ID:53723769
TITLE:mac安装mysql报错Found option without preceding group in config file /etc/my.cnf at line 1.
ANSWER:

要手动配置一下 "/etc/my.cnf"这个文件里面的内容


LINK:https://ask.csdn.net/questions/7666310?answer=53723769
SOURCE:CSDN_ASK
ASK_ID:7666309
ANSWER_ID:53723766
TITLE:kettle做表输入时已成功连接到mysql,但是点入获取sql查询语句的时候出现了错误
ANSWER:

原因在这里


建议更新一下connector的版本


LINK:https://ask.csdn.net/questions/7666309?answer=53723766
SOURCE:CSDN_ASK
ASK_ID:7666289
ANSWER_ID:53723716
TITLE:MySQL 使用mycli查询表中文乱码
ANSWER:

你这是在什么环境下?数据库字符集是什么?
我自己测试,如果数据库是utf8mb4,在windows下使用pip3安装mycli后,不修改任何配置,登录数据库查询中文字段不会显示乱码


img




从这个乱码的表现来看,的确是把UTF-8的字符当成了GBK字符识别了,因为UTF-8一个汉字是3个字节,GBK一个汉字是2个字节,所以"男"就变成了一个汉字加一个问号(半个字)。
先确认一下你的mycli是不是最新版本,可以使用pip3重新安装一下,还有你python环境的默认字符集是否为utf8
另外,可以尝试在连接数据库时增加一个参数–charset,比如


mycli -u root -h localhost -P 3306 –charset=utf8mb3

以上方式来自mycli的github上的bug修复记录


但我不确定这个方法是否有效,因为我这里不管怎么改都不会乱码。。。




在mycli官方文档中有介绍,mycli的默认字符集是取的mysql客户端配置信息里的,即 ".my.cnf"文件中 client 的配置,因此还可以检查一下你本机这个文件里配置的是什么
官方文档


img


img


LINK:https://ask.csdn.net/questions/7666289?answer=53723716
SOURCE:CSDN_ASK
ASK_ID:7666242
ANSWER_ID:53723653
TITLE:怎么通过函数实现最右一列结果的输出?如图所示
ANSWER:

麻烦说明一下是要求是用什么工具或者什么开发语言实现?
excel公式?数据库sql?python或java等开发语言的表格处理?




EXCEL的话,下面是一种方案,用if判断,然后字符串拼接,用字符串替换把两个逗号变成一个逗号,最后把首尾的逗号去掉。
注意,我这里只拼了三个字段作为示意


=MID(SUBSTITUTE(“,”&IF(B2=1,BB1,“”)&“,”&IF(C2=1,CC1,“”)&“,”&IF(D2=1,DD1,“”)&“,”,“,”,“,”),2,LEN(SUBSTITUTE(“,”&IF(B2=1,BB1,“”)&“,”&IF(C2=1,CC1,“”)&“,”&IF(D2=1,DD1,“”)&“,”,“,”,“,”))-2)

img


LINK:https://ask.csdn.net/questions/7666242?answer=53723653
SOURCE:CSDN_ASK
ASK_ID:7666221
ANSWER_ID:53723649
TITLE:关于sql中set echo off的疑问
ANSWER:

达梦官方文档中是这么描述ECHO的



在用START命令执行一个SQL脚本时,是否显示脚本中正在执行的SQL语句。




也就是说,这个参数控制的不是spool是否输出sql内容,而是,是否输出你调用的sql脚本里的内容


LINK:https://ask.csdn.net/questions/7666221?answer=53723649
SOURCE:CSDN_ASK
ASK_ID:7666170
ANSWER_ID:53723586
TITLE:linux中ifconfig:command not found
ANSWER:

执行一下这个看看


/sbin/ifconfig

如果可以成功执行,说明你环境变量加载失败了,请检查环境变量的配置脚本是否有问题
具体可以参考这篇文章


LINK:https://ask.csdn.net/questions/7666170?answer=53723586
SOURCE:CSDN_ASK
ASK_ID:7666073
ANSWER_ID:53723583
TITLE:订单表和订单明细表join时,数据量大,能不能用分桶表优化?
ANSWER:

订单表和订单明细表上如果有同样的日期,可以尝试按日期范围把数据拆开,毕竟大数据计算的最大特点之一就是所谓的分布式。
另外,在大数据仓里,其实建议导入数据的时候,就把订单表和订单明细表join起来一起导入,当然订单表也还是要单独导入一份,这样虽然占用了更多的存储空间,但这是以空间换时间的一种有效做法


LINK:https://ask.csdn.net/questions/7666073?answer=53723583
SOURCE:CSDN_ASK
ASK_ID:7666030
ANSWER_ID:53723572
TITLE:大家觉得数据库设计的时候,流程状态字段用数字表示好,还是直接对应英文单词好?
ANSWER:

用数字的好处,上面各位都已经说了。
但这个东西没有标准答案,所以我也表达下我的看法吧。


会接触到数据库的表和字段的人,会有开发人员(这里专指写程序代码的)、软件运维(这里指分析检查疑似数据异常及数据修复的)、数据分析人员(这里指出报表的)等等。
也就是说,不仅仅是在开发阶段,还有数据产生阶段、数据检查阶段、数据提取阶段等多个时候都会需要关注到字段的值。这些阶段的所有人员,都可以算做是用户。
对于开发人员而言,程序写完如果没有bug,就几乎不用去管字段状态是用什么表示了,但是对于其他“用户”来说,可能每天都需要反复接触这些状态值,而且会不断地有新人加入,因此设计如果越复杂,培训成本就会越高。
然后在手工查数据库出具报表的阶段,如果直接查一张表就能把想要的字段都输出来,数据分析人员的工作效率会高不少,因为纯数字无法表达任何业务含义。
所以,每个角色都会站在自己的角度来考虑问题,无所谓好坏。
但是,一个公司里必须有一个统一的标准,至于这个标准怎么定,当然是负责人来拍板,由于按照负责人定的标准做导致出现了什么问题,由负责人承担后果


LINK:https://ask.csdn.net/questions/7666030?answer=53723572
SOURCE:CSDN_ASK
ASK_ID:7666011
ANSWER_ID:53723544
TITLE:优化sql 有没有回优化查询sql的
ANSWER:

还需要了解一点信息


  1. user_tables的记录数有多少?
  2. 执行这个sql时,耗时最长的几个等待事件是什么?
  3. 不带order by和行数限制时,查询速度怎么样?

分析:


  1. user_tables中可以查询到当前用户的所有表,而且理论上,表再多也不会多到哪里去(当然不排除某些极端情况),但是由于这实际上是个视图,而且需要访问到数据字典信息,因此不排除当前存在数据字典被占用的情况而导致查询缓慢,所以要看下上面说的1和2的情况
  2. order by 的时候会有一些额外的开销,但不清楚你实际生产是个什么情况,所以需要用上面3的方式来做个对比

另外,可以尝试下面这个sql,但是可能需要对用到的两个表进行查询授权


select NAME
from sys.obj<br/> <span class="hljs-keyword">WHERE</span> <span class="hljs-keyword">TYPE</span># &#61; <span class="hljs-number">2</span><br/> <span class="hljs-keyword">AND</span> <span class="hljs-keyword">OWNER</span># &#61; (<span class="hljs-keyword">SELECT</span> <span class="hljs-keyword">USER</span># <span class="hljs-keyword">FROM</span> sys.<span class="hljs-keyword">user</span> u WHERE NAME = USER)
AND REGEXP_LIKE(NAME ,‘^’ || #{tablePrefix}|| ‘[0-9]+$’)
ORDER BY NAME DESC
OFFSET 0 Row FETCH NEXT 1 ROWS ONLY

这个是把视图拆开,只获取必要信息,减少了user_tables视图中的很多逻辑


LINK:https://ask.csdn.net/questions/7666011?answer=53723544
SOURCE:CSDN_ASK
ASK_ID:7665984
ANSWER_ID:53723426
TITLE:Oracle在多条数据中,找出时间最大的一条数据,并对这些数据的某个字段进行汇总
ANSWER:

不知道你是问题描述不全,还是的确是个简单的问题,最大不就是取max?汇总不就是取SUM?
而且你最后也只需要3个字段,不需要完整的B表记录,那么下面这个sql不就可以了?


sleect max(a.名称) 名称,max(b.日期) 日期,sum(金额)  金额
from a,b where a.id=b.主表id
group by a.id

LINK:https://ask.csdn.net/questions/7665984?answer=53723426
SOURCE:CSDN_ASK
ASK_ID:7665966
ANSWER_ID:53723422
TITLE:mysql order by count * 导致filesort
ANSWER:

这种sql避免不了 “Using temporary;” 和 “Using filesort”,这是order by 非基表数据时会产生的,
基于group by生成temporary的数据执行order by ,就是filesort了。
一般情况下,这个查询应该要带条件,如果是订单表的话,一般会按某个时间区间来进行统计,这个时候统计的数据量会减少很多。
还有,如非必要,一般不建议在sql中使用order by,有时甚至可以取出数据来再进行排序,
你可以尝试把order by 去掉,会发现 “Using temporary;” 和 "Using filesort"都没有了,
另外,你可以测试一下下面这个sql,我这里数据量不够比较不出效果


select * from 
(SELECT o.product_id,COUNT(1) AS num
FROM t_order o
GROUP BY o.product_id) x
ORDER BY 2 DESC

img


LINK:https://ask.csdn.net/questions/7665966?answer=53723422
SOURCE:CSDN_ASK
ASK_ID:7665919
ANSWER_ID:53723399
TITLE:MySQL 用add字段 总是报错ERROR 1064 (42000)
ANSWER:

你单词拼写错误了,仔细对比一下这条sql,看和你的有什么区别


alter table emp add nickname varchar(20) comment‘昵称’;

代码块颜色都不一样


LINK:https://ask.csdn.net/questions/7665919?answer=53723399
SOURCE:CSDN_ASK
ASK_ID:7665875
ANSWER_ID:53723396
TITLE:使用python 实现对CSV文件数据的处理
ANSWER:

我先用文字解析一下哈,看看是不是这个意思
原始数据有多行,需要对每一行进行处理,处理规则为:



识别逗号为新数据每行的分隔符,识别空格为每个字段的分隔符



因此原数据一定满足下面这样的格式



字段1 字段2 字段3,字段1 字段2 字段3,字段1 字段2 字段3…



那么这其实就是按每行循环,按逗号切割成列表 后再循环 按空格切割生成一行新数据


LINK:https://ask.csdn.net/questions/7665875?answer=53723396
SOURCE:CSDN_ASK
ASK_ID:7665892
ANSWER_ID:53723389
TITLE:想让一个字段的行数作为筛选条件
ANSWER:

前10是指总共只取10行出来还是说要按哪些字段分组排序,取每个分组的前10?如果有分组的话是按哪几个字段?
如果没有分组,那么是可以用order by 加limit的,当然也可以使用开窗函数,比如把你中间那段替换成下面这样


select * from  (
SELECT
a,b,c,d,e,f,REPLACE(m.money,CONCAT(t.amount,‘,’),‘’) as payable_amount,
row_number() over(order by REPLACE(m.money,CONCAT(t.amount,‘,’),‘’) desc) rn
FROM
tblM as m
LEFT JOIN
tblT as t
ON t.a= m.a) xx where rn<=10

如果是要分组取前10,开窗函数里加上 partition by 分组的字段就好了


LINK:https://ask.csdn.net/questions/7665892?answer=53723389
SOURCE:CSDN_ASK
ASK_ID:7665729
ANSWER_ID:53723125
TITLE:SQL分组查询数量求旧
ANSWER:

这个表里应该不止"饺子"和"米饭"这两种吧?如果这个值的清单不是确定的,随时可以修改,那么就不建议写固定的sql来进行转换,因为sql的列数和字段名必须是确定的,总不能加一种食物就改一下sql吧?
因此,这里有两种方式,


  1. 由程序动态拼接sql,即先查有哪些值,然后按照楼上"qq_25376897"的这个格式来拼出对应的sql字符串,再传给数据库来执行出结果
  2. 程序先按原格式sql直接查询数据库,程序获取到数据后,由程序进行展示格式的转换,很多开发语言都有类似的pivot处理组件,如果没有,直接写几个循环也能处理出来

LINK:https://ask.csdn.net/questions/7665729?answer=53723125
SOURCE:CSDN_ASK
ASK_ID:7665706
ANSWER_ID:53723100
TITLE:hive报错,无法查询等操作
ANSWER:

这个报错里已经给了你建议的操作,要么把使用ssl设置成否,如果ssl要设置成是的话,必须同时提供对应的服务器证书


LINK:https://ask.csdn.net/questions/7665706?answer=53723100
SOURCE:CSDN_ASK
ASK_ID:7665688
ANSWER_ID:53723091
TITLE:MDB数据排序问题既有数字又有字母
ANSWER:

在查询时添加一个where条件就行了


Select * from Users where IsNumeric(username)  order by username desc

img


img


img


LINK:https://ask.csdn.net/questions/7665688?answer=53723091
SOURCE:CSDN_ASK
ASK_ID:7665635
ANSWER_ID:53723065
TITLE:关于数据库某一个字段调整为年龄的某一类格式
ANSWER:

其实就用case when 判断一下再拼个字符串就好了,重点是age的字段类型是什么,不同的字段类型判断处理方式不一样.
假设age是字符串类型


select name,
case when cast(age as NUMERIC(5,2))>=14 then cast(floor(age) as VARCHAR) +’ sui’
else cast(floor(age) as VARCHAR)+’ nian ling ‘+substring(age,CHARINDEX(’.‘,age)+1,2)+’ yue’ end age from t

img




如果是数值类型,做需要转换成字符串类型再来做截取了,但是,你不觉得这题奇怪么?
0.5表示5个月,
0.4表示4个月,
那么10个月应该如何表示?是1.0还是0.1还是0.10?
显然不可能是1.0,然后0.10其实就是0.1,那此时1个月该如何表示??
NUMERIC类型里,必须统一小数位精度,按照你题目上的这个转换规则,就是无解了




小数点后0-9不一定就是表示的月份啊,它可能是0.5表示0.5年,即表示6个月,你得按照原始数据的定义来进行处理,不能自己去想象它是什么东西


LINK:https://ask.csdn.net/questions/7665635?answer=53723065
SOURCE:CSDN_ASK
ASK_ID:7665561
ANSWER_ID:53723023
TITLE:GIS10.6版本安装空间句法插件
ANSWER:

把电脑上的杀毒软件什么的都关掉,然后鼠标右键使用管理员模式运行。
另外,你这个窗口的上一步能不能截个图,如果有安装详细信息的话,下面应该有提示失败原因。
还有,检查一下这个软件与你操作系统版本的兼容性


LINK:https://ask.csdn.net/questions/7665561?answer=53723023
SOURCE:CSDN_ASK
ASK_ID:7665416
ANSWER_ID:53722986
TITLE:mysql 计算平均数出错 求解
ANSWER:

你sql里的那些join都变成笛卡尔积数据翻倍了,所以结果肯定是错误的
如果你数据库支持开窗函数的话,可以像下面这么写,只要查一次原表即可


select s_id,s_name,avg(s_score) avg_score from (
select a.s_id,a.s_name,b.s_score,
count(case when b.s_score<60 then 1 end ) over (partition by b.s_id) ct
from Student a,Score b where a.s_id=b.s_id) as t
where ct>=2
group by s_id,s_name

如果是不支持开窗函数的数据库,就只能用类似楼上的方式了,先把满足条件的人查出来,再关联回原数据


LINK:https://ask.csdn.net/questions/7665416?answer=53722986
SOURCE:CSDN_ASK
ASK_ID:7665084
ANSWER_ID:53722956
TITLE:留存率的时间区间怎么设置?
ANSWER:

用开窗函数的滑动窗口,可以实现取当前行的下N行,
先提前统计一个数据, dt、site、人数count,3个字段作为子查询,
然后按site分组,按日期排序,取当前行往下数的第7行,比如下面这个,就能在同一行取到第7天的数据了


first_value(人数count) over(partition by site order by dt rows between 7 following and 7 following)



看上去没我之前想的那么简单,还需要排除新用户的影响,那么这个时候就需要先得到一个数据,即每个用户每天在次日、7日、30日时的登录状态,这个可以使用开窗函数中的range between来处理,排序用日期差,这样1天就是一个range



–测试表
create table test_20220318b (dt string,user_id string, site string);
insert into test_20220318b values(‘20220201’,‘a’,‘app01’);
insert into test_20220318b values(‘20220202’,‘a’,‘app01’);
insert into test_20220318b values(‘20220203’,‘a’,‘app01’);
insert into test_20220318b values(‘20220208’,‘a’,‘app01’);
insert into test_20220318b values(‘20220228’,‘a’,‘app01’);
insert into test_20220318b values(‘20220301’,‘a’,‘app01’);
insert into test_20220318b values(‘20220302’,‘a’,‘app01’);
insert into test_20220318b values(‘20220303’,‘a’,‘app01’);
insert into test_20220318b values(‘20220308’,‘a’,‘app01’);
insert into test_20220318b values(‘20220201’,‘b’,‘app01’);
insert into test_20220318b values(‘20220202’,‘b’,‘app01’);
insert into test_20220318b values(‘20220228’,‘b’,‘app01’);
insert into test_20220318b values(‘20220301’,‘b’,‘app01’);
insert into test_20220318b values(‘20220308’,‘b’,‘app01’);


–查询sql
select dt,site,
sum(d1)/count( user_id) `次日留存率`,
sum(d7)/count( user_id) `7日留存率`,
sum(d30)/count( user_id) `30日留存率`
from (
select aa.dt ,
aa.site ,
user_id,
count(distinct user_id) over(partition by user_id order by df
range between current row and 1 following )-1 d1,
count(distinct user_id) over(partition by user_id order by df
range between 6 following and 7 following ) d7,
count(distinct user_id) over(partition by user_id order by df
range between 29 following and 30 following ) d30
from (select distinct dt,
user_id ,
site ,
datediff(from_unixtime(unix_timestamp(dt,‘yyyyMMdd’),‘yyyy-MM-dd’),
from_unixtime(unix_timestamp(‘20220201’,‘yyyyMMdd’),‘yyyy-MM-dd’)) df
from test_20220318b
where dt >= ‘20220201’
) aa ) bb
group by dt,site

img


LINK:https://ask.csdn.net/questions/7665084?answer=53722956
SOURCE:CSDN_ASK
ASK_ID:7665327
ANSWER_ID:53722320
TITLE:MySQL将表引擎修改为mrg_myisam后表数据丢失
ANSWER:

我做了个测试,单纯的修改存储引擎后不会丢失数据


CREATE TABLE `test_20220318` (
`aid` varchar(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
;
insert into test_20220318 values(‘123’);
select from test_20220318;
ALTER TABLE test_20220318 ENGINE=MyIsam;
select
from test_20220318;

你在navicat右边看到的数据来自于统计信息,而统计信息并不是实时刷新的,这个表里面有没有数据,你直接写sql查就是了




的确在直接修改存储引擎为mrg_myisam后,数据会丢失,而且刷新统计信息后,这个表里也的确没有记录了。mrg_myisam的表的确本身是没有数据的,正确的用法应该是将多个myisam表链接到一个mrg_myisam表里,来实现同时对多个结构相同的表进行管理。


然后我在mysql官网上找到了相关的帖子


这是mysql参数设置上的一个bug,至今没有修复,也没排上修复计划
官方文档里有句重要的话



To prevent inadvertent loss of data, ALTER TABLE cannot be used to change the storage engine of a table to MERGE or BLACKHOLE.
为了阻止丢失数据,ALTER TABLE不能被用于修改表的存储引擎为merge或者blackhole



但是这个反馈bug的用户发现:



However, with the setting sql_mode = “NO_ENGINE_SUBSTITUTION”; , I could still change the storage engine to MERGE (also MRG_MYISAM);
然而,在 sql_mode = “NO_ENGINE_SUBSTITUTION”; 设置下,仍然可以改变存储引擎为MERGE(也就是 MRG_MYISAM)



你这个问题连官方都无解了,甚至这个bug都没排上修复计划



We are the Verification Team and we do not have access to the scheduling of the bug fixes.



LINK:https://ask.csdn.net/questions/7665327?answer=53722320
SOURCE:CSDN_ASK
ASK_ID:7665389
ANSWER_ID:53722314
TITLE:Win10开机黑屏,重做系统后依然黑屏
ANSWER:

建议先排查一下看看是不是显示器的问题,比如先弄个别的什么显示设备接上去试试,没有多的显示器的话,可以用电视,电视都没有的话你就只能去借别人的显示器试下了,黑屏状态下电脑还有声音,这大概率与操作系统没有关系,而且根据你的描述来看,只有显示器没换了


LINK:https://ask.csdn.net/questions/7665389?answer=53722314
SOURCE:CSDN_ASK
ASK_ID:7664893
ANSWER_ID:53722312
TITLE:从sql serve中查询出现的最后一次记录
ANSWER:

用开窗函数分组排序就行了


select * from 
(select a.*, row_number() over(partition by 编号 order by id desc) rn from a) as b
where b.rn=1

LINK:https://ask.csdn.net/questions/7664893?answer=53722312
SOURCE:CSDN_ASK
ASK_ID:7665335
ANSWER_ID:53722308
TITLE:GRANT ALL PRIVILEGES ON . TO ‘root’@‘%’ IDENTIFIED BY ‘root’ WITH GRANT OPTION;存在错误
ANSWER:

去掉后面的 with grant option 试试,
另外,可以参考一下下面这2篇文章



LINK:https://ask.csdn.net/questions/7665335?answer=53722308
SOURCE:CSDN_ASK
ASK_ID:7665220
ANSWER_ID:53722306
TITLE:hive用select*from查看不到表数据
ANSWER:

参考一下这篇文章


LINK:https://ask.csdn.net/questions/7665220?answer=53722306
SOURCE:CSDN_ASK
ASK_ID:7665086
ANSWER_ID:53722304
TITLE:关于Mysql改变表不能保存问题
ANSWER:

看下执行的输出结果中是否包含报错信息,如果不知道怎么看输出结果,那就直接写sql来修改字段长度。
报错原因很可能是像楼上说的那样,里面已经有数据了,不能减少精度


LINK:https://ask.csdn.net/questions/7665086?answer=53722304
SOURCE:CSDN_ASK
ASK_ID:7665082
ANSWER_ID:53722292
TITLE:Mysql连接问题(Nextcloud安装问题)
ANSWER:

你先搞个navicat连接一下数据库看能不能连上,如果连不上就是数据库配置有问题。
我也在用nextcloud,之前还是owncloud起就开始在用了,而且也是用的docker部署,如果连接数据库被拒绝,那肯定是数据库这边做了什么设置导致的.
而且,要注意,必须先在mysql里把nextcloud的用户建好,才能在nextcloud里连上数据库,下面是创建用户及授权的参考


create database nextcloud; 
create user nextcloudadmin@localhost identified by ‘密码’;
grant all privileges on nextcloud.* to nextcloudadmin@‘%’ identified by ‘密码’;
flush privileges;

下面这个是我的docker管理器哈,24小时不间断一直在运行中

img


LINK:https://ask.csdn.net/questions/7665082?answer=53722292
SOURCE:CSDN_ASK
ASK_ID:7665000
ANSWER_ID:53722279
TITLE:sql中exists和in的区别是什么
ANSWER:

你想象一下,如果你手里有两张纸制表格,让你自己用肉眼来过滤数据,会如何执行in以及exists?


  1. 如果是in 的情况,你需要把第二张纸里的数据全部看完,并且把关键字段去重,然后再拿着第一张纸用这个去重的关键字段过滤,如果第二张纸里只有两条记录,你肯定可以记住,然后看第一张纸的时候能够迅速的判断哪行需要哪行不需要。
  2. 如果是exists的情况,你是直接看第一张纸,从第一行开始看起,每行都去对照下第二张纸,只要在第二张纸里找到任意一行能匹配上,你就可以确定这行需要保留,继续找第一张纸的下一行,假设你第一张纸总共才3行,只要随便扫3眼第二张纸就能得到结果了,实际上根本不需要把第二张纸全部看一遍,但你第一张纸需要每行都去对应扫一次第二张纸,如果第一张纸数据太多,这种方式也会很耗时间。

好在,现在很多数据库已经认知到这种差异了,有的数据库已经在新版本中对in 和exists的执行计划进行了调优,自动去判断更适合使用哪种方式(虽然不是绝对判断准确)


LINK:https://ask.csdn.net/questions/7665000?answer=53722279
SOURCE:CSDN_ASK
ASK_ID:7663943
ANSWER_ID:53722225
TITLE:关于niceform.ocx的问题
ANSWER:
  1. 先看一下这个软件的目录下有没有NiceForm.ocx这个文件
  2. 确保这个软件是正常安装后再打开的,而不是重装系统后直接用之前安装的
  3. 这种专业软件有时候会提供安装手册,必须按照手册要求的步骤操作才行
  4. 如果上面的都已经排除,可以尝试下面这个方案



  1. 在网上下载一个niceform.ocx 32位版本
  2. 把 niceform.ocx 复制到 c:\Windows\System32 下
  3. 开始-运行 输入 cmd ,确定
  4. 输入 regsvr32 c:\Windows\System32\niceform.ocx 并回车
  5. 提示 DllRegisterServer niceform.ocx succeeded 即表示控件注册成功,之后再尝试打开你的软件

当然,建议还是直接咨询你们学校有经验的学长或者老师要来得快


LINK:https://ask.csdn.net/questions/7663943?answer=53722225
SOURCE:CSDN_ASK
ASK_ID:7664561
ANSWER_ID:53722198
TITLE:查询第一行sign_in等于3和上一行sign_in等于3的(找到第一个出现3的行)
ANSWER:

写sql还是太绕了,而且还不是oracle数据库,给你一个plsql吧


–测试数据
create table test_20220317_a as
with t(dt,sign_in,num) as(
select date‘2022-03-01’,3,‘A’ from dual union all
select date‘2022-02-16’,3,‘A’ from dual union all
select date‘2021-07-19’,3,‘A’ from dual union all
select date‘2021-06-29’,3,‘B’ from dual union all
select date‘2021-04-26’,null,‘A’ from dual union all
select date‘2021-02-23’,3,‘A’ from dual union all
select date‘2021-02-10’,null,‘A’ from dual union all
select date‘2020-06-29’,1,‘A’ from dual union all
select date‘2020-02-16’,3,‘A’ from dual union all
select date‘2019-07-19’,3,‘A’ from dual union all
select date‘2019-06-29’,3,‘A’ from dual union all
select date‘2019-04-26’,null,‘A’ from dual union all
select date‘2019-02-23’,3,‘A’ from dual union all
select date‘2019-02-10’,null,‘A’ from dual union all
select date‘2018-06-29’,1,‘A’ from dual
)
select t.* from t;

–检索数据
declare
l_dt date;
begin
for rec_num in (select distinct num from test_20220317_a) loop –按num分组循环
l_dt:=null; –每个分组都要初始化
for rec in (select * from test_20220317_a where num=rec_num.num order by dt desc) loop –单个分组逐行循环
if l_dt is null then –变量为空时,初始化为最新
l_dt:=rec.dt;
end if;
if nvl(rec.sign_in,0) <>3 then –遇到不是3的,把最新时间清空
l_dt:=null;
end if;
–if l_dt-rec.dt>365 then —365天? 还是yyyy相差1?
if to_char(l_dt,‘yyyy’)-to_char(rec.dt,‘yyyy’)>0 then ----yyyy相差1,则
—下面这条可以改成插表,执行完后再查表即可得结果
dbms_output.put_line(to_char(l_dt,‘yyyy-mm-dd’)||‘,’||to_char(rec.dt,‘yyyy-mm-dd’)||‘,’||rec_num.num );
–找完一个,把最新时间重新初始化
l_dt:=null;
end if;
end loop;
end loop;
end;
/

执行结果


img


LINK:https://ask.csdn.net/questions/7664561?answer=53722198
SOURCE:CSDN_ASK
ASK_ID:7664984
ANSWER_ID:53722185
TITLE:请教个关于db数据加密的问题?
ANSWER:

这个嘛,其实是有方案的,你想想,构成整个软件系统的,除了程序代码以及数据以外,还有什么?
其实就是存储了数据的硬件设备,也就是说,可以让数据只能在这个硬件上被识别出来,哪怕有人把硬盘偷走了,他也没办法读出里面的数据,除非他把整个服务器都偷走,然后你其实也可以加一个bios密码,这样他也没办法进入系统,除非他把bios密码也给破解了。但既然都能做到这种程度了,为何不在机房的安防上下点功夫呢?而且如果服务器硬件损坏,你自己想要还原数据也得绕不少弯。
关于硬件加密,像WINDOWS的 ntfs磁盘自带加密功能,重装系统就无法打开文件了,这就是其中的一种应用。还有,安装windows11要求的TPM2.0芯片,其实也是硬件加密芯片。
至于其他的,你可以顺着硬件加密这个方向去搜搜相关资料了


LINK:https://ask.csdn.net/questions/7664984?answer=53722185
SOURCE:CSDN_ASK
ASK_ID:7664966
ANSWER_ID:53722181
TITLE:CASE 添加 max() 便会报错 能否优化?
ANSWER:

建议先描述一下你的场景,你目前这个sql语法是有问题的,如果用max或者min这样的聚合函数,而且不开窗,而且有分组字段,那么必须要使用group by .
而且就算你这个sql能跑出数据,应该也不是你想要的数据,所以问题点并不在于case when和聚合函数一起用是否会报错,而是应该选择何种方式来实现你需要的场景。
我先猜一下你的需求,你这个数据应该是个考勤打卡的流水记录,先暂时不管是否存在短时间内多次打卡的情况,以及是否有漏打卡的情况,即肯定有一条上班有一条下班,根据你sql的意思,应该是想保留当前查询的所有行,然后加一个字段识别这个人这一天是否存在迟到或者早退的情况,但这个判断的依据又不仅仅只是看本行数据,需要跨行,那么这个时候,理所应当的就要想到开窗函数了。


SELECT
U.USER_NAME,
R.ID,
R.SIGN_ADDRESS,
R.CREATE_TIME,
CASE
WHEN MIN(DATE_FORMAT( R.CREATE_TIME, ‘%H%i’ )) over(partition by U.USER_NAME) > 0830 THEN ‘迟到’
WHEN MAX(DATE_FORMAT( R.CREATE_TIME, ‘%H%i’ )) over(partition by U.USER_NAME) < 1830 THEN ‘早退’
ELSE ‘正常打卡’
END
FROM
T_REMOTE_SIGN_DETAILS R
LEFT JOIN T_USER U ON U.ID = R.USER_ID
LEFT JOIN T_SCHOOL S ON S.ID = U.SCHOOL_ID
WHERE
DATE_FORMAT( R.CREATE_TIME, ‘%Y%M’ ) = DATE_FORMAT( NOW(), ‘%Y%M’ )
AND S.ID = ‘270000000109’

但是,mysql要8.0以上版本才支持,否则你就得写个子查询先把最小最大查出来,再去关联到原数据了


LINK:https://ask.csdn.net/questions/7664966?answer=53722181
SOURCE:CSDN_ASK
ASK_ID:7665002
ANSWER_ID:53722015
TITLE:MySQL十六进制转化不成字符
ANSWER:

控制台界面默认不会进行自动转换,可以用cast手动转换一下


select cast(0x50 as char);

img


LINK:https://ask.csdn.net/questions/7665002?answer=53722015
SOURCE:CSDN_ASK
ASK_ID:7665005
ANSWER_ID:53721921
TITLE:update语句如何将字段值相同的另一字段值相加
ANSWER:

你最后想要的结果是不是下面这样?


ks#ukc
201301330
2013013325

然后,你数据里,一个ks#是肯定只有两行还是会有更多行?如果有更多行的时候,是否会出现多行正数多行负数?这个时候你打算哪个和哪个加?


如果确定只有两行,很好处理,怕的就是你这是个复杂批次库存冲销业务,这是要根据业务逻辑写程序的,一个update实现不了


LINK:https://ask.csdn.net/questions/7665005?answer=53721921
SOURCE:CSDN_ASK
ASK_ID:7664487
ANSWER_ID:53721864
TITLE:EXCEL如何实现多对多调取数据?
ANSWER:

看上去咋这么像透视表的筛选器呢?要达成同样的效果,不是非得用公式吧?
类似下面这样


img


在上面选择条件,下面就会出现对应的数据,是多行多列的


LINK:https://ask.csdn.net/questions/7664487?answer=53721864
SOURCE:CSDN_ASK
ASK_ID:7664785
ANSWER_ID:53721643
TITLE:请问大家mysql数据库创建表时出现Cannot add foreign key constraint报错的原因
ANSWER:

为了方便定位问题,能否说明一下你数据库的版本及配置信息,还有把这段执行的sql以代码块的方式添加到问题里,
另外,在此之前,你还可以进行如下尝试,看看有什么效果,并进行反馈


  1. 尝试换个表名
  2. 尝试修改主键字段的名称
  3. 尝试去掉主键

LINK:https://ask.csdn.net/questions/7664785?answer=53721643
SOURCE:CSDN_ASK
ASK_ID:7664526
ANSWER_ID:53721528
TITLE:SAP HAHA数据库有没有查询表字段属性的sql
ANSWER:

帮你找到了官方文档


img


查 TABLE_COLUMNS 这个视图就行了


LINK:https://ask.csdn.net/questions/7664526?answer=53721528
SOURCE:CSDN_ASK
ASK_ID:7664670
ANSWER_ID:53721503
TITLE:两个或多个项目中重复字段怎么处理?
ANSWER:

先假定你所说的数据是同一个维度的吧,如果不在一个维度就没必要讨论了,肯定是多张表。
一般来说公共基础数据有一份就可以了,但是,这需要结合业务流程来看,同一个公共数据不能在多处同时拥有决定权,因为这样会导致公共数据混乱,这样就只能由一方主导,其他方仅仅只能使用。
然后,关于单据的部分,如果能高度抽象出业务逻辑,这也未尝不可,但这势必会加大设计及开发的难度,未来增加个性化需求也会变得困难,而且容易出现bug,这需要有极佳的架构设计能力才行。不是只看当前有几个字段一样就放到一个表,需要考虑到未来的扩展性,还有如何方便出具本部门或者跨部门的业务报表




都是多年实战经验积累下来的,不同行业甚至不同公司都会有所区别。
很多人都是靠着这玩意吃饭,所以很少有人会留下什么资料,就算留下了什么资料也无法照搬,实际业务情况太过复杂,这已经不是纯技术上的事了。
当你遇到什么问题的时候自然就会想到“当时为什么我不这样设计呢?”,做得多了,就会形成自己的一套经验体系,这个是很难传授出来的,这也是为什么有些架构师有高工资的原因


LINK:https://ask.csdn.net/questions/7664670?answer=53721503
SOURCE:CSDN_ASK
ASK_ID:7664646
ANSWER_ID:53721475
TITLE:百万级别sql server 数据库 sql语句优化
ANSWER:

加个where条件先过滤出需要的数据,其实上次就和你说过了


where JB = ‘油井’ and D.RQ =EOMONTH(D.RQ)

如果sqlserver版本老了没有EOMONTH这个函数的话,可以使用其他的替代方式,比如


dateadd(month, datediff(month, 0, dateadd(month, 1, D.RQ)), -1)

LINK:https://ask.csdn.net/questions/7664646?answer=53721475
SOURCE:CSDN_ASK
ASK_ID:7664599
ANSWER_ID:53721464
TITLE:为什么运行写好的sql语句,运行成功,但是没有表
ANSWER:

你哪里看到运行成功了?下面不是有报错么?说你语法错误,在 "{"这个符号附近。
很明显,你建表的那一段,把"("敲成"{"了


LINK:https://ask.csdn.net/questions/7664599?answer=53721464
SOURCE:CSDN_ASK
ASK_ID:7664569
ANSWER_ID:53721461
TITLE:在连表前where更快还是连表后where呢
ANSWER:

“如果这两种写法结果都一样的情况下”



这个意思是不是指a.a在b.b中都会存在?
如果是的话,为何要用left join呢?直接join不好么?比如


select * from a,b where a.a=b.b and b.c=1

让sql简单一点,oracle的优化器会更容易判断该如何执行更快,反正就只有两个表。
另外就是数据量及索引的问题了,你说a和b之间是一对多,那么a.a上肯定有索引吧,而且大概率是唯一索引,然后b.c作为条件,那么这个索引可以选择b.b和b.c的联合索引或者b.c的单独索引,这个要看数据量和其他的查询场景了。
以过去的经验来看,如果磁盘读写速度快,内存大且效率高,足够让很多个表join起来时,就简单点写,oracle比你想的能做到更多(虽然也有跑偏的时候。。。);但是如果表多且数据量大而且逻辑复杂时,是不能那么粗犷的把所有表都join到一起的,内存可能抗不住,最优的执行计划也难以识别,此时一般是拆分成多个sql阶段,写临时表再来处理,降低内存使用的平均消耗


LINK:https://ask.csdn.net/questions/7664569?answer=53721461
SOURCE:CSDN_ASK
ASK_ID:7664374
ANSWER_ID:53720952
TITLE:关于stata的安装显示无法提取文件
ANSWER:

你下载的是一个压缩文件,先对准你下载的这个文件,鼠标右键,提取(或者解压),到一个文件夹,然后再进入这个文件夹执行安装程序




第二张图是让你填写你购买这个产品的序列号什么的,这个软件不是免费使用的哦


LINK:https://ask.csdn.net/questions/7664374?answer=53720952
SOURCE:CSDN_ASK
ASK_ID:7664419
ANSWER_ID:53720951
TITLE:app迁移数据 微信登录也可以迁移吗 需要具备什么条件
ANSWER:

不同的小程序,用户的openid不一样的,之前注册的时候需要获取到用户唯一信息,比如手机号,然后生成你自己对用户的唯一管理id,
之后迁移的时候,用户登录新APP时,获取他的手机号,和后台数据库匹配,再绑定上新的openid。
也就是说,你的用户管理不应该根据微信提供的openid来,而是应该按你自己生成的id来,在切换app的时候,还可以通过手机号来匹配上用户


有些项目会选择保存用户的微信号,但是微信号是可能为空的,而且微信号还可以修改,所以一般选择使用手机号来进行验证匹配


LINK:https://ask.csdn.net/questions/7664419?answer=53720951
SOURCE:CSDN_ASK
ASK_ID:7664326
ANSWER_ID:53720948
TITLE:前端url请求中 非必填参数如何校验处理?
ANSWER:

建议看下后端是怎么处理的,当你有条件传空时,后端是否能正确返回数据?
如果不能返回,说明这是后端查数据库的问题;
如果返回正确了,那你前端取返回的数据就好了


另外,前端、后端必须要遵从相同的逻辑,比如这玩意到底是可以返回多行还是只能返回一行?




你报表服务器就是后端,必须要确定一下它sql的where条件是怎么写的,有这样两种情况


  1. 如果是不传参数就不拼接对应条件,这个最好处理
  2. 不管传不传参数都会拼接所有条件,那么必须让sql中拼接的条件变成类似下面这个样子
    where 字段=ifnull(参数,字段)




url这一部分的话,其实就是一个字符串拼接,你可以对每个可为空的参数,写个if判断逻辑,当参数不为空时,才把这个参数给拼上去


LINK:https://ask.csdn.net/questions/7664326?answer=53720948
SOURCE:CSDN_ASK
ASK_ID:7664407
ANSWER_ID:53720946
TITLE:Tableau安装不了,如何解决?
ANSWER:

先确认你当前登录的用户是管理员,
然后鼠标右键,使用管理员身份运行。
如果这样还不行的话,可以临时关闭UAC控制,安装完后再还原设置(这点很重要!)。
关闭UAC控制的方法可以参考这篇文章


LINK:https://ask.csdn.net/questions/7664407?answer=53720946
SOURCE:CSDN_ASK
ASK_ID:7664368
ANSWER_ID:53720944
TITLE:mysql少输入一个逗号 但是下一个行已经开始了 怎么添加?!
ANSWER:

sql 命令没有严格的分行,你把这些东西都写到一行也是可以执行的,同理,你多分几行写也不影响。
因为它只认命令结束符 ";" ,只要你在结束之前输入完整了就行


LINK:https://ask.csdn.net/questions/7664368?answer=53720944
SOURCE:CSDN_ASK
ASK_ID:7664311
ANSWER_ID:53720942
TITLE:ssm项目可以将数据库从sqlserver更换为数据库为mysql吗?
ANSWER:

别直接换,建议先搞套测试环境试试看,两个数据库有一些语法不一样的,甚至有些函数名称一样但用法不一样,
更重要的是,两个数据库的数据类型是有区别的,这对你项目里数据类型的定义兼容性也是个很大的考验


LINK:https://ask.csdn.net/questions/7664311?answer=53720942
SOURCE:CSDN_ASK
ASK_ID:7664360
ANSWER_ID:53720932
TITLE:Linux中正则表达式的相关问题
ANSWER:

前2位相同,但第3位和第一位不同,第4位也和第一位不同?
调试正则推荐一个网站


img


从这里可以看到,你后面的"\1"已经不代表第一个分组了,所以错了


至于正确的正则表达式应该是怎样的,你先说下老师的原题是什么吧




我上面的回答已经告诉你错在哪里了,那个中括号里的"\1"已经不是代表第一个分组了,而是代表的字符"1",所以你“1111”没选出来的原因其实是因为你写的这个就是后两位不为"1",如果它来一个"2222"照样会被你这个表达式找出来。至于正确答案,楼下的已经说了,要用"?!“.
另外,如果你老师的原话是说找出"1122"和"aabb”,那你直接找这两个字符串不就好了?她又没说是找形如"aabb"结构的字符串,也没说是否可以字母数字混用,比如"aa11"




如果后面两个字符要一样的话,楼下的答案也会有问题,你用我下面贴的这个应该就没问题了,注意我这里修改了正则匹配模式


cat test_regexp.txt | grep -Pwe ‘^([0-9])<span class=“hljs-number”>1(?!<span class=“hljs-number”>1<span class=“hljs-number”>1)([0-9])<span class=“hljs-number”>2$’

img


下面这个题里写了关于linux的负向先行断言( negative lookahead assertion)



There is no negative lookahead assertion in POSIX extended regular expressions, which is the syntax grep -E activates.



LINK:https://ask.csdn.net/questions/7664360?answer=53720932
SOURCE:CSDN_ASK
ASK_ID:7664255
ANSWER_ID:53720775
TITLE:移动和家亲修改dns无效
ANSWER:

一般情况下,VPN软件连上后,会加载静态路由表,配置指定的ip走哪条路由,但是你这个VPN可能并没有配置全,所以你可以尝试手工添加静态路由 route add


LINK:https://ask.csdn.net/questions/7664255?answer=53720775
SOURCE:CSDN_ASK
ASK_ID:7664241
ANSWER_ID:53720764
TITLE:电脑里老是被自动安装一个叫“影视大全”的软件
ANSWER:

鼠标右键这个图标,打开文件所在位置,把完整的路径发出来,截个图看看里面有些什么文件,并且截一下图标看看


LINK:https://ask.csdn.net/questions/7664241?answer=53720764
SOURCE:CSDN_ASK
ASK_ID:7664116
ANSWER_ID:53720751
TITLE:mysql初学者打不开文件
ANSWER:

那你就点这个 "choose encoding"按钮, 再选择编码呗


LINK:https://ask.csdn.net/questions/7664116?answer=53720751
SOURCE:CSDN_ASK
ASK_ID:7664243
ANSWER_ID:53720724
TITLE:java代码写千万级数据同步
ANSWER:

是一次性操作还是经常要使用的操作?
如果是一次性的,为何不直接用数据库自带的工具导出再导入呢?这样省去各种不必要的中间环节,一次性就搬完了。
如果是要经常使用的操作,每次都全量同步的话,需求是不是不太合理?




是oracle的dblink?网络带宽及稳定性怎么样?
如果网络带宽及稳定性好的话,且两边都是oracle,你这才千万级数据,直接一个ctas就完了,这样的性能瓶颈在网络带宽上


create table xxxx as select * from yyyyy@dblink

如果担心一次性吃不下,就按开户日期范围,分批create成多张表,最后再合并


LINK:https://ask.csdn.net/questions/7664243?answer=53720724
SOURCE:CSDN_ASK
ASK_ID:7664140
ANSWER_ID:53720710
TITLE:SQL中select的简单运用简单运用
ANSWER:

sqlserver中,可以用datediff函数来计算时间差,第一个参数是需要返回值的度量单位,比如年、月、日等,后两个参数就是要计算时间差的时间了。


create table test_20220316_a
(sno VARCHAR(10),sname VARCHAR(10),sex int,mno VARCHAR(10),birdate datetime,memo VARCHAR(10));
insert into test_20220316_a values (‘S001’ ,‘ZS’ ,1 ,‘01’ ,‘2001-10-01 00:00:00’ ,‘2’ )

select sno,sname,sex,mno, datediff(year,birdate,‘2020-03-01 00:00:00’) 年龄,memo
from test_20220316_a a where datediff(year,birdate,‘2020-03-01 00:00:00’) between 18 and 20

img


LINK:https://ask.csdn.net/questions/7664140?answer=53720710
SOURCE:CSDN_ASK
ASK_ID:7664173
ANSWER_ID:53720680
TITLE:一个用户将数据库中的题库信息修改掉,另一个用户访问题库时是已经被修改的
ANSWER:

首先,有个”标准题库表“,这个表里面的数据所有外部用户都无法修改,
然后,还有个”用户题库表“,这个表与标准题库表相比,至少多了一个用户id字段,初始化的时候这张表是空的,
接着,用户访问题库,先检测用户题库表中是否有自己的数据,如果没有,将标准题库中的数据复制到用户题库表中,此时,用户修改的任何东西都只是针对用户题库表中自己的数据。
这样就能满足你想要的效果了


LINK:https://ask.csdn.net/questions/7664173?answer=53720680
SOURCE:CSDN_ASK
ASK_ID:7664225
ANSWER_ID:53720671
TITLE:怎么查询oracle表中,除了最小日期以外的所有数据
ANSWER:

提sql问题的时候,麻烦给一下表结构和数据说明,以及最终需要的数据格式。
根据你当前的描述来看,无非加个where条件了


select * from
where 表.日期>(select min(日期) from 表)



你不是说表里面的最小日期么?为什么还会有个group by 呢?你这group by 以后,就不是唯一的最小日期了,而是分组以后的最小日期,但你问题中并没有明确描述到底是个什么样的场景
我先假定你是想 根据id01分组,每个id01取一条时间最小的数据,那么此时使用开窗函数中的row_number就可以了


select * from (
select a.*,row_number() over(partition by id01 order by report_date) rn from 表 a)
where rn>1

LINK:https://ask.csdn.net/questions/7664225?answer=53720671
SOURCE:CSDN_ASK
ASK_ID:7664010
ANSWER_ID:53720545
TITLE:mysql字符集错误
ANSWER:

你把这个报错提示后面的这个Index.xml文件打开,看看里面有哪些字符集,你设置的字符集只能是在这个文件中有的。
在mysql8中,常用的UTF8字符集全名应该为utf8mb4


LINK:https://ask.csdn.net/questions/7664010?answer=53720545
SOURCE:CSDN_ASK
ASK_ID:7664044
ANSWER_ID:53720471
TITLE:MYSQL 创建多对多表关系时,这两种创建方式有什么区别吗
ANSWER:

外键主要看的是,”A依赖于B“,也就是说,先有B,才能有A,
也就是说,如果B里面没有对应的值,A就不能使用对应的值。
这玩意是有方向性的,你建的这两种方式当然不一样,甚至可以说你下面这种是错误的,怎么可能先有订单才有商品主档信息呢?


LINK:https://ask.csdn.net/questions/7664044?answer=53720471
SOURCE:CSDN_ASK
ASK_ID:7663806
ANSWER_ID:53720426
TITLE:oracle查询出两个表内字段相同但数据量不同的表名字
ANSWER:

这个题目有点歧义,两个表字段相同是指的所有字段名都相同还是只有部分字段名相同?还有字段顺序是否需要考虑?
我先假设你说的是所有字段名都相同且字段顺序也一致的两个表吧,因为部分字段名相同的太多了
然后你也没说你的版本是多少,在不同版本里是可以借用不同的函数来达到同样的效果的,比如下面这个sql在21c版本里可以运行


select owner1,
table_name1,
nvl(x1.num_rows, 0) num_rows1,
owner2,
table_name2,
nvl(x2.num_rows, 0) num_rows2
from (select t1.owner owner1,
t1.table_name table_name1,
t2.owner owner2,
t2.table_name table_name2
from (select a.owner,
a.table_name,
json_objectagg(‘k’,
a.column_name returning varchar2(32767)) c
from dba_tab_cols a
group by a.owner, a.table_name) t1,
(select a.owner,
a.table_name,
json_objectagg(‘k’,
a.column_name returning varchar2(32767)) c
from dba_tab_cols a
group by a.owner, a.table_name) t2
where t1.c = t2.c
and t1.table_name <> t2.table_name) x,
dba_tables x1,
dba_tables x2
where x.owner1 = x1.owner
and x.table_name1 = x1.table_name
and x.owner2 = x2.owner
and x.table_name2 = x2.table_name
and nvl(x1.num_rows, 0) <> nvl(x2.num_rows, 0)

img


其实主要就是两个处理方向,
一种是按字段一个个匹配,用count条件来判断匹配上的行(字段)和两张表各自的行(字段)是否都相等,相等则说明字段一样;
另外一种方式就是上面这个sql这种,将所有字段按顺序拼成一个值,再来判断这个值是否相等即可。
至于行数,这里是可能存在问题的,这个行数和当前实际行数不一定匹配,必须要收集一次统计信息后行数才会更新


LINK:https://ask.csdn.net/questions/7663806?answer=53720426
SOURCE:CSDN_ASK
ASK_ID:7663818
ANSWER_ID:53720339
TITLE:merge into中处理空值问题
ANSWER:

把你的 on里的条件用nvl处理一下


on nvl(a.sample_type,)=nvl(b.TEST_ITEM_TYPE_name,’)

这个与merge into本身并没有关系,null值是不能直接用等于号来判断的


LINK:https://ask.csdn.net/questions/7663818?answer=53720339
SOURCE:CSDN_ASK
ASK_ID:7663541
ANSWER_ID:53720132
TITLE:键值对,相比关系型字段名,是否浪费了空间?
ANSWER:

某张关系型表有3个字段,一个KEY,两个VALUE,
然后转换成键值对,实际上KEY的数量就翻倍了,因为此时KEY除了原本的信息,还要包含字段名,除非你是把两个value合成到一个value里去,比如用json,但这个时候json的字符串也就更长了。
所以key-value的方式,的确是用空间换时间,指哪打哪效率贼快,但其不适合复杂的关系型查询。
两种类型的实际存储结构是有区别的,并不像你看到的那样是个简单的两列或者多列的表格,展示成表格仅仅只是为了方便用户查看


LINK:https://ask.csdn.net/questions/7663541?answer=53720132
SOURCE:CSDN_ASK
ASK_ID:7663644
ANSWER_ID:53720107
TITLE:把Navicat Premium15里面的数据表结构给导入Excel里!!
ANSWER:

你如果想确定字段名是什么,直接查出所有字段再去对比就知道了


select * from information_schema.COLUMNS

比如是否可为空


img


至于查询结果的显示方式,你那个是15版本的Navicat Premium加的”特效“,我使用的是12版本不会进行自动转换,你可以看下软件设置里面是不是有什么针对查询结果显示效果的开关


LINK:https://ask.csdn.net/questions/7663644?answer=53720107
SOURCE:CSDN_ASK
ASK_ID:7663653
ANSWER_ID:53720092
TITLE:mysql 遍历查询部门下的用户数量
ANSWER:

请说明一下mysql的版本,8之前和8之后的写法不一样




测试数据
create table test_20220315_c (id int,name VARCHAR(20),pid int);
insert into test_20220315_c values (1,‘a’,0);
insert into test_20220315_c values (2,‘b’,1);
insert into test_20220315_c values (4,‘c’,1);
insert into test_20220315_c values (5,‘d’,1);
insert into test_20220315_c values (6,‘e’,1);
insert into test_20220315_c values (11,‘f’,5);
insert into test_20220315_c values (12,‘g’,5);
insert into test_20220315_c values (13,‘h’,5);
insert into test_20220315_c values (21,‘i’,11);
insert into test_20220315_c values (22,‘j’,11);

create table test_20220315_d (uid varchar(20),uname varchar(20),did varchar(20),amount int);
insert into test_20220315_d values (‘zhangsan’,‘zs’,‘21’,20);
insert into test_20220315_d values (‘lisi’,‘ls’,‘21,4’,20);

查询sql
select count(uid),sum(amount) from
(SELECT DATA.id FROM(
SELECT
@ids as _ids,
( SELECT @ids := GROUP_CONCAT(id)
FROM test_20220315_c
WHERE FIND_IN_SET(pid, @ids)
) as cids,
@l := @l+1 as level
FROM test_20220315_c,
(SELECT @ids :=5, @l := 0 ) b /* 条件 5 在这里 */
WHERE @ids IS NOT NULL
) id, test_20220315_c DATA
WHERE FIND_IN_SET(DATA.id, _ids)) x,
test_20220315_d d
where FIND_IN_SET(x.id,d.did)

img


以上sql参考自 https://www.oschina.net/question/2402835_2285575


但不确定你人员信息里面的多个部门,是否可能在一个检索分支里?这样的话可能会被统计多次




如果存在一个人在多个检索分支里,那就查员工表,把部门当存在条件,下面这个sql就这个意思,但可以减少括号层数的,你自己看着改改吧


select count(uid),sum(amount) from test_20220315_d d
where exists ( select 1 from
(SELECT DATA.id FROM(
SELECT
@ids as _ids,
( SELECT @ids := GROUP_CONCAT(id)
FROM test_20220315_c
WHERE FIND_IN_SET(pid, @ids)
) as cids,
@l := @l+1 as level
FROM test_20220315_c,
(SELECT @ids :=5, @l := 0 ) b
WHERE @ids IS NOT NULL
) id, test_20220315_c DATA
WHERE FIND_IN_SET(DATA.id, _ids)) x
where FIND_IN_SET(x.id,d.did))

LINK:https://ask.csdn.net/questions/7663653?answer=53720092
SOURCE:CSDN_ASK
ASK_ID:7663690
ANSWER_ID:53720075
TITLE:如何在不用子查询的情况下使用SQL写出
ANSWER:

这个题目没说得太明白,但是看上去好像是拜访表的第二个字段,用逗号分隔了员工编号,有一个逗号时表示拜访了两次,2个逗号表示拜访了3次,因此只需要统计出逗号的个数就行了。
另外,由于存在还有员工没有拜访的情况,因此需要外关联,并且将空值转换成0,
还有,oracle数据库中不建议使用varchar类型,而是应该使用varchar2类型,
这个题中两个表的关联字段类型不一样,关联的时候建议进行类型转换,否则当B表工号出现非纯数字的内容时会报错,就算没报错也影响关联效率,因为它需要隐式地对全表进行一次to_number处理,这个时候显示指定to_char更加可控,而且可以避免报错


select a.*,
nvl(length(acc_id) - length(replace(acc_id, ‘,’)) + 1, 0) 拜访数
from test_20220316_A a, test_20220316_B b
where to_char(a.EMP_NO) = b.EMP_NO(+)

img




根据题主补充信息来看,拜访表里的并不是大家以为的拜访人和被拜访人,拜访表里存的其实是拜访计划,两个字段的含义分别是拜访领队和拜访成员,也就是说,其实是要统计拜访表中,每个人员出现的次数,也就是说,要把逗号里的内容进行拆分,把所有的工号放到一列中去,此时才能用count。
但是这里存在一个问题,不同数据库的转换方式不一样,又要求所有数据库得通用,的确是个难题了,稍等
先给个oracle的



with t as
(select listagg(emp_no||‘,’||acc_id,‘,’) within group(order by 1) a from test_20220316_B),
cte(e,lvl) as (
select substr(a,1,instr(a,‘,’)-1) e , 1 lvl from t
union all
select substr(a,instr(a,‘,’,1,lvl)+1, instr(a,‘,’,1,lvl+1)-instr(a,‘,’,1,lvl)-1) ,lvl+1 from
cte ,t where instr(a,‘,’,1,lvl+1) <>0
)
select a.EMP_NO, a.EMP_NAME, count(e)
from cte, test_20220316_A a
where to_char(a.EMP_NO) = cte.e(+)
group by a.EMP_NO, a.EMP_NAME

img




我知道你们出题人的意思了,考的是like join产生的笛卡尔积,但是这样会存在一点问题,因为不确定是否存在工号长度不一,比如123和1234,两者可能会匹配上,需要做一些特殊处理


select a.emp_no,a.emp_name,count(b.emp_no)
from test_20220316_A a
left join test_20220316_b b
on b.emp_no||‘,’||b.acc_id like ‘%’ || a.EMP_NO || ‘%’
group by a.emp_no,a.emp_name

img


加上分隔符特殊处理,避免歧义


select a.emp_no,a.emp_name,count(b.emp_no)
from test_20220316_A a
left join test_20220316_b b
on ‘,’||b.emp_no||‘,’||b.acc_id||‘,’ like ‘%’||‘,’||a.EMP_NO||‘,’|| ‘%’
group by a.emp_no,a.emp_name

img




出题人给出的答案用了instr函数,如下


SELECT T.EMP_NO,T.EMP_NAME,COUNT(T1.EMP_NO) AS “拜访次数”
FROM A T
LEFT JOIN B T1
ON T.EMP_NO=T1.EMP_NO OR INSTR(T1.ACC_ID,T.EMP_NO)>0
GROUP BY T.EMP_NO,T.EMP_NAME;

INSTR函数获取第二个参数在第一个参数中出现的位置,如果没有出现,那么返回的是0,这里写了大于0 ,其实和我上面写的like差不多一个意思,但这个答案的歧义问题还是得加上标识符,要改成像下面这样才算没有漏洞,因为员工工号只会为数字,加上任意非数字的分隔符能准确识别字符串的截断位置


SELECT T.EMP_NO,T.EMP_NAME,COUNT(T1.EMP_NO) AS “拜访次数”
FROM test_20220316_A T
LEFT JOIN test_20220316_b T1
ON T.EMP_NO=T1.EMP_NO OR INSTR(concat(‘,’,T1.ACC_ID),concat(‘,’,T.EMP_NO))>0
GROUP BY T.EMP_NO,T.EMP_NAME;

LINK:https://ask.csdn.net/questions/7663690?answer=53720075
SOURCE:CSDN_ASK
ASK_ID:7663778
ANSWER_ID:53720047
TITLE:sql 时间区间怎么写 有无能人
ANSWER:

请把你create table 的语句及模拟的insert数据贴出来,并用表格说明最后需要的查询效果
目前根据你问题描述,无法知晓你在问什么东西




大概这样,只需要查一次这张表,where 条件里包含有你需要的数据范围,然后在count里加case when 来进行指定条件的统计


with t(user_id,dt)  as (
select 1,date‘2022-01-01’ from dual union all
select 1,date‘2022-01-02’ from dual union all
select 1,date‘2022-01-16’ from dual
)

select min(dt),
count(distinct case when dt=date‘2022-01-01’+1 then user_id end)/
count(distinct case when dt=date‘2022-01-01’ then user_id end) b,
count(distinct case when dt=date‘2022-01-01’+7 then user_id end)/
count(distinct case when dt=date‘2022-01-01’ then user_id end) c,
count(distinct case when dt=date‘2022-01-01’+15 then user_id end)/
count(distinct case when dt=date‘2022-01-01’ then user_id end) d,
count(distinct case when dt=date‘2022-01-01’+30 then user_id end)/
count(distinct case when dt=date‘2022-01-01’ then user_id end) e from t where dt
between date‘2022-01-01’ and date‘2022-01-01’+30

img


以上是oracle中的语法,其他数据库可能要处理下日期表示和日期计算,应该能看懂吧?


LINK:https://ask.csdn.net/questions/7663778?answer=53720047
SOURCE:CSDN_ASK
ASK_ID:7663801
ANSWER_ID:53720041
TITLE:数据库设置表有中文设置不了
ANSWER:

打开cmd后,输入


chcp 65001

回车,然后再连接mysql,执行带有中文的命令。
主要原因是你当前代码页是ANSI(GBK),而目标是UTF8,
gbk字符集的"学"是 “D1 A7” ,“号” 是 “BA C5” ,
UTF8字符集的中文一般三个字节为一个中文字符,它就识别到了"D1 A7 BA",所以出现了错误


LINK:https://ask.csdn.net/questions/7663801?answer=53720041
SOURCE:CSDN_ASK
ASK_ID:7663376
ANSWER_ID:53719426
TITLE:如何让用户可以读取到阿里oss私有云(内网)的文件
ANSWER:

你打开你的阿里云的控制台,进入oss的页面,看到下面这个画红圈圈的地方,把你链接的域名换了就可以公网访问了,当然前提是你配置了允许无密码访问,或者客户端设置好了验证方式


img


另外,走外网线路访问文件,是要收费的哟,而且是按流量收费


LINK:https://ask.csdn.net/questions/7663376?answer=53719426
SOURCE:CSDN_ASK
ASK_ID:7663418
ANSWER_ID:53719418
TITLE:前几天遇到一个MySQL面试题
ANSWER:

mysql 8.0以上支持开窗函数,可以使用row_number进行分组排序


select t.student_num,t.student_name,t.course_name,t.score from (
select s.student_num,s.student_name,c.course_name,sc.score,
row_number() over (partition by s.student_num,c.course_num order by exam_time desc) rn
from score sc,course c,student s
where sc.course_num=c.course_num and sc.student_num=s.student_num
) t where rn=1

由于你没说是否可能存在缺考的情况,我就没左关联了


LINK:https://ask.csdn.net/questions/7663418?answer=53719418
SOURCE:CSDN_ASK
ASK_ID:7663156
ANSWER_ID:53719409
TITLE:如何通过一条sql语句根据子分类id获取子分类及其所有父分类
ANSWER:
—模拟测试数据
create table test_20220315_c (id int,name VARCHAR(20),pid int);
insert into test_20220315_c values (1,‘a’,0);
insert into test_20220315_c values (2,‘b’,1);
insert into test_20220315_c values (3,‘c’,1);
insert into test_20220315_c values (4,‘d’,3);

–查询sql
SELECT ID.level, DATA.* FROM(
SELECT
@id as _id,
( SELECT @id := pid
FROM test_20220315_c
WHERE id = @id
) as _pid,
@l := @l+1 as level
FROM test_20220315_c,
(SELECT @id := 4, @l := 0 ) b
WHERE @id > 0
) ID, test_20220315_c DATA
WHERE ID._id = DATA.id
ORDER BY level;

img


该方法参考自


LINK:https://ask.csdn.net/questions/7663156?answer=53719409
SOURCE:CSDN_ASK
ASK_ID:7663110
ANSWER_ID:53719400
TITLE:请问mysql这个查询是否开启日志的指令怎么不好使啊
ANSWER:
show global variables like ‘%general%’;

img


我试了5.5、5.6、5.7、8.0版本的mysql,这条命令都是有用的,有个可能性极低的情况,你复制的那个代码和我这个代码不一样


LINK:https://ask.csdn.net/questions/7663110?answer=53719400
SOURCE:CSDN_ASK
ASK_ID:7663125
ANSWER_ID:53719390
TITLE:sql Server2012安装程序支持文件失败
ANSWER:

你本来安装的sql Server是哪个版本,就使用对应版本的sqlsupport.msi,你装的这个2012版本比你当前在用的版本要低,当然就装不上了


LINK:https://ask.csdn.net/questions/7663125?answer=53719390
SOURCE:CSDN_ASK
ASK_ID:7663126
ANSWER_ID:53719389
TITLE:请问pgsql导入格栅数据时出现以下错误怎么办呀?
ANSWER:

你把那一串psql登录命令输入并回车后,程序会要求你输入口令,然后你就把数据库密码输入进去再回车


LINK:https://ask.csdn.net/questions/7663126?answer=53719389
SOURCE:CSDN_ASK
ASK_ID:7663158
ANSWER_ID:53719383
TITLE:请教!我的MySQL一张表字段很多,将近800个,字段类型基本为float,少数为varchar(20),我这样的一张表大概可以存多少条记录
ANSWER:

数据库的表没有行数限制的,但是可能会有单行的长度限制,
能不能存进去,你直接试一下不就好了?又不用花多长时间。
另外,不建议创建字段数过多的表,字段数多说明数据结构设计可能有问题,你之后要用这个表来开发什么东西也会很容易遇到各种不方便


LINK:https://ask.csdn.net/questions/7663158?answer=53719383
SOURCE:CSDN_ASK
ASK_ID:7663373
ANSWER_ID:53719377
TITLE:请问一下pgsql提示no password supplied怎么解决呀?
ANSWER:

这是说你没有输入口令(就是密码)


LINK:https://ask.csdn.net/questions/7663373?answer=53719377
SOURCE:CSDN_ASK
ASK_ID:7662992
ANSWER_ID:53718893
TITLE:DOS命令中验证JAVA的配置环境却是空白
ANSWER:

是JAVA_HOME ,不是JAVA.HOME,
还有PATH要加上去


LINK:https://ask.csdn.net/questions/7662992?answer=53718893
SOURCE:CSDN_ASK
ASK_ID:7662952
ANSWER_ID:53718884
TITLE:sql怎么把修改后表的内容更新到老表里啊 我想把红圈里的这个值更新到另一个表里
ANSWER:

sqlserver中的多表关联更新,可以参考官方文档


选取其中一个例子


UPDATE dbo.Table2   
SET dbo.Table2.ColB = dbo.Table1.ColB
FROM dbo.Table2
INNER JOIN dbo.Table1
ON (dbo.Table2.ColA = dbo.Table1.ColA)

这个例子几乎和你的要求一模一样了,只需要把表名和字段名替换一下就行了




另外,关于多表关联更新,各个数据库虽然都有所区别,但其实有个通用的方法,可以用下面这个sql得到验证


create table test_20220315_a(id int,val VARCHAR(10));
insert into test_20220315_a values (1,null );
insert into test_20220315_a values (2,null );

create table test_20220315_b(id int,val VARCHAR(10));
insert into test_20220315_b values(1,‘a’);
insert into test_20220315_b values(2,‘b’);

update test_20220315_a
set val=(select val from test_20220315_b where test_20220315_a.id=test_20220315_b.id)
where exists (select 1 from test_20220315_b where test_20220315_a.id=test_20220315_b.id)

LINK:https://ask.csdn.net/questions/7662952?answer=53718884
SOURCE:CSDN_ASK
ASK_ID:7662980
ANSWER_ID:53718804
TITLE:linux系统的文件,属主
ANSWER:

文件所有权的拥有者可以对这个文件进行任何操作
比如我有一个文件,那么这个文件当前的属主就是我;然后某天,我把这个文件转让给你,我不要了,那么这个时候文件的属主就是你了。
因此属主和建立者之间并没有绝对关系。


LINK:https://ask.csdn.net/questions/7662980?answer=53718804
SOURCE:CSDN_ASK
ASK_ID:7662957
ANSWER_ID:53718793
TITLE:如何给SQL查询结果加标题?
ANSWER:

sql的查询结果只会是一个表格,表格里包含字段名和对应的值,没有其他东西了,
因此sql是不可能在这个查询结果外面加什么东西,要加也只能加在查询结果里面,
比如字段别名换成你想要的,
或者在当前查询sql前面再union all一行数据,这行数据里放你想要的内容,但是要注意上下的字段类型及字段个数是一致的


LINK:https://ask.csdn.net/questions/7662957?answer=53718793
SOURCE:CSDN_ASK
ASK_ID:7662861
ANSWER_ID:53718674
TITLE:每张表格都需要计算不同项目的比例和和比例的平均数,要处理几百张表格,请问有简便方法吗(关键词-分表)
ANSWER:

你的表是在数据库里?还是excel还是文本?
如果是在数据库里,那么数据库类型是什么?版本是多少?




如果是在excel里,目前较为简单的方式就是使用python来写段代码来处理了,循环读取所有文件,并对每个文件执行相同的操作,但这要求你具有一点基础的pytho开发知识


LINK:https://ask.csdn.net/questions/7662861?answer=53718674
SOURCE:CSDN_ASK
ASK_ID:7662829
ANSWER_ID:53718666
TITLE:plsql数据库中如何批量截取两个字段的值拼接到第三个字段
ANSWER:

你更新的原始字段来自于自己表的的本行,就没表要再去select一次了。
另外,在oracle数据库中,字符串拼接是使用两个管道符 || ,当然也可以使用concat函数,比如下面这个查询


select  bdcdyysdm ,substr(BDCQZH,3,4 )||substr(ysdm,1,1 ) from XS_DYAQ  where ysdm=‘1’

然后你的目的是把这个查询的第二列更新到第1列上去,所以转换成update语句就是下面这样写的


UPDATE XS_DYAQ SET bdcdyysdm =  substr(BDCQZH,3,4 )||substr(ysdm,1,1 )  where ysdm=‘1’

LINK:https://ask.csdn.net/questions/7662829?answer=53718666
SOURCE:CSDN_ASK
ASK_ID:7662795
ANSWER_ID:53718656
TITLE:Oracle中select语句能调用存储过程吗?
ANSWER:

首先,oracle的存储过程没有return,因此不能在select语句里直接使用。
然后,在oracle里有个东西,叫做表函数。
常规的函数只能接在select后面作为一个字段,此时只能针对该行的一个值或者多个值来进行计算,肯定是达不到你想要的效果的,
而且你最终需要输出的数据为多列,因此此时只能使用接在from后面的表函数。
我下面这篇文章最后有个表函数的例子,你可以参考一下,不懂再问


LINK:https://ask.csdn.net/questions/7662795?answer=53718656
SOURCE:CSDN_ASK
ASK_ID:7662757
ANSWER_ID:53718644
TITLE:怎么求出每天的总产量和月累计产量
ANSWER:

首先,你用 substr(prod_time, 1, 8) 这个东西,截出来的是不是长这个样子 ‘20220315’ 的8位年月日?
然后,你有没有思考过,上面这个函数里的第三个参数“8”是代表什么?
再然后,你最终想输出的,是不是’202203’ 这6位?既然前面第3个参数输入8能截8位,那么同理输入6不就能截6位了?


select substr(prod_time, 1, 6) as 月份,
sum(MAT_WT) as 月产量
from
group by substr(prod_time, 1, 6)

另外,你并没有说是否要将日产量和月产量合到一个查询结果里,也没说在一个查询结果中要如何展示,所以我也不展开说了


LINK:https://ask.csdn.net/questions/7662757?answer=53718644
SOURCE:CSDN_ASK
ASK_ID:7662754
ANSWER_ID:53718634
TITLE:有谁知道sql插入语句如何添加fi判断或者case判断吗
ANSWER:

把case when 表达式当成一个值用就OK了,只是要注意你判断的是个啥


insert into users(user_id,address)
values (120,case when 120<100 then ‘小于一百’ when 120=100 then ‘等于100’ else ‘大于100’ end )

img


LINK:https://ask.csdn.net/questions/7662754?answer=53718634
SOURCE:CSDN_ASK
ASK_ID:7662752
ANSWER_ID:53718630
TITLE:oracle正则表达式
ANSWER:

这个不一定非得正则


substr(str,1,instr(str,)-1)

如果要正则的话,就这样


regexp_substr(str,’([^]+)’)

img


LINK:https://ask.csdn.net/questions/7662752?answer=53718630
SOURCE:CSDN_ASK
ASK_ID:7662702
ANSWER_ID:53718628
TITLE:sql题:如何获取分组后,里面的某些指定行的数据。
ANSWER:

如果是mysql 8.0以上,可以用开窗函数row_number进行分组排序


select fid,name,angs,color,ct from (
select f.*,ifnull(s.angs,0) angs,
row_number() over (partition by color order by ifnull(s.angs,0) desc) rn,
count(1) over (partition by color ) ct
from flower f left join shape s on f.fid=s.fid)
where rn=1

LINK:https://ask.csdn.net/questions/7662702?answer=53718628
SOURCE:CSDN_ASK
ASK_ID:7662886
ANSWER_ID:53718623
TITLE:运行结果及报错内容,如何解决?
ANSWER:

第一个是警告,下面这个东西没有设置默认值,


img


可以在启动的时候添加后面的参数来跳过


第二个是报错,初始化的时候发现已经存在data目录了,如果你这个数据库里没有要保留的数据,可以把data目录删了


LINK:https://ask.csdn.net/questions/7662886?answer=53718623
SOURCE:CSDN_ASK
ASK_ID:7662617
ANSWER_ID:53718173
TITLE:电脑文件打不开,如何方式
ANSWER:

pkq是什么文件?


img


都找不到这种文件,没有默认打开方式这不是挺正常的么?
你这个界面只是让你选择一个程序来打开这个文件而已,你以前是用什么程序打开它就选择什么程序


LINK:https://ask.csdn.net/questions/7662617?answer=53718173
SOURCE:CSDN_ASK
ASK_ID:7662607
ANSWER_ID:53718172
TITLE:tomcat安装问题
ANSWER:

windows下查看本机ip用ipconfig命令
linux下查看本机ip用ifconfig命令


话说这tomcat不是你自己配置的端口号么?你在哪台机上配置的就是哪台机的IP,你不知道ip是怎么连上服务器来部署tomcat的?本地部署?虚拟机部署?


LINK:https://ask.csdn.net/questions/7662607?answer=53718172
SOURCE:CSDN_ASK
ASK_ID:7662603
ANSWER_ID:53718139
TITLE:我要怎样才可以跳转到D盘并且可以运行java
ANSWER:

切换到不同盘符至少有3种方式


  1. cd /d d:\javatest

  2. d:
    cd javatest

  3. pushd d:\javatest


如果是全路径,个人习惯用 pushd ,因为不需要输入多余的参数


LINK:https://ask.csdn.net/questions/7662603?answer=53718139
SOURCE:CSDN_ASK
ASK_ID:7662440
ANSWER_ID:53718000
TITLE:将多个没有关联条件的表组成一个表,数据结果为多个表数据的相乘数,请问如何解决
ANSWER:

没有关联条件,结果行数当然是乘积了,这就叫笛卡尔积。
我猜你是想分别统计batch表和out表7天内的行数吧?
不能这么查的,这两个表如果没有关联条件,就只能分别统计,建议left join 后接子查询,统计每天的行数,这个时候用日期来作为on的条件就没问题了,即保证你这3个数据里,日期都具有唯一性


LINK:https://ask.csdn.net/questions/7662440?answer=53718000
SOURCE:CSDN_ASK
ASK_ID:7662428
ANSWER_ID:53717968
TITLE:SQLSEVER 如何输出的值可以满足两列值都不重复(看图说话)
ANSWER:
select distinct sessionid 
from table_3 a
where not exists (select 1 from table_3 b where a.sessionid =b.sessionid and b.path is not null)

一般用上面这个写法就好了,比较好理解,
当然,下面的这个也可以输出相同的结果,代码更短


select a.sessionid  
from table_3
group by a.sessionid
having count(path) =0

有些初学者可能会像下面这样写,不能算错,但某些情况下,查询效率会比较低


select distinct sessionid 
from table_3 a
where sessionid not in (select sessionid from table_3 b where b.path is not null)

LINK:https://ask.csdn.net/questions/7662428?answer=53717968
SOURCE:CSDN_ASK
ASK_ID:7662391
ANSWER_ID:53717946
TITLE:sql语句,查找学号和课程数
ANSWER:
  1. 需要查询的数据都来自于85分以上,这个就是where条件
  2. 然后“两门以上”的“学号”,就需要用到聚合函数,这里直接用count行数就行,当然count(课程号)结果也应该是一样的(没说是否存在课程号为空的垃圾数据)
  3. 对聚合函数的结果再进行过滤,需要使用到having ,

所以,sql长下面这个样子


select 
学号,
count(1) 课程数
from sc
where 成绩>=85
group by 学号
having count(1)>=2

话说这是刚学么?


LINK:https://ask.csdn.net/questions/7662391?answer=53717946
SOURCE:CSDN_ASK
ASK_ID:7662349
ANSWER_ID:53717943
TITLE:sql简单运用简单运用
ANSWER:

补充一下
楼上这个回答可以算正确,因为题目中并没有说特殊情况,比如是否存在某个人没有考试成绩但也要显示结果,按照题目中的输出结果来看,应该是不存在这种情况,因为4个人都有分数。
如果逻辑要严谨一点,应该以学生为主表,去左连接其他表.
而且,如果限定了是查"C语言"的,在实际开发场景中,不可能用这个中文来做查询条件,而是课程有一个下拉框,id绑定名称,当选择对应的名称后,比如"C语言",程序就已经知道了它的id为"C002",此时再去查数据,就不再需要关联课程表了


LINK:https://ask.csdn.net/questions/7662349?answer=53717943
SOURCE:CSDN_ASK
ASK_ID:7662309
ANSWER_ID:53717836
TITLE:r2dbc + postgresql,在@Query里面,如果参数值为null,怎样动态组装sql语句(语言-java)
ANSWER:

不同数据库及不同版本的函数可能会存在一点差异,常见的一般就是用nvl 或者coalesce函数来处理,比如


where coalesce(传入的查询参数,表里的字段)=表里的字段

由于null和空字符串在不同数据库里存在不一样的情况,所以下面这种方式更为通用


where (case when ?=‘’ or ? is null then a.type else ? end) =a.type



这个查询条件,我直接在数据库里测试是没有问题的,传null或者传非null都可以正常输出结果


img


LINK:https://ask.csdn.net/questions/7662309?answer=53717836
SOURCE:CSDN_ASK
ASK_ID:7662308
ANSWER_ID:53717826
TITLE:如何以计算值作为查询条件
ANSWER:

最直观的,比如要查折扣额为10元的


where MarketPrice-SalePrice = 10

或者下面这个也是等价的


where MarketPrice= 10+SalePrice 

如果是要按折扣范围查


where MarketPrice-SalePrice between 1 and 100

表达式既可以作为查询字段,也可以作为条件字段哦




折扣率也是一个道理


where SalePrice/MarketPrice between 0.8 and 0.9

这东西加减乘除随你怎么玩


LINK:https://ask.csdn.net/questions/7662308?answer=53717826
SOURCE:CSDN_ASK
ASK_ID:7662220
ANSWER_ID:53717723
TITLE:查询类似聊天会话列表的一个select语句
ANSWER:
  1. "值是相互的"是什么意思?相等还是不相等?或者说你的意思是对于同一组source和destination ,只保留最近一条记录?是否有方向要求?


  2. 能不能给下这两张表的create table 语句及小部分测试数据?



目前能想到的就是开窗函数分组排序,取每个组里的第一条,但是不确定你分组的标准,A-B和B-A是两组还是一组?另外开窗函数外如果有聚合函数,那么开窗函数内的写法是有点区别的,而且不同的数据库这里的语法也有点区别,所以你最好说明一下数据库版本,并且给出建表sql,方便答题人进行调试




8.0支持开窗函数,所以重点就在你的分组了,根据你补充的描述来看,这个分组是不管顺序的,因此这里需要用到case when 来强制指定顺序,将双方拼成一个字符串,再使用这个字符串进行分组,sql如下,已经包含了你要的count了,count的分组方式和取最新一条的分组方式保持一致


select t.* from  (
SELECT
users.name,users.photo,history_message.payload,history_message.ms,
history_message.message_type, history_message.source,history_message.destination,
history_message.file_path,
count(case when dst_status =3 then 1 end ) over (partition by
case when history_message.source=‘sim001’
then concat(history_message.source,‘,’,history_message.destination)
else concat(history_message.destination,‘,’,history_message.source)
end ) ct,
row_number()over( partition by
case when history_message.source=‘sim001’
then concat(history_message.source,‘,’,history_message.destination)
else concat(history_message.destination,‘,’,history_message.source)
end order by ms desc) rn
FROM users RIGHT JOIN history_message ON users.user_id = history_message.source
or users.user_id = history_message.destination
WHERE (history_message.destination = “sim001” and history_message.dst_status != ‘0’ and users.user_id != ‘sim001’ )
or (history_message.source =“sim001” and history_message.src_status != ‘0’ and users.user_id != ‘sim001’)
) t
where rn=1

LINK:https://ask.csdn.net/questions/7662220?answer=53717723
SOURCE:CSDN_ASK
ASK_ID:7662190
ANSWER_ID:53717698
TITLE:SQL里两个count语句相除怎么除啊
ANSWER:

麻烦给个报错信息?
是不是你分母为0导致除法报错?
另外,你这是要求同一个表里两个字段统计数的比值,其实可以用case when ,只需要查一次这个表就好了


select 
count(case when JFBS = ‘是’ then 1 end ),
count(case when YhName != ‘’ then 1 end )
from T_YhInfo
where JFBS = ‘是’ or YhName != ‘’

LINK:https://ask.csdn.net/questions/7662190?answer=53717698
SOURCE:CSDN_ASK
ASK_ID:7661878
ANSWER_ID:53717597
TITLE:查出源数据库里新增数据办法都有哪些?有哪些开源工具可用或者代码咋写?
ANSWER:

这个要看你具体的业务系统逻辑,尤其是在oracle数据库上。
首先增加序列或者增加时间戳的方式,的确是可行,但是假设存在rac或者存在多事务同时写入,光用序列或者时间戳来取数据是有可能导致数据缺失的。
最稳妥的方法,一般是基于日志来进行同步,比如ogg,插了几条或者更新了几条,都会有日志,然后解析日志在目标端进行相同的执行。
如果不依赖外部工具,那么你需要自己创建一个真正唯一递增的序列,比如下面这种方式


  1. 源表里面有个空字段,所有来自应用的数据都不写入这个字段
  2. 然后创建一个序列,注意加上order,避免rac缓存出现新序列值比之前更小的情况
  3. 创建一个作业,定时将空字段的值更新成这个序列的值,注意,这个作业永远都只能有一个发起方,不能存在并发
  4. 同步数据到目标端的时候,只取这个字段不为空的数据,同步完后保存好这个序列值,下次取数据只取大于这个序列值的

另外,如果数据是可能发生变更的,那么常见的做法是在源表上加个触发器,生成日志表的数据,然后使用日志表关联源表来替代源表的数据源,当然上面提到的序列就不需要在源表增加了,放在日志表中即可


LINK:https://ask.csdn.net/questions/7661878?answer=53717597
SOURCE:CSDN_ASK
ASK_ID:7661947
ANSWER_ID:53717567
TITLE:批量更新9亿条数据,如何优化update?
ANSWER:

首先,这个sql建议再加一个条件,你确定是每一行都要更新?
是否可能存在有部分数据已经满足你的结果了,但你这个更新语句并没有过滤掉那部分数据?或许需要更新的数据并没有那么多?
另外,你那个9亿的表是一直在动态变化还是存在有静态不用的时候?有没有考虑过直接create table as 两表关联来重新建一个表,再把表进行重命名及重建索引?
还有一种方式,关于批量更新,可以把要更新的数据写个游标,然后循环更新,设定批量commit 的行数,比如每更新1000行commit一次,然后这个还可以使用bulk collect




update会占用回滚段,尤其是你这9亿数据一把更新,如果还有索引的话会更慢。但create table as的方式会以数据块的形式直接复制数据。在oracle中如果涉及到大量数据要处理时,用create table as来替代insert /delete/update等操作是很常见的。
但一定要注意剩余表空间的大小、新表上要重新建索引,还有相关失效对象(比如引用了这个表的存储过程等)要重新编译。
反正是一次性执行的sql,当然是直接执行就好,你建完新表后还可以比较一下两边的记录数以及检查数据结果是否满足你要求了,再做后续处理。
但如果是我,我可能会选择循环去update,分批提交的方式,每批更新一点,让它慢慢跑,反正会更新完,而且不用怕中断,加上不等于的条件,已经更新过的就不用再更新了。
因为不确定你程序是什么情况,之后是否还有可能出现这个值要更新,不可能老是去把9亿条数据去重建新表


LINK:https://ask.csdn.net/questions/7661947?answer=53717567
SOURCE:CSDN_ASK
ASK_ID:7661996
ANSWER_ID:53717539
TITLE:php+mysql 输出table 如何横向排列
ANSWER:

最简单的方式的确是像楼上说的那样用case when ,比如


select cid,
max( case when riqi=‘2020’ then rate else 0 end ),
max( case when riqi=‘2019’ then rate else 0 end ),
max( case when riqi=‘2018’ then rate else 0 end )
from table group by cid;

但是这有个缺陷,sql查询时必须固定好有多少列,因此这个sql是无法通过你数据的变化来动态变化列数的,只能先查一次数据,获得可能的值,再动态拼接sql来执行查询。


LINK:https://ask.csdn.net/questions/7661996?answer=53717539
SOURCE:CSDN_ASK
ASK_ID:7662050
ANSWER_ID:53717528
TITLE:请问mysql怎么查询本周未登录的用户
ANSWER:

用 not in 或者 not exists都行,
当然left join 加上is null 也能取出来


LINK:https://ask.csdn.net/questions/7662050?answer=53717528
SOURCE:CSDN_ASK
ASK_ID:7662063
ANSWER_ID:53717525
TITLE:医疗大数据的建设标准?
ANSWER:

这个话题很大哈,
首先,大数据建设往往都不可能一步到位,而是需要根据业务框架及需求分析,逐步将数据进行拆解或合并。
但好在业内应该已经有相关标准了,典型的一种做法就是向其他已经做好的医院学习,来搭建自己医院的模型框架。然后在之后的数据提取中,继续完善模型


LINK:https://ask.csdn.net/questions/7662063?answer=53717525
SOURCE:CSDN_ASK
ASK_ID:7661712
ANSWER_ID:53716813
TITLE:MySQL创表,练习刚开始写就错了
ANSWER:

如果数据库已经存在,再去创建的话,报错提示会是数据库已存在,而不是你第一张图提示的模式目录已存在。
第一张图后面已经用英文提示你要如何操作了,"只能手工处理(比如移动这个模式目录到其他地方)" ,指的就是你要去把这个名称的文件夹移走


LINK:https://ask.csdn.net/questions/7661712?answer=53716813
SOURCE:CSDN_ASK
ASK_ID:7661708
ANSWER_ID:53716803
TITLE:希望排行榜上的玩家不会减少
ANSWER:

封号依据是什么?能不能在取排行TOP10之前把封号的数据都过滤掉再来排序?




果然,就怕你这个逻辑是排序后再封号,因为这就会涉及到要做一个循环处理,而且一开始必须全部把序号排了
全排序-取前10-循环(封号n人-补上n人)
当循环里,封号人数为0时跳出循环,或者无法补足10人时跳出循环(极端情况,全部排完还不够10人)




另外,为了节省开销,可以根据多次真实数据来计算一个概率,比如前30人完成TOP10的概率、前100人完成TOP10的概率…
然后得到一个最佳的区间,以后就优先用这个区间的来算,再增加一次检查,检查发现不对,再使用次佳的区间来算,以次类推,这样可以减少循环的次数


LINK:https://ask.csdn.net/questions/7661708?answer=53716803
SOURCE:CSDN_ASK
ASK_ID:7661698
ANSWER_ID:53716789
TITLE:调用函数去除列表中字符串的非字母
ANSWER:

字符串对象的replace操作,是返回一个替换后的结果,而不是对原字符串对象进行修改,因此你需要把替换后的结果赋值给某个变量才行


LINK:https://ask.csdn.net/questions/7661698?answer=53716789
SOURCE:CSDN_ASK
ASK_ID:7661305
ANSWER_ID:53716409
TITLE:为什么将含中文的URL复制到pycharm里面的就乱码了
ANSWER:

关于这个,会牵扯到很久远的历史,最开始的字符输入或者传输是完全没有中文的,只有一些字母和符号,因此建立相关的通讯标准中也不存在中文。
中文不在ascii码中,ascii码是一个字节就能表示一个字符,而中文至少要两个字节才能表示一个字符,为了保证以文本形式来传输数据的完整性,只能获取中文对应二进制数据的十六进制表现形式,此时才可以全部用ascii码中支持的字符来表示。
像你这个例子,其实是中文用UTF8编码,3个字节表示一个汉字得到的结果,比如E6B996就是"湖"UTF8编码十六进制值


LINK:https://ask.csdn.net/questions/7661305?answer=53716409
SOURCE:CSDN_ASK
ASK_ID:7661128
ANSWER_ID:53716311
TITLE:mysql能否按照数值的相似度进行检索呢
ANSWER:

mysql没有自带的相似度计算函数,但是可以添加外部函数或者直接写算法来创建自定义函数来实现你需要的效果
相关文章参考



LINK:https://ask.csdn.net/questions/7661128?answer=53716311
SOURCE:CSDN_ASK
ASK_ID:7661002
ANSWER_ID:53715997
TITLE:提示 cannot import name ‘version’ from partially initialized module ‘h5py’ 是怎么了
ANSWER:

这与h5py这个模块本身没有任何关系,这只是因为你循环导入了,



most likely due to a circular import



可以参考一下这篇文章


LINK:https://ask.csdn.net/questions/7661002?answer=53715997
SOURCE:CSDN_ASK
ASK_ID:7660990
ANSWER_ID:53715995
TITLE:请问人工智能和大数据哪个专业好。。自由职业的话哪个好。。
ANSWER:

人工智能和大数据,其实不能称之为职业,这只是两种工具而已,因此你的自由职业也不可能是这两个,就算你学会使用这两种工具了,没有落实到实际的行业中去的话也是白学。
建议挑一个你感兴趣的行业,去深入了解这个行业,然后使用你学到的东西去尝试解决这个行业中已知或者未知的问题。等真正做出产品后,稍加宣传,就可能会有人找上门。当然,真正能靠自己做出东西的人是少之又少。




很多情况下,这两个工具会一起使用来解决某些特定场景,比如人工智能需要大数据工具来提供大量的数据作为样本,然后人工智能计算出来的东西又可以补充回大数据。
能做困难级算法题可以表示你具有一定的基础能力了,可以尝试去做一些实际的应用了。
很多实际应用的复杂程度远超算法题,要考虑的因子太多了,而且很多因子都是不可控的


LINK:https://ask.csdn.net/questions/7660990?answer=53715995
SOURCE:CSDN_ASK
ASK_ID:7660927
ANSWER_ID:53715932
TITLE:问题是这个“查找尤金•奧尼爾EUGENE O’NEILL得獎的所有細節”,不明白为什么答案的O和‘之间要加|
ANSWER:

楼上说得对,我再补充一下。
你这个sql里存在三个单引号,按照从左至右的顺序来读取这个sql,会发现这个sql在第二个单引号那里被断开了,构成的是一个sql后面直接接上"NEILL’"这玩意,这是不符合sql语法的,会报语法错误,因此需要对中间那个单引号做某种处理让解析器不认为它是字符串标识符。
在很多程序语言中, 斜杠都是作为转义符存在的,但是各种数据库的sql关于转义单引号的方式其实并不一样,如果你这个题是针对某个数据库的,那么这个答案可能是正确的。但如果没指定数据库,那么我也可以说这个答案不对,因为在某些数据库中,比如oracle数据库,转义单引号的方式是再加一个单引号,或者使用q标记来全局转义单引号


img


img


img


LINK:https://ask.csdn.net/questions/7660927?answer=53715932
SOURCE:CSDN_ASK
ASK_ID:7660906
ANSWER_ID:53715926
TITLE:关于聚合函数的查询问题
ANSWER:

你select 字段的顺序,会决定查询结果字段的输出顺序。在sql查询中,字段顺序本身其实也是一个要求
他要求你的字段顺序是 :



性别、平均分、人数



但你输出的字段顺序是:



性别、人数、平均分



这当然不对了


LINK:https://ask.csdn.net/questions/7660906?answer=53715926
SOURCE:CSDN_ASK
ASK_ID:7660896
ANSWER_ID:53715868
TITLE:请问大家mysql为什么delete会没有办法删除空行呀
ANSWER:

因为你条件写错了,null不能用等于号判断,只能用is


delete from 表名 where id is null;

LINK:https://ask.csdn.net/questions/7660896?answer=53715868
SOURCE:CSDN_ASK
ASK_ID:7660877
ANSWER_ID:53715857
TITLE:利用SQL命令创建数据库失败
ANSWER:

因为你这个命令里,主文件和日志文件重名了,建议仔细阅读官方文档,看看你的代码有什么区别


LINK:https://ask.csdn.net/questions/7660877?answer=53715857
SOURCE:CSDN_ASK
ASK_ID:7660859
ANSWER_ID:53715838
TITLE:电脑打不开一直蓝屏 重启也是这样
ANSWER:

傻了,竟然有这种坑人教程,把整个software都删了,这个里面是电脑里几乎所有软件的配置,包括操作系统自带的后台服务软件。。。
你还是重装系统吧,因为这种情况下,就算你通过各种方式进入了桌面,会发现动不动就报错,各种软件都无法正常使用




我去找了下你图里这个百度知道的链接,下面一堆评论都在骂人。。。


LINK:https://ask.csdn.net/questions/7660859?answer=53715838
SOURCE:CSDN_ASK
ASK_ID:7660804
ANSWER_ID:53715833
TITLE:mySql截取逗号,的问题
ANSWER:

用 REGEXP_INSTR 函数找到第二个逗号出现的位置,再使用substr进行截取,如下


select substr(t.str,REGEXP_INSTR (t.str,‘,’,1,2)+1) from 
(select ‘1,2,3,4,5’ str
union all
select ‘1,2,3’ str) t

img


LINK:https://ask.csdn.net/questions/7660804?answer=53715833
SOURCE:CSDN_ASK
ASK_ID:7660791
ANSWER_ID:53715829
TITLE:银行1104报表:用EAST 数据做1104报表,能否覆盖全部报表数据需求?
ANSWER:

不能全部覆盖,具体可参考下面这篇文章


LINK:https://ask.csdn.net/questions/7660791?answer=53715829
SOURCE:CSDN_ASK
ASK_ID:7660784
ANSWER_ID:53715825
TITLE:sql查询同名同姓学生名单
ANSWER:

你子查询打算怎么统计?你又不知道最多会有多少个同名同性的人,如果有100个你不是得嵌套100层?
分组统计行数当然用"count",就算有其他写法也避不开"聚合",一聚合就会涉及到group by 及聚合函数 。
这个写法是最最基本的sql之一了,如果连这个都不理解,就不要想着其他写法了,建议规规矩矩老老实实先把基本语法搞懂。


LINK:https://ask.csdn.net/questions/7660784?answer=53715825
SOURCE:CSDN_ASK
ASK_ID:7660699
ANSWER_ID:53715749
TITLE:查询字母数字组合的id时(例如a01),显示报错“Unknown column in where clause”,请问是怎么回事?
ANSWER:

注意一下下面两个sql的区别


select * from student  where id = ‘abc123’;
select * from student where id = abc123 ;

上面两个sql中,第2条是有问题的,sql里的字符串,需要使用单引号包裹,否则就会被认为是列名或参数名什么的,而非具体的值。
所以你把你拼接的sql稍微再改下就行了


LINK:https://ask.csdn.net/questions/7660699?answer=53715749
SOURCE:CSDN_ASK
ASK_ID:7660664
ANSWER_ID:53715621
TITLE:数据库sql语句LIkE的用法
ANSWER:

这个其实就是通配符转义,因为百分号和下划线都是通配符,如果想找的就是百分号或者下划线时,需要使用escape来识别转义的字符
给你一篇文章


LINK:https://ask.csdn.net/questions/7660664?answer=53715621
SOURCE:CSDN_ASK
ASK_ID:7660665
ANSWER_ID:53715613
TITLE:MySQL能做前端么?
ANSWER:

mysql本身并不具有提供前端服务的功能,更别谈什么设计友好界面了。
oracle倒是有类似的web服务功能,比如APEX,支持自定义开发前端页面,但是这玩意目前用的人太少了,国内的教程也比较少。
如果你有"不用再学其他的语言"的这种想法,那你就不适合做开发。这一行要做得稍微像样点,哪个不是会多种开发语言?mysql数据库的使用是基本中的基本了。
如果你不想深入开发,但是又想做个东西出来,可以尝试一些低代码平台,使用可视化交互工具来制作你的程序;或者使用一些和你想要的界面类似的开发模板,稍微改改来适配你的需求


LINK:https://ask.csdn.net/questions/7660665?answer=53715613
SOURCE:CSDN_ASK
ASK_ID:7660343
ANSWER_ID:53715552
TITLE:sql语句删除字段里两个字符串里中间的字符
ANSWER:

建议你先举个例子,这个"模糊内容"不是很理解。
如果是要去掉 “你好啊” 这样的字符串,在sql里面直接用replace不就好了,比如


select replace(img,‘“你好啊”’) from body

如果是,要对双引号中包含有特定字符串的全部去掉,就要使用正则了,比如


select regexp_replace(‘ffoas“神特么你好啊?”sdf“不好啊”od’,‘“[&#34;</span>]&#43;你好啊[”]+"’,‘’)

img




如果是去除某个字段里,所有的双引号中间的文字


select regexp_replace(‘ffoas"神特么你好啊?“sdf”不好啊"od’,‘“[^”]+"’,‘’)

img


LINK:https://ask.csdn.net/questions/7660343?answer=53715552
SOURCE:CSDN_ASK
ASK_ID:7660347
ANSWER_ID:53715537
TITLE:python去掉字典中value的单引号
ANSWER:
import json
mydict={‘userid’:“zhang’san”,‘username’:‘张三’,‘deptid’:‘5’}
print(json.loads(json.dumps(mydict).replace(“'”,“”)))

img


LINK:https://ask.csdn.net/questions/7660347?answer=53715537
SOURCE:CSDN_ASK
ASK_ID:7660404
ANSWER_ID:53715522
TITLE:Mysql如何一次添加100条数据
ANSWER:

这么个简单的东西没必要还写个存储过程用循环去插,用下面这个就行了,原理是借助一张系统表的数值列,但是它上限是700


insert into g_order(g_name,price,u_id,create_time)
select ‘新用户优惠券’,‘158’,CONCAT(‘’,h.help_topic_id+1),‘2022-03-12 10:00:00’
from mysql.help_topic h where h.help_topic_id<200;

另外,你使用mysql命令行工具创建存储过程时,需要注意修改结束符定义,否则它识别到分号就以为命令完了,像你那段代码应该改成下面这样再去执行


delimiter $$

CREATE PROCEDURE loop_insert3(IN i INT)
BEGIN
WHILE i <= 200 DO
INSERT INTO g_order(g_name,price,u_id,create_time)
VALUES (‘新用户优惠券’,‘158’,CONCAT(‘’,i),‘2022-03-12 10:00:00’);
SET i=i+1;
END WHILE;
END$$


delimiter ;

CALL loop_insert3(1);

LINK:https://ask.csdn.net/questions/7660404?answer=53715522
SOURCE:CSDN_ASK
ASK_ID:7660467
ANSWER_ID:53715509
TITLE:求和问题1111111111111111111111(好像有点循环的意思)
ANSWER:

用的是什么数据库?还有数据库版本是多少?
另外,为什么前面都是累加,反而10D以上又不累加了?




为什么你的case when 不能显示0-5?既然可以3-5那么没理由不能0-5,除非你限制了where条件,建议你先把原结构放出来,可能更容易处理,否则就得像下面这个sql一样要去解析你拼出来的这个字符串了


with t as 
(
select 2 月份,‘0-3D’ 上架交付 ,1 计数,10 入库数量 union all
select 2 月份,‘10D以上’ 上架交付 ,1 计数,10 入库数量 union all
select 2 月份,‘3-5D’ 上架交付 ,1 计数,10 入库数量 union all
select 2 月份,‘5-7D’ 上架交付 ,1 计数,10 入库数量 union all
select 2 月份,‘7-10D’ 上架交付 ,1 计数,10 入库数量
)
SELECT t.*,
case 上架交付 when ‘10D以上’ then 计数 else sum(计数) over(partition by 月份 order by
case 上架交付
when ‘0-3D’ THEN 1
when ‘3-5D’ THEN 2
when ‘5-7D’ THEN 3
when ‘7-10D’ THEN 4
when ‘10D以上’ THEN 5
END
) end 累加计数 FROM t

img




对于某一行要进行重复聚合,要么查多次来union all,要么在不同的字段来case when 后再做一次行列转换


select 月份,上架交付,次数 from 
(select 月份,
count(case
when 上架时效<=3 then 1 end) a,
count(case
WHEN 上架时效<=5 then 1 end) b,
count(case
when 上架时效<=7 then 1 end) c,
count(case
when 上架时效<=10 then 1 end) d,
count(case
when 上架时效>10 then 1 end) e
from (select
month(审核时间) 月份,
采购单号,
(UNIX_TIMESTAMP(上架时间) - UNIX_TIMESTAMP(审核时间))/60/60/24 上架时效,
入库数量
from
2月交付率数据源) t
group by 月份) t1
cross join lateral (
select a, ‘0-3D’ union all
select b, ‘0-5D’ union all
select c, ‘0-7D’ union all
select d, ‘0-10D’ union all
select e, ‘10D以上’
) as x(次数, 上架交付)

img


LINK:https://ask.csdn.net/questions/7660467?answer=53715509
SOURCE:CSDN_ASK
ASK_ID:7660330
ANSWER_ID:53715127
TITLE:【满意秒结】mysql语句问题,以下语句怎么改成mysql?
ANSWER:

mysql中的定位字符串位置的函数叫做"instr",语法为 instr(字段 ,‘要查找的字符串’)


img


另外,mysql里也没有 “len”,对应的函数为 “length”
把这两个函数替换后,就像下面这样


where left(字段,instr(字段,)-1) like xxx –’-‘左边的
and right(字段,length(字段)-instr(字段,
’)) like xxx –'-'右边的

LINK:https://ask.csdn.net/questions/7660330?answer=53715127
SOURCE:CSDN_ASK
ASK_ID:7660302
ANSWER_ID:53715124
TITLE:oracle求后七日数据
ANSWER:

你这又犯了和前一题一样的错误, and 和 or 放在一个层级了,所有的and 就会都变成 or ,要记得加括号啊。
另外,oracle的日期加减不是你这么写的:
如果你这个字段类型是个date,那么可以直接把这个值加7,就是7天后了;
如果你这个字段类型是个varchar2,那么可以转成date类型后再加7,比如 to_date(字段名,'yyyy-mm-dd')+7
如果要把date再转回varchar2,使用to_char函数,比如 to_char(date类型字段,'yyyy-mm-dd')


LINK:https://ask.csdn.net/questions/7660302?answer=53715124
SOURCE:CSDN_ASK
ASK_ID:7660261
ANSWER_ID:53715122
TITLE:insert用法,进行修改和删除
ANSWER:

insert命令本身,肯定只有插入;delete命令本身,肯定也只有删除。
但是如果你在要操作的表上创建了触发器,监控insert动作,一旦发现就执行delete,这也不是不可以。
另外,还有一种sql语法叫做merge into ,支持根据是否匹配到数据来执行对应的插入、删除、更新操作


LINK:https://ask.csdn.net/questions/7660261?answer=53715122
SOURCE:CSDN_ASK
ASK_ID:7660225
ANSWER_ID:53715045
TITLE:这个mysql查询速度怎么样啊
ANSWER:

评价关系型数据的性能,小数据量的单表查询根本没有什么好比的,因为别人看的都是大表的读写、多表关联的效率、索引命中率等较为复杂的场景。
如果你只用查这个简单的数据的话,这个速度绝对够用了,至于其他场景,等你后面开发了再看吧


LINK:https://ask.csdn.net/questions/7660225?answer=53715045
SOURCE:CSDN_ASK
ASK_ID:7660255
ANSWER_ID:53715036
TITLE:oracle 相同数据,count统计为1
ANSWER:
  1. 你and 和 or 在一层,就都变成or了,要加括号


    select distinct ID01 as type from QRQC_TRACK_REPORT 
    where type=‘APW’ and (ZT is null or ZT=‘唤醒’)

  2. count里面是可以套distinct 的


    select count(distinct ID01) from QRQC_TRACK_REPORT 
    where type=‘APW’ and (ZT is null or ZT=‘唤醒’)


LINK:https://ask.csdn.net/questions/7660255?answer=53715036
SOURCE:CSDN_ASK
ASK_ID:7660194
ANSWER_ID:53714959
TITLE:windows server2019装完系统怎么重启进不了系统
ANSWER:

点继续,这个页面没有任何报错信息,正常选择高级启动,也可以看到这个界面


LINK:https://ask.csdn.net/questions/7660194?answer=53714959
SOURCE:CSDN_ASK
ASK_ID:7660177
ANSWER_ID:53714942
TITLE:sql语句无法识别,怎么解决啊?
ANSWER:

你表里面是"passsword" ,但你sql里写的是 "password" ,这两个不一样,当然会报错了,如果你看不出差别,就一个一个字母去比较


LINK:https://ask.csdn.net/questions/7660177?answer=53714942
SOURCE:CSDN_ASK
ASK_ID:7660039
ANSWER_ID:53714873
TITLE:怎么在表格添加三组数据
ANSWER:

你插入时有3个值,但你表里有5个字段,数据库不知道你想把这3个值分别插到哪个字段,所以你需要指定一下插哪几个字段,比如下面这样


insert into topic(id,title,intro) values (1, ‘专题’,‘name’); 

LINK:https://ask.csdn.net/questions/7660039?answer=53714873
SOURCE:CSDN_ASK
ASK_ID:7659955
ANSWER_ID:53714691
TITLE:insert 加 where条件
ANSWER:
  1. 用merge into 语句,可以自行选择匹配上或者没匹配上时分别执行什么操作,比如匹配上时更新,没匹配上时插入;
  2. 或者在插入时加一个存在条件
    INSERT INTO T1(a,b,c) 
    select ‘1’,‘2’,‘3’ from dual where not exists
    (select 1 from t1 where t1.a=1 and t1.b=2)


LINK:https://ask.csdn.net/questions/7659955?answer=53714691
SOURCE:CSDN_ASK
ASK_ID:7659975
ANSWER_ID:53714683
TITLE:sql怎么获取连续最大id?
ANSWER:

先说下你的数据库类型以及数据库版本


  1. 最基本的做法,就是左关联自己,关联条件为左边id加1等于右边id,当右边id为空时,说明左边id已达最大;
  2. 如果是oracle,可以使用模式匹配sql
  3. 如果是支持开窗函数的数据库,可以使用lead来获取下一行,并和本行做差,相差不为1时说明id已达最大

LINK:https://ask.csdn.net/questions/7659975?answer=53714683
SOURCE:CSDN_ASK
ASK_ID:7659890
ANSWER_ID:53714681
TITLE:SQL SERVER 里面 怎么取出特定的字符
ANSWER:

sqlserver支持with递归,可以在查询中实现类似循环的效果;
另外,你这种需求一般是使用正则截取来处理,但是sqlserver里没有正则函数,所以可以通过新建一个自定义函数来实现正则截取的效果


LINK:https://ask.csdn.net/questions/7659890?answer=53714681
SOURCE:CSDN_ASK
ASK_ID:7659880
ANSWER_ID:53714582
TITLE:java.sql.SQLSyntaxErrorException: ORA-01776: 无法通过联接视图修改多个基表
ANSWER:

如果你的视图里是基于多个表join出来的数据,那么这个视图是无法进行update操作的,老老实实去一张一张表更新吧


LINK:https://ask.csdn.net/questions/7659880?answer=53714582
SOURCE:CSDN_ASK
ASK_ID:7659610
ANSWER_ID:53714463
TITLE:提问mysql求年预算问题
ANSWER:

把表结构贴出来一下,并且给一点样本数据,否则无法进行分析


LINK:https://ask.csdn.net/questions/7659610?answer=53714463
SOURCE:CSDN_ASK
ASK_ID:7659616
ANSWER_ID:53714458
TITLE:datediff函数问题
ANSWER:

“jsonb_extract_path_text” 这个函数是postgresql的,sqlserver里面没有.
datediff这个函数在原生的postgresql里也没有,所以你用的数据库应该是某个基于postgresql的改版,或者是原生postgresql打上了一个叫datediff的函数,而且极有可能是为了兼容mysql的datediff函数,所以它应该满足mysql中datediff函数的语法,即只需要传入两个日期获得天数差异。
你可以执行一下下面这个sql,看看到底是个啥数据库


select version();

LINK:https://ask.csdn.net/questions/7659616?answer=53714458
SOURCE:CSDN_ASK
ASK_ID:7659794
ANSWER_ID:53714447
TITLE:一张菜单表,父菜单和子菜单都在这个表,有一个pid,查询所有菜单的时候怎么能一起把每个子菜单的父菜单都查出来
ANSWER:

咋一看以为需要递归,但仔细一看,你只需要展现当前层级和父层级两个,不需要找祖父层级,那么使用简单的自关联即可


select a.tm_id,a.tm_name,b.tm_id,b.tm_name 
from t a left join t b on a.pid=b.tm_id

当然,如果你需要找到当前层级往上的所有层级,mysql8.0中可以使用with递归sql,写法也不复杂


LINK:https://ask.csdn.net/questions/7659794?answer=53714447
SOURCE:CSDN_ASK
ASK_ID:7659797
ANSWER_ID:53714433
TITLE:oracle启用密码复杂度后现有的用户会强制要求修改密码吗?
ANSWER:

你可以再设置一个密码有效期,只要一登录就会提示密码过期了,然后用户就必须改了


LINK:https://ask.csdn.net/questions/7659797?answer=53714433
SOURCE:CSDN_ASK
ASK_ID:7659686
ANSWER_ID:53714381
TITLE:数据库插入语句无反应,报出
ANSWER:

你直接点运行,它是从第一行开始运行,你第一行是建表,这个表已经存在了,它当然就报错了。你要选中你要执行的语句,再点运行


LINK:https://ask.csdn.net/questions/7659686?answer=53714381
SOURCE:CSDN_ASK
ASK_ID:7659704
ANSWER_ID:53714376
TITLE:SQLSERVER 某个表更新完数据后向另外一张表插入更新之后的数据,表结构相同,且数据量庞大,50W条。
ANSWER:

你如果改成一条一条处理的话,估计会更慢,比较合适的方法是,你不要对所有50w都更新成0,而是使用循环批量更新,
每次只更新其中的一部分,比如说1000条,然后根据flag=0的这个条件把这1000条数据插过去,打上已插入完成的标记,然后再去更新1000条flag=0,一直循环,直到没有需要更新的数据了,就完成了


LINK:https://ask.csdn.net/questions/7659704?answer=53714376
SOURCE:CSDN_ASK
ASK_ID:7659752
ANSWER_ID:53714367
TITLE:pgsql正则表达式匹配数字问题
ANSWER:

先说一下你正则匹配是想实现什么效果?把10替换成别的东西?截取出10?还是只看是否包含?
如果只是为了确认字符串是否满足这个条件 直接一个like加not like就完事了


where 字段 like ‘%10%’ and 字段 not like ‘%110%’;

如果是要把"10"替换掉,比如把"10"替换成"YY"


select regexp_replace(‘12345110678910987654110456789’,‘([^1])(10)’,‘\1YY’)

img


LINK:https://ask.csdn.net/questions/7659752?answer=53714367
SOURCE:CSDN_ASK
ASK_ID:7659662
ANSWER_ID:53714231
TITLE:怎么写一条sql语句查询出一个字段下不同情况的占比
ANSWER:

先说明下数据库类型及版本,不同的数据库可以使用的函数有区别,
另外,你最好说明一下你的目标格式是怎样的




不直接上代码的原因是你提供的信息不全,
其实压根就不需要写得那么长,通用的,按 (除以10取个整) 来进行分组count就完了,


select count(1) 统计数,
floor(a/10) 分组
from t group by floor(a/10)

img


如果需要调整截断点以及输出格式


select count(1) 统计数,
concat(floor((a+1)/10)10+1,‘-’,floor((a+1)/10)10,‘%’)
分组
from t group by concat(floor((a+1)/10)10+1,‘-’,floor((a+1)/10)10,‘%’)

img


如果是oracle,还可以用更高级的WIDTH_BUCKET函数

img


在hive里或者其他数据库里甚至还有更多方案,以后提问sql一定要记得说清楚自己的数据库以及版本


LINK:https://ask.csdn.net/questions/7659662?answer=53714231
SOURCE:CSDN_ASK
ASK_ID:7659483
ANSWER_ID:53713788
TITLE:SQL的左外连接和右外连接
ANSWER:

我查了下,两个输出是一模一样的,只是顺序有区别而已

img


你不对的原因,是你的sql中间多了一个分号,导致sql截断了,后面的where条件没有生效


LINK:https://ask.csdn.net/questions/7659483?answer=53713788
SOURCE:CSDN_ASK
ASK_ID:7659456
ANSWER_ID:53713762
TITLE:诡异的ora01861 文字与格式字符串不匹配
ANSWER:

如果要确认视图的字段类型,可以查all_tab_cols视图


select * from all_tab_cols t where t.table_name=‘视图名称’

如果确认这个字段是date类型,那么你上面写的这两个sql都没问题,这个时候,还有两个地方可能有问题


  1. java拼接sql的时候,拼出来的不是这个样子,只是你以为是这个样子
  2. 视图本身有问题,oracle的视图是不会进行完整的数据校验的,可能视图中部分数据格式不对,导致无法使用统一的方式进行转换,而通过不同客户端查询的时候,可能扫描到了不同的数据块,就会出现同一个sql一边报错一边不报错的情况

LINK:https://ask.csdn.net/questions/7659456?answer=53713762
SOURCE:CSDN_ASK
ASK_ID:7659067
ANSWER_ID:53713744
TITLE:oracle断号边界查询问题
ANSWER:

正好刚刚在另一个问题里写了个类似的,改了一下


with t(pwlock,status,teller_no,num_prefix) as (
select 2,1,222222,‘YY’ from dual union all
select 3,1,222222,‘YY’ from dual union all
select 4,1,222222,‘YY’ from dual union all
select 5,0,222222,‘YY’ from dual union all
select 5,0,222222,‘WW’ from dual union all
select 6,0,222222,‘WW’ from dual union all
select 7,0,222222,‘WW’ from dual union all
select 8,0,222222,‘YY’ from dual union all
select 8,0,222222,‘WW’ from dual union all
select 9,0,222222,‘YY’ from dual union all
select 10,0,222222,‘YY’ from dual union all
select 1,0,333333,‘WW’ from dual union all
select 2,0,333333,‘WW’ from dual union all
select 3,0,333333,‘WW’ from dual union all
select 4,0,333333,‘WW’ from dual union all
select 9,0,333333,‘WW’ from dual union all
select 10,0,333333,‘WW’ from dual union all
select 1,1,444444,‘YY’ from dual union all
select 6,0,444444,‘YY’ from dual union all
select 7,0,444444,‘YY’ from dual )
,T2 AS (
select T.,ROW_NUMBER() OVER(PARTITION BY teller_no,num_prefix ORDER BY PWLOCK) RN from T
),
T3(pwlock,status,teller_no,num_prefix) AS (
SELECT pwlock,status,teller_no,num_prefix FROM T2 WHERE T2.RN=1
UNION ALL
SELECT T3.pwlock+1,NVL(T2.status,1),T3.teller_no,T3.num_prefix FROM T3 LEFT JOIN T2 ON
T3.teller_no=T2.teller_no AND T3.num_prefix=T2.num_prefix AND T3.PWLOCK=T2.PWLOCK-1
WHERE T3.PWLOCK<=10
),
T4 AS (
select PWLOCK,STATUS,TELLER_NO,NUM_PREFIX,cnt,
LAG(PWLOCK,CASE WHEN CNT=0 THEN 0 ELSE CNT-1 END ) OVER(PARTITION BY TELLER_NO,NUM_PREFIX ORDER BY PWLOCK) L from t3
match_recognize(
partition by TELLER_NO,NUM_PREFIX
order by PWLOCK
measures count(decode(STATUS,1,null,1)) cnt
ALL ROWS PER MATCH
pattern(a
b)
define a as STATUS = next(STATUS)
))
select MIN(PWLOCK),MAX(PWLOCK),TELLER_NO, NUM_PREFIX from T4 WHERE CNT>0 GROUP BY L,TELLER_NO, NUM_PREFIX

img


LINK:https://ask.csdn.net/questions/7659067?answer=53713744
SOURCE:CSDN_ASK
ASK_ID:7658965
ANSWER_ID:53713678
TITLE:请问oracle存储过程中几个表关联查询出一条数据,怎么拆分成几行数据并用来更新其他表
ANSWER:

存储过程里,对于临时使用的值,不需要存到表里,要么存变量里,要么使用游标。
如果你前面这个查询是个游标,后面自然而然就是接个循环,循环里就可以直接用游标的值进行判断,并且可以根据判断结果去进行相应处理


begin
for rec in (select * from 表a) loop
if rec.请假 > 480 then
loop
insert into 表b values (rec.日期, case when rec.请假>480 then 480 else rec.请假 end );
rec.请假 := rec.请假 - 480;
rec.日期:=rec.日期+1;
if rec.请假 < 0 then
exit;
end if;
end loop;
end if;
end loop;
end;

上面这个sql没有处理你的工作日,主要是因为每个公司的工作日都会有区别,而且法定节假日也是一个外部数据,这个只能你自己去匹配日期了


LINK:https://ask.csdn.net/questions/7658965?answer=53713678
SOURCE:CSDN_ASK
ASK_ID:7659062
ANSWER_ID:53713669
TITLE:第一列等于1的不查询。 查询第一行等于3的,和上一行也等于3的,(就是找到第一个出现3的行),这两个等于3的行之间不能有等于1的并且相隔年份大于一年。
ANSWER:

用模式匹配sql加开窗函数


with t(dt,sign_in) as(
select date‘2022-03-01’,3 from dual union all
select date‘2022-02-16’,3 from dual union all
select date‘2021-07-19’,3 from dual union all
select date‘2021-06-29’,3 from dual union all
select date‘2021-04-26’,null from dual union all
select date‘2021-02-23’,3 from dual union all
select date‘2021-02-10’,null from dual union all
select date‘2020-06-29’,1 from dual union all
select date‘2020-02-16’,3 from dual union all
select date‘2019-07-19’,3 from dual union all
select date‘2019-06-29’,3 from dual union all
select date‘2019-04-26’,null from dual union all
select date‘2019-02-23’,3 from dual union all
select date‘2019-02-10’,null from dual union all
select date‘2018-06-29’,1 from dual
), t2 as (
select * from t where sign_in is not null),
t3 as (
select dt,sign_in,cnt,lag(dt,case when cnt=0 then 0 else cnt-1 end) over(order by dt) lg from t2
match_recognize(
order by dt
measures count(decode(sign_in,1,null,1)) cnt
ALL ROWS PER MATCH
pattern(a* b)
define a as sign_in = next(sign_in)
))
select * from t3
where dt-lg>=365
;

先把空行都剔除,然后模式匹配进行连续统计,发现有1的时候断开,重新进行统计,借用lag开窗函数获取上n行的值,这个n就是连续统计值减1.
至于模式匹配,这玩意解释起来太费劲了,看看这篇翻译文档吧(不过估计你也看着头疼。。。)


LINK:https://ask.csdn.net/questions/7659062?answer=53713669
SOURCE:CSDN_ASK
ASK_ID:7659158
ANSWER_ID:53713622
TITLE:kafka 链接oracle 报错 operation not allowed from within a pluggable database
ANSWER:

因为你的kafka调用了oracle的DBMS_LOGMNR这个包,但是这个包只能在cdb的连接里使用,而你当前连接是个pdb,它就报错了


LINK:https://ask.csdn.net/questions/7659158?answer=53713622
SOURCE:CSDN_ASK
ASK_ID:7659167
ANSWER_ID:53713618
TITLE:sql中select出现的问题
ANSWER:

你这个是以十六进制形式表示一个二进制字节,x后面只能接两个字符,一个字节最大只能是 "FF",你输入长度为3的”100“,它当然会报错了,它报的这个错是语法错误。
显示问号,是因为这个类型就是一个二进制数据,不是可打印字符,它不会对其进行显示,当然你可以通过cast等方式对其进行转换


LINK:https://ask.csdn.net/questions/7659167?answer=53713618
SOURCE:CSDN_ASK
ASK_ID:7659324
ANSWER_ID:53713602
TITLE:远程连接阿里云服务器上的mysql,用sqlyog,出现以下问题
ANSWER:

要么不用ssh,取消勾选ssh隧道再试;
要么开启ssh,从阿里云获得ssh密钥后在你图上这个界面进行正确的配置


LINK:https://ask.csdn.net/questions/7659324?answer=53713602
SOURCE:CSDN_ASK
ASK_ID:7659348
ANSWER_ID:53713595
TITLE:oracle数据库子查询
ANSWER:

先给你的表结构和样本数据,要不然没办法对着你的数据进行说明。
一般这种无非就是 group by 员工工号 having count(下属员工工号)>=3 这个样子


LINK:https://ask.csdn.net/questions/7659348?answer=53713595
SOURCE:CSDN_ASK
ASK_ID:7658917
ANSWER_ID:53713397
TITLE:impala中查询本用户下的表
ANSWER:
show tables;

参考文档


LINK:https://ask.csdn.net/questions/7658917?answer=53713397
SOURCE:CSDN_ASK
ASK_ID:7659101
ANSWER_ID:53713387
TITLE:Mysql 普通索引的回表的问题?
ANSWER:

第2种写法简直是脱裤子放气。
查询都是按行记录来扫的,既然已经定位到了 name='4'这一行,直接按第一种写法把这行内容都select出来就好了,
第二种明明已经找到记录了,结果只取个id,又重新去原表里再找一次本行记录,纯属瞎写


LINK:https://ask.csdn.net/questions/7659101?answer=53713387
SOURCE:CSDN_ASK
ASK_ID:7658904
ANSWER_ID:53713366
TITLE:pgsql修改 如何判断已经是否修改成功
ANSWER:

这个,首先你得定义下什么叫修改成功?
是成功达到了你预想的目的?还是执行没有报错?
如果你传错了id,只要语法没错,它就不会报错,可能没更新到记录,也可能更新错了记录。
如果说你定义的成功是 "达到了你预想的目的“,那么唯一的方法,就是再查一次数据,看看是否和你预想的结果一致,但按照你后面查询还要验证的说法,这就陷入了一个死循环了。
所以,你可能对数据库编程有所误解,数据库其实也是个逻辑严密的程序,不存在说你指令正确了而且执行返回成功没有报错,你还要去验证下它是否真的成功了这种说法。你要确保的仅仅只是,sql编写是对的,以及执行是否返回成功即可


LINK:https://ask.csdn.net/questions/7658904?answer=53713366
SOURCE:CSDN_ASK
ASK_ID:7658912
ANSWER_ID:53713349
TITLE:自动识别输入数的进制
ANSWER:

你输入的数字是否存在特殊标志?比如十六进制 "0x00" 之类的?
如果没有任何特殊标志,纯粹只是一个数值,那你得先指定个优先级,比如 "10" ,它可以是进制数大于等于2的任何进制,如果不存在判断优先级,就没办法取出唯一的转换值。
你说是做计算器,但是你有没有看看目前电脑上、手机上、甚至实体的计算器?无论哪个计算器,在计算不同进制的数值时,都是要求你先主动切换进制,表明你当前输入的数值是哪个进制,这样才能进行计算,所以根本就不存在,仅仅根据数值来确定进制的说法。
"AB"就一定是16进制?我说它是12进制或者64进制其实也没错


LINK:https://ask.csdn.net/questions/7658912?answer=53713349
SOURCE:CSDN_ASK
ASK_ID:7658913
ANSWER_ID:53713324
TITLE:hive 如果做到两个月的数据关联
ANSWER:

两种方法,
一、自关联,
两个关联条件:


  • a.姓名等于b.姓名
  • a.月份等于b.月份加一个月

二、开窗函数
使用lead或者lag函数可以获取下一行或者上一行的数据




hive中的日期计算比较麻烦,需要转成unixtimestamp格式才能进行计算,下面这个sql就是获取 ‘2022-01’ 的上一个月,并以相同格式表示,即 ‘2021-12’


select from_unixtime(unix_timestamp(add_months(from_unixtime(UNIX_TIMESTAMP(‘2022-01’,‘yyyy-MM’), ‘yyyy-MM-dd HH:mm:ss’),-1),‘yyyy-MM-dd’),‘yyyy-MM’)

LINK:https://ask.csdn.net/questions/7658913?answer=53713324
SOURCE:CSDN_ASK
ASK_ID:7658944
ANSWER_ID:53713317
TITLE:mycat1.6.7连接mysql8出现问题
ANSWER:

你到这台服务器的 系统属性-高级-环境变量里看看,到底有没有设置JAVA_HOME这个环境变量


img


LINK:https://ask.csdn.net/questions/7658944?answer=53713317
SOURCE:CSDN_ASK
ASK_ID:7658978
ANSWER_ID:53713296
TITLE:多个LEFT JOIN语法问题
ANSWER:

不同的条件,结果会不一样,视不同的业务场景而定
a left join b,以a表为准,b表中可能会缺失一部分关联数据,此时


  • 如果用b表的id继续left join c表,则只会取到 a表和b表中同时存在的id 去找c表中的记录;
  • 如果用a表的id继续left join c表,则可以取到a表中的所有id去找c表中的记录

LINK:https://ask.csdn.net/questions/7658978?answer=53713296
SOURCE:CSDN_ASK
ASK_ID:7659064
ANSWER_ID:53713275
TITLE:mysql数据库设置smallint
ANSWER:

smallint字段设置成 UNSIGNED(即无符号) 的时候,才能放65535
否则就是有符号,范围为-32768到32767


LINK:https://ask.csdn.net/questions/7659064?answer=53713275
SOURCE:CSDN_ASK
ASK_ID:7659069
ANSWER_ID:53713252
TITLE:微信公众平台开发过程中如何进行本地测试?
ANSWER:

使用微信公众开发平台官方提供的"微信开发者工具"


img


LINK:https://ask.csdn.net/questions/7659069?answer=53713252
SOURCE:CSDN_ASK
ASK_ID:7659040
ANSWER_ID:53713236
TITLE:关于sql解决递归时间查询的问题,开关机时间处理
ANSWER:

请补充一下你的问题是什么
还有,说明一下你数据库的类型以及版本


LINK:https://ask.csdn.net/questions/7659040?answer=53713236
SOURCE:CSDN_ASK
ASK_ID:7659041
ANSWER_ID:53713225
TITLE:数据库怎么归类,困扰很久了求解答
ANSWER:

首先,你这个分类是否为一个标准分类方式?这个分类是否已经在内部达成了共识?
然后,你这个分类是只想临时用一下?还是可能会在很多地方用到?
常见的这种要把多个值映射到一个值的方法,如果是临时用,就case when 转换一下;
如果是很多地方要用,而且形成了一个达成共识的标准,那么这个映射关系就应该维护到基础信息里,在你这个sql中体现为d表,也就是说,d表中应该要有个字段维护了每行名称对应的分类,至于这个分类是用名称还是用id,就看这分类方式是否足够标准了(即是否可能发生变化)


LINK:https://ask.csdn.net/questions/7659041?answer=53713225
SOURCE:CSDN_ASK
ASK_ID:7659050
ANSWER_ID:53713213
TITLE:在内网中,文件并发上传到服务器,能否提供一个具有可行性的思路?
ANSWER:

别人的文件服务器不是一台设备,人家是分布式的多台设备。无论是网络带宽、内存、cpu、还是磁盘读写,全面碾压你单机。
你这个情况,其实不建议由客户端主动发起指令,而是应该由服务端下达指令给客户端,客户端收到指令后再上传,这样你就可以在服务端实现可控的并发量了


LINK:https://ask.csdn.net/questions/7659050?answer=53713213
SOURCE:CSDN_ASK
ASK_ID:7658619
ANSWER_ID:53713098
TITLE:商品定价出售或拍卖如何设计数据表
ANSWER:

需要拍卖的商品,在拍卖流程完结之后,这个商品就没有用了,因此不建议此类商品放在正常出售的商品表里。
从流程上来看,拍卖商品的流程是先要制作一个单据,然后在这个单据中填入需要拍卖的商品的信息,这个时候为了方便快速填写,可以从你原有商品表里获取一部分参考信息,当然也可以支持全新录入一个商品信息,不过这里填写的任何东西都不会影响你商品表的内容。
至于竞价信息,当然也是一张单独的表了。
设计这玩意主要是看你的业务流程,只要业务流程是清晰的,知道什么时候会采集到什么数据,什么数据有什么用,两个数据之间通过什么字段关联,表结构关系自然而然就出来了


LINK:https://ask.csdn.net/questions/7658619?answer=53713098
SOURCE:CSDN_ASK
ASK_ID:7658668
ANSWER_ID:53713086
TITLE:关于#mysql#的筛选排序问题,如何解决?
ANSWER:

这和你上一题不差不多么,
假如未来检查组增加的话,你这sql还得改,所以不建议sql里指定具体的值,使用开窗函数只需要对原表查一次就行了


select * from 
(select t.*,row_number() over(partition by 检查组 order by if(isnull(抽检数,1,0)), 抽检比例) rn from 表T t) t1
where 抽检数 is null or rn<=2

LINK:https://ask.csdn.net/questions/7658668?answer=53713086
SOURCE:CSDN_ASK
ASK_ID:7658823
ANSWER_ID:53713066
TITLE:查询某地区的销量最高的产品,一直出错
ANSWER:

你窗口函数里面的那个排序排的是什么东西?客户id去重求和?统计销量最高不是应该用销量字段么?如果一个客户购买了多次难道你只统计一次?
另外,建议你把这3个表的create table 发出来一下,方便答题的人进行调试


LINK:https://ask.csdn.net/questions/7658823?answer=53713066
SOURCE:CSDN_ASK
ASK_ID:7658846
ANSWER_ID:53713057
TITLE:Mysql查询结果分组
ANSWER:

你是只需要一个汇总sql,还是要用sql输出json数组?
还有你mysql的版本是多少?
假设只是汇总数据


select 
sum(今日上报) 今日上报,
sum(办理中) 办理中,
sum(待受理) 待受理,
sum(已办理) 已办理
from 表

假设要进行行列转换


select ‘今日上报’ type,sum(今日上报) num fromunion all
select ‘办理中’ type,sum(办理中) fromunion all
select ‘待受理’ type,sum(待受理) fromunion all
select ‘已办理’ type,sum(已办理) from

假设要转换成json,并且是mysql8.0以上


with t as (
select ‘今日上报’ type,sum(今日上报) num fromunion all
select ‘办理中’ type,sum(办理中) fromunion all
select ‘待受理’ type,sum(待受理) fromunion all
select ‘已办理’ type,sum(已办理) from 表)
select JSON_ARRAYAGG(JSON_OBJECT(‘type’,type,‘num’,num)) from t

LINK:https://ask.csdn.net/questions/7658846?answer=53713057
SOURCE:CSDN_ASK
ASK_ID:7658884
ANSWER_ID:53713031
TITLE:如何查询出date最新时间num=3和num最开始等于3,中间不能有num=1的并且时间要大于一年的两列数据
ANSWER:

写个滑动窗口,将上一行和当前行求和,满足等于6,且两个日期差大于等于365天,提取出满足此条件的当前行,然后再以此为条件,从原数据里把对应的上一行也找到


with t(dt,n) as(
select date‘2019-01-02’,1 from dual union all
select date‘2020-02-02’,1 from dual union all
select date‘2020-05-05’,1 from dual union all
select date‘2020-12-01’,3 from dual union all
select date‘2022-01-01’,3 from dual
),
t1 as (
select t.*,
sum(n) over (order by dt rows between 1 preceding and current row) as sum_n,
max(dt) over (order by dt rows between 1 preceding and current row) -
min(dt) over (order by dt rows between 1 preceding and current row) as dif_d
from t
)
select * from t where exists (
select 1 from t1 where sum_n=6 and dif_d>=365
and t.dt in (t1.dt-dif_d , t1.dt)
)

img


LINK:https://ask.csdn.net/questions/7658884?answer=53713031
SOURCE:CSDN_ASK
ASK_ID:7658853
ANSWER_ID:53712993
TITLE:计算近几周数据然后汇总,sql问题
ANSWER:

mysql 8.0以上版本,可以使用with递归补充中间缺失的数据。
但有点恶心的是mysql这个recursive只能放在第一个with后面,所以后面的统计每周的汇总sql只能一模一样写两次了


create table t_user_consume_log(
get_water DECIMAL(20,2),remark VARCHAR(200),flag TINYINT(1),
create_time datetime
);
insert into t_user_consume_log values (2600,‘’,1,now());
insert into t_user_consume_log values (2600,‘’,1,date_add(now(),interval -1 day));
insert into t_user_consume_log values (2600,‘’,1,date_add(now(),interval -7 day));
insert into t_user_consume_log values (2600,‘’,1,date_add(now(),interval -20 day));

with
recursive cte as (
select 0 wd,ifnull((select s from (
select
WEEK( now() )- WEEK( create_time ) wd,
sum(get_water) s
from t_user_consume_log
group by WEEK( now() )- WEEK( create_time )) d where wd=0),0) s
union all
select cte.wd+1,ifnull(d.s,0) from cte left join (
select
WEEK( now() )- WEEK( create_time ) wd,
sum(get_water) s
from t_user_consume_log
group by WEEK( now() )- WEEK( create_time )) d on cte.wd+1=d.wd
where cte.wd<=11
)
select concat(‘近’,wd+1,‘周’) 时间,
‘17500ml’ 目标饮水量,
concat(s,‘ml’) 实际饮水量,
concat(round(s/17500100,2),‘%’) 完成进度,
case when s>=17500 then ‘达标’ else ‘不达标’ end 是否达标
from cte

img




如果是mysql8.0以下,可以构造一个虚拟的列(可以用系统表),然后left join 上面汇总好的数据


select concat(‘近’,help_topic_id+1,‘周’) 时间,
‘17500ml’ 目标饮水量,
concat(ifnull(s,0),‘ml’) 实际饮水量,
concat(round(ifnull(s,0)/17500
100,2),‘%’) 完成进度,
case when s>=17500 then ‘达标’ else ‘不达标’ end 是否达标
from mysql.help_topic a left join (select
WEEK( now() )- WEEK( create_time ) wd,
sum(get_water) s
from t_user_consume_log
group by WEEK( now() )- WEEK( create_time )) b
on b.wd=a.help_topic_id
where help_topic_id<=13

LINK:https://ask.csdn.net/questions/7658853?answer=53712993
SOURCE:CSDN_ASK
ASK_ID:7658882
ANSWER_ID:53712922
TITLE:oracle打开sqlplus 无法解析指定的连接标识符
ANSWER:

检查下你客户端的tnsnames.ora文件中是否你连接的这个数据库名称,以及默认客户端路径(环境变量)是否设置正确


LINK:https://ask.csdn.net/questions/7658882?answer=53712922
SOURCE:CSDN_ASK
ASK_ID:7658537
ANSWER_ID:53712424
TITLE:更改新内容保存位置可以吗?
ANSWER:
  • 好处:你电脑系统重装的时候,这些文件就不会丢,而且可以节省C盘的空间
  • 缺点:如果你其他盘不是ssd,那么文件的读写就会变慢,保存在其他盘的程序启动也会变慢;而且对于需要安装的程序,你系统重装以后还是得重新安装这些程序

LINK:https://ask.csdn.net/questions/7658537?answer=53712424
SOURCE:CSDN_ASK
ASK_ID:7658575
ANSWER_ID:53712420
TITLE:简单的excel问题
ANSWER:
  1. 最简单的方式,ctrl+h ,把 @qq.com 替换成空
  2. 用SUBSTITUTE函数替换掉指定的字符串
    =SUBSTITUTE(E20,“@qq.com”,“”)

  3. 按你说的,left加search
    =LEFT(E20,SEARCH(“@qq.com”,E20)-1)


明显方法1和2都比方法3要简单得多。。。当然前提是这个列里全部都是qq邮箱,如果存在某个值没有“@qq.com”时,出来的就不是qq号了。
另外,并不是以“@qq.com”结尾的邮箱,前面一定就是qq号,比如我的邮箱就是 darkathena@qq.com


LINK:https://ask.csdn.net/questions/7658575?answer=53712420
SOURCE:CSDN_ASK
ASK_ID:7658588
ANSWER_ID:53712417
TITLE:mysql保存不了查询文件
ANSWER:

可能程序权限不够,建议使用管理员用户启动,或者设置保存路径为其他文件夹


LINK:https://ask.csdn.net/questions/7658588?answer=53712417
SOURCE:CSDN_ASK
ASK_ID:7658592
ANSWER_ID:53712415
TITLE:我知道学号怎么输出,对应输出语句我就不知道了
ANSWER:

我解释一下楼上这个代码吧
字符串其实是一个由字符构成的list,因此可以使用list的切片来对字符串进行截取


s=‘20201330119’
# 从开始切到第4位
print(s[:4])
# 从第5位切到第7位
print(s[4:7])

然后他用了一个f,表示格式化字符串,当然你也可以直接用加号进行字符串拼接


LINK:https://ask.csdn.net/questions/7658592?answer=53712415
SOURCE:CSDN_ASK
ASK_ID:7658489
ANSWER_ID:53712387
TITLE:商品省份归属统计,36行代码运行太慢,如何简化提速?
ANSWER:

一个sql就能同时取出所有省份的统计数据,干哈分这么多?


select province, count(*) ct from " . TABLEPRE . "service where cat = ‘$ky’ group by province



从数据库取数据不是你这么取的啊,哪有查一个列表的数据时,一个sql只查一个值的啊,你直接一个查询,然后循环输出结果不就好了?
比如这篇教程里的例子,就是一个sql取了3行数据


LINK:https://ask.csdn.net/questions/7658489?answer=53712387
SOURCE:CSDN_ASK
ASK_ID:7658514
ANSWER_ID:53712384
TITLE:没人解的开了。。Oracle SQL 如何计算start date到end date小于30天,且加交易总数值小于两百万
ANSWER:

你这题咋说没人解得开呢?
首先你没指定oracle的版本,我用21c版本写了个


with t ( cust_id, dt , prd_id,  amt, type) as (
select ‘A123’, date‘2022-01-01’, ‘aa11’, 1000001, ‘buy’ from dual union all
select ‘A123’, date‘2022-01-05’, ‘aa11’, 1000000, ‘sell’ from dual union all
select ‘B123’, date‘2022-01-06’, ‘bb22’, 1000, ‘buy’ from dual union all
select ‘B123’, date‘2022-01-07’, ‘bb22’, 1000, ‘sell’ from dual union all
select ‘C123’, date‘2022-01-08’, ‘aa11’, 2000000, ‘buy’ from dual union all
select ‘D123’, date‘2022-01-09’, ‘aa11’, 2000000, ‘buy’ from dual union all
select ‘D123’, date‘2022-03-09’, ‘aa11’, 2000000, ‘sell’ from dual union all
select ‘D123’, date‘2022-03-10’, ‘aa11’, 2000000, ‘sell’ from dual)
, t1 as (
select t.,
bit_and_agg(case when type=‘sell’ THEN 1 ELSE 0 END) over w1 as ct ,
sum(amt) over w1 as sum_amt
from t
window w1 as(partition by cust_id order by dt range between 30 preceding and current row)
)
select * from t where exists
(select 1 from t1 where ct=0 and sum_amt>2000000
and t.cust_id=t1.cust_id and t.dt between t1.dt-30 and t1.dt)

img


t表是模拟数据,
t1的目的是增加两个列,即往前数30天是否存在多个类型,以及往前数30天求和,
低版本的oracle中,window 窗口需要放上去,这个可以改,
bit_and_agg这个函数是21c版本新增的,是按位与聚合运算,即只要有2个不同的值则返回0,主要原因是移动窗口不能用count(distinct),当然低版本可以用其他方法,只是sql又变长了




还是写个低版本的处理方法吧


with t ( cust_id, dt , prd_id,  amt, type) as (
select ‘A123’, date‘2022-01-01’, ‘aa11’, 1000001, ‘buy’ from dual union all
select ‘A123’, date‘2022-01-05’, ‘aa11’, 1000000, ‘sell’ from dual union all
select ‘B123’, date‘2022-01-06’, ‘bb22’, 1000, ‘buy’ from dual union all
select ‘B123’, date‘2022-01-07’, ‘bb22’, 1000, ‘sell’ from dual union all
select ‘C123’, date‘2022-01-08’, ‘aa11’, 2000000, ‘buy’ from dual union all
select ‘D123’, date‘2022-01-09’, ‘aa11’, 2000000, ‘buy’ from dual union all
select ‘D123’, date‘2022-03-09’, ‘aa11’, 2000000, ‘sell’ from dual union all
select ‘D123’, date‘2022-03-10’, ‘aa11’, 2000000, ‘sell’ from dual)

, t1 as (
select t.
,
trunc(EXP(SUM(LN(case when type=‘sell’ THEN 2 ELSE 3 END))
over (partition by cust_id order by dt range between 30 preceding and current row))) as ct ,
sum(amt)
over (partition by cust_id order by dt range between 30 preceding and current row) as sum_amt
from t
)
select * from t where exists
(select 1 from t1 where mod(ct,6)=0 and sum_amt>2000000
and t.cust_id=t1.cust_id and t.dt between t1.dt-30 and t1.dt)

img


这个sql在11g/12c/18c/19c/21c均测试通过。
主要和上面那个版本的区别,除了把窗口定义放上去了,更重要的一点是,将要做去重统计的两个值转换成两个质数,然后计算一列的乘积,如果最后这个乘积满足除以两个质数之积余0,那么说明它的因数肯定同时含有这两个质数,即同时含有多个值


LINK:https://ask.csdn.net/questions/7658514?answer=53712384
SOURCE:CSDN_ASK
ASK_ID:7658471
ANSWER_ID:53712259
TITLE:在安装VMware16.2.2的过程中,遇到另一个安装实例已在运行,正在退出。怎么办。
ANSWER:

因为你之前已经启动一次安装程序了,那个安装程序还没安装完也没退出,你又启动一次安装程序,他当然会报这个错了


LINK:https://ask.csdn.net/questions/7658471?answer=53712259
SOURCE:CSDN_ASK
ASK_ID:7658408
ANSWER_ID:53712256
TITLE:请教关于SAP中EDI的退货问题
ANSWER:

这个与你的业务模型有关,重点是在库存管理的部分。
假设你本身是持有库存的,发生退货,在结果上,应该是增加你的库存,至于库存是否还要退回你的上游,由你的业务模式来定。
然后就是销售部分了,这里一般有两种处理模式:


  • 一种是在原单上引出一个售后单,这样的话,未来统计净销售就要注意这部分售后数据了
  • 另一种就是在也产生一个销售单,不过这个销售单的数量和总额是负数,顺带多个字段记录原单号,这样统计净销售就不需要进行修改。

但无论怎么改,多一种业务类型肯定会需要对你当前业务模型及报表统计进行全盘的分析,看看哪里会有影响,并分析是否有可行的修改方案


LINK:https://ask.csdn.net/questions/7658408?answer=53712256
SOURCE:CSDN_ASK
ASK_ID:7658411
ANSWER_ID:53712246
TITLE:mysql 查询用户表,如何关联每个用户的消费总数 #mysql
ANSWER:

问题描述不是很清楚


  1. 你是想输出一个表格还是输出一个字符串?
  2. 你最后输出的123是用户id还是用户名称?
  3. 如果有用户没有消费记录,是否需要显示该用户的记录?
    但不管怎么看,这难道不是一个最最基本的查询么?

–如果不需要用户名称
select user_id ,sum(pay) from 消费记录表
group by user_id
–如果需要用户名称
select max(user_name) ,sum(pay) from 消费记录表 a,用户表 b
where a.user_id=b.id group by b.id
–如果用户无消费记录也需要显示
select max(user_name) ,sum(pay) from 用户表 b left join 消费记录表 a
on a.user_id=b.id group by b.id
–如果是要输出一个字符串
select group_concat(concat(user_name ,‘消费总数:’,pay) SEPARATOR ‘,’)
from (select max(user_name) user_name ,sum(pay) pay from 用户表 b left join 消费记录表 a
on a.user_id=b.id group by b.id) c

LINK:https://ask.csdn.net/questions/7658411?answer=53712246
SOURCE:CSDN_ASK
ASK_ID:7658206
ANSWER_ID:53712226
TITLE:关于SQL 数据提取个数的疑问!
ANSWER:

其实就是取抽检个数为空的和排个序取前2的(nulls last,可是mysql没这个语法,用if和isnull处理成类似效果)


select * from (
select t.,concat(round(抽检个数/库存数量100,2),‘%’) 抽检率,
row_number() over(order by IF(ISNULL(抽检个数),1,0) ,抽检个数/库存数量) rn from t) x
where 抽检个数 is null or rn<=2

从你发出来的这个样本数据里看,没有出现重复的商品,貌似不需要求和?

img


LINK:https://ask.csdn.net/questions/7658206?answer=53712226
SOURCE:CSDN_ASK
ASK_ID:7658226
ANSWER_ID:53712197
TITLE:mysql多表数据库查询
ANSWER:

看样子你这个库只是用于数据采集,并非是针对数据分析建立,因此建议再建个专门用于数据分析的数据仓,把你这些数据都同步进去,多个表的都合到一个表里去。
而且你说的"设备信息表有七八千张,也就是七八千个订单"这个很难理解啊,意思是每新产生一个订单就新建一张设备信息表?一张设备信息表里的数据不会增加?那这个设计是为了干啥啊?为啥不把这些设备信息都放到一个表里去?七八千行也不多呀


LINK:https://ask.csdn.net/questions/7658226?answer=53712197
SOURCE:CSDN_ASK
ASK_ID:7658327
ANSWER_ID:53712189
TITLE:如何利用SQ乚查询语句查找需要的数据
ANSWER:

假设是mysql
假设只用查对应的主键,可以用下面这个sql


select 商品名称,品牌,型号,
group_concat(id SEPARATOR ‘,’) id_collect
from
group by 商品名称,品牌,型号
having count(distinct 价格)>1

假设是要查满足条件的完整记录,开一次窗就行了


select b.* from (
select a.*,count(distinct 价格) over(partition by 商品名称,品牌,型号) ct from 表 a) b
where ct>1

LINK:https://ask.csdn.net/questions/7658327?answer=53712189
SOURCE:CSDN_ASK
ASK_ID:7657799
ANSWER_ID:53711844
TITLE:windows11系统,Edge浏览器,html网页获取SQLserver数据库信息的主流方式是什么?
ANSWER:

你这是做了个纯静态网页?没有后端服务的?
asp/php/java/python等至少要选一个吧?
在windows上,最容易搭的web服务就是用系统自带的iis搭个asp,简单写几行命令就可以实现数据库连接及查询。
但如果你是真的想做一个网页形式的管理系统,还是先去学一下后端吧


LINK:https://ask.csdn.net/questions/7657799?answer=53711844
SOURCE:CSDN_ASK
ASK_ID:7658140
ANSWER_ID:53711831
TITLE:如何从公网访问树莓派?
ANSWER:

如果你家是电信的网络,可以申请开通桥接模式和动态公网IP。
假设没办法开公网IP,那么有两种方式,


  1. 另外去网上申请一个带公网ip的服务器,在这个服务器上配置好内网穿透的服务端,然后在你树莓派上配置好内网穿透的客户端
  2. 使用其他厂家提供的内网穿透服务,比如花生壳向日葵之类的,必要时可以借助一些硬件来简化安装和配置。

但无论是哪种,内网穿透的原理都一样,就是必须有一个公网服务,内网设备连上这个公网服务后,你访问这个公网服务对应的端口时,就会转发到你的内网设备上,所以,用别人的服务器要想网速快,会需要按流量收费,否则那1m2m的免费带宽会相当让人捉急


LINK:https://ask.csdn.net/questions/7658140?answer=53711831
SOURCE:CSDN_ASK
ASK_ID:7658130
ANSWER_ID:53711806
TITLE:我遇到一个数据库数据字典设计的问题,请各位解惑一下该怎么设计,最好用navicat截个图
ANSWER:

有啥要求?是否有多语言?要求单独字典表还是共用字典表?
假设是单独的表,而且不需要多语言,放两个字段就行了,一个id一个名称,0对应其他,1对应国有企业,2对应私营企业,当然用容易识别的英文字母来作为ID也行。
假设是要求共用字典表,那就多一个字典类型叫企业性质
假设是要求多语言,那就再加一个语言字段


LINK:https://ask.csdn.net/questions/7658130?answer=53711806
SOURCE:CSDN_ASK
ASK_ID:7657693
ANSWER_ID:53711766
TITLE:关于MYSQL三表联查的问题
ANSWER:

这个表设计存在严重问题,尤其是表1和表2,为啥子要把主从关系中的多个从横着放啊,这样怎么去做join呢?未来如果要增加从的数据,岂不是要往后面加字段?
建议先重新设计下表结构,以下是满足数据库三范式以及key-value模式的设计


img


另外,GROUP_CONCAT这个函数你用显示错误说明你sql写错了,不能说因为你不知道正确的sql语法就说不能用吧?


如果把表结构改成我上面这个样子,这么点数据3表联查没有任何性能压力


LINK:https://ask.csdn.net/questions/7657693?answer=53711766
SOURCE:CSDN_ASK
ASK_ID:7657770
ANSWER_ID:53711746
TITLE:SQLserver 求1到3月,每月最后一天的各项的值
ANSWER:

你sqlserver的版本是多少?
如果是2012以上版本的话,可以用EOMONTH函数来取传入日期的月末最后一天,也就是说满足 "EOMONTH(日期)=日期" 的数据即为最后一天的数据;
如果是2012版本之前,则可以使用 "dateadd(d,-day(日期),dateadd(m,1,日期))=日期" 来取得最后一天的数据
至于这个条件写在哪,就看你完整的使用场景了,where里也行case when里也行,取出来的数据如果只有一行,max、sum、avg的结果都是一样的


LINK:https://ask.csdn.net/questions/7657770?answer=53711746
SOURCE:CSDN_ASK
ASK_ID:7658032
ANSWER_ID:53711713
TITLE:sql查询语句 想要的结果是如果第一行时间数据为空的话,就拿第二行的时间数据显示
ANSWER:

用开窗函数取个max


select a.*,max(时间) over(partition by 订单号) 时间 from a

LINK:https://ask.csdn.net/questions/7658032?answer=53711713
SOURCE:CSDN_ASK
ASK_ID:7658047
ANSWER_ID:53711708
TITLE:关于#oracle#的问题,请各位专家解答!
ANSWER:

这与安装oracle没关系,仔细回忆下你是不是改过区域、字符集、语言之类的东西,比如下面这个


img


LINK:https://ask.csdn.net/questions/7658047?answer=53711708
SOURCE:CSDN_ASK
ASK_ID:7657866
ANSWER_ID:53711565
TITLE:oracle查询出含有这个值的数据如何加密或者替换,只是替换查询的结果,数据库中的数据不变
ANSWER:

用regexp_replace或者regexp_substr,可以对满足你指定的这个正则表达式的字符串进行替换或者截取,比如


select regexp_replace(‘haha411081199611114568’,
‘[1-9]\d{5}(18|19|20)\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]’,
‘abcdefg’)
from dual

img


LINK:https://ask.csdn.net/questions/7657866?answer=53711565
SOURCE:CSDN_ASK
ASK_ID:7657794
ANSWER_ID:53711547
TITLE:oracle 数据库,不同数据库的用户,可以互相授予权限吗?
ANSWER:

bb用户在另一个数据库?这要在另一个数据库里建立访问你这个数据库的dblink


LINK:https://ask.csdn.net/questions/7657794?answer=53711547
SOURCE:CSDN_ASK
ASK_ID:7657080
ANSWER_ID:53711045
TITLE:求一个加密函数,但需要相同的值在不同的表中加密后,显示的结果相同
ANSWER:

你这是sqlserver吧?标签咋写个golang。。。
用md5就好了


CREATE VIEW TESTA_V AS 
select
substring(sys.fn_sqlvarbasetostr(HashBytes(‘MD5’,ID)),3,32) ID,
CLASS
FROM TESTA;

像你那个例子根本不叫加密,原字符串直接就能识别出来,顶多算个扩充原有字符串


LINK:https://ask.csdn.net/questions/7657080?answer=53711045
SOURCE:CSDN_ASK
ASK_ID:7657593
ANSWER_ID:53711040
TITLE:如何安装yum命令,在站内搜索到的结局方法好像都不好使
ANSWER:

iTerm2是MacOS的终端软件,yum是linux系统的软件安装工具,
你是想把MacOS当linux用??这两个是不同的操作系统啊。
你如果是在学习linux相关的操作,先装个linux的虚拟机吧,比如centos系统,然后连接到centos里就可以用yum命令了。
如果只是想在终端里用命令来安装MacOS上的软件,可以用brew


LINK:https://ask.csdn.net/questions/7657593?answer=53711040
SOURCE:CSDN_ASK
ASK_ID:7657492
ANSWER_ID:53710879
TITLE:想开发一个monitor,用来管理salesforce上的case
ANSWER:

你这个salesforce是公司本地化部署的么?为啥不考虑一下把消息提醒集成到钉钉或者企业微信呢?这个对于你公司的技术人员应该不是什么大问题吧,反正有后台权限,可能都是有公共api的,就算没有,直接查下数据库再做个自动推送也不是什么难事。
如果你要从当前页面元素来进行解析的话,首先要了解html语言,知道怎么看你的东西在哪里,而且还要让浏览器一直开着。
开发方向的话,除了上面说的chrome插件,其实还可以使用python,直接后台起个浏览器,完成模拟登陆,并定时刷新,刷新完了就检测页面,发现页面内存在特定元素的时候,播放提示音


LINK:https://ask.csdn.net/questions/7657492?answer=53710879
SOURCE:CSDN_ASK
ASK_ID:7657462
ANSWER_ID:53710794
TITLE:正则表达式怎么提取可能出现的字符但不包括这个字符的内容
ANSWER:
(?<=(x-main=“)|(x-main=))[^”].*?(?=("|$))

img


LINK:https://ask.csdn.net/questions/7657462?answer=53710794
SOURCE:CSDN_ASK
ASK_ID:7657473
ANSWER_ID:53710776
TITLE:sql中如何实现查询结果从小到大按行排列?
ANSWER:

请说明一下你用的什么数据库以及数据库版本




sql server 2008版本太老了,很多写法都不支持,而且也难得找个线上测试环境测试,我先分析一下吧。
首先你这个结果应该是写错了,最后生成的数据应该是
1 4 7 10 40 70 null
2 5 8 30 60 null null
3 6 9 20 50 null null


即按照前3个字段,聚合第4个字段,并且让第4个字段从左至右排列。
但是这里有个问题,你例子里的结果一共只有7个列,假设满足147的一共有5个值,按照你这个要求需要8个列才能放下,而这违背了sql标准,即一个查询sql必须有确定的列数,列数不能为动态的。
所以,大多数情况下,你这种需求不会要求产生多个列,而是直接以字符串形式,使用分隔符将这些值都塞在同一个字段里,也就是说类似mysql中的ws_concat或者oracle中的listagg,而sqlserver尤其是较老版本的sqlserver里,处理这种就特别恶心了。
就像下面这道题一样


按照上面这个方式对应到你这个题,sql如下


with t as (
select 1 a, 4 b,7 c, 70 d union all
select 2, 5, 8, 60 union all
select 3, 6, 9, 50 union all
select 1, 4, 7, 40 union all
select 2, 5 ,8, 30 union all
select 3, 6 ,9 ,20 union all
select 1, 4 ,7 ,10
)

select t.a,t.b,t.c,
stuff((select ‘,’+cast(t2.d as VARCHAR) from t as t2 where t2.a=t.a and t2.b=t.b and t2.c=t.c order by d for xml path(‘’)),1,1,‘’) d
from t group by t.a,t.b,t.c

img


其实指定分隔符为逗号后,你输出到csv,自动就会变成多个列


LINK:https://ask.csdn.net/questions/7657473?answer=53710776
SOURCE:CSDN_ASK
ASK_ID:7657380
ANSWER_ID:53710631
TITLE:Word怎么恢复默认设置
ANSWER:

页面布局,背景,删除页面背景


img


LINK:https://ask.csdn.net/questions/7657380?answer=53710631
SOURCE:CSDN_ASK
ASK_ID:7657369
ANSWER_ID:53710621
TITLE:erp系统中生产物料辅料如何规范命名
ANSWER:

你这个就像个小型的品类管理哈,总而言之,其实就是定业务标准,下面几点可以参考一下


  1. 分类标准,依据什么原则来对物料进行分类,这个原则必须没有歧义,不能出现某个物料能同时满足多个分类的标准。必要的时候,允许多级分类
  2. 根据每个子分类物料的特性,确定其名称规范,比如你这里写的化学品 ,要求以 "厂家+化学品学名+规格+包装"来进行命名(只是举例,该标准建议由熟悉此项业务的业务管理人员来制定)
  3. 在某些重要特征上,可以单独建立一些必填属性(可以按分类来确定是否必须),以方面快速检索物料,也可以避免名称不规范时无法找到对应的物料

LINK:https://ask.csdn.net/questions/7657369?answer=53710621
SOURCE:CSDN_ASK
ASK_ID:7657350
ANSWER_ID:53710600
TITLE:access锁定数字编号
ANSWER:
  1. 建表的时候,可以选择没有自增主键列,然后新增一个普通列作为id列,这个时候就由你自行管理了,你想插什么数字进去就能插什么进去。
  2. 关于自增id的递增,数据库不可能在每次插入前查询一下表中id的最大值,这样太耗时间。这种id一般是作为一个序列对象进行管理,插入数据的时候,会先去找一个这个序列对象,获得下一个值,然后更新这个对象的当前值为下一个值,再去插数据。如果获取序列成功但插入失败,那么序列就已经发生了变化,而你表里的数据却没有变更,因此就会出现序列不连续的现象。
  3. 另外,序列这玩意还有个缓存机制,可以同时缓存多个id,缓存的时候序列的当前值就变了,在同一个事务优先从缓存里获取多个id值会更快,但是一但缓存没用完就被清了,就只能再去找序列对象,这个时候也可以发现id会不连续。

LINK:https://ask.csdn.net/questions/7657350?answer=53710600
SOURCE:CSDN_ASK
ASK_ID:7657228
ANSWER_ID:53710569
TITLE:按照特定字段进行分组排序,并更新序号
ANSWER:

假设你用的是mysql8.0以上版本,
假设原数据长这样,想用type进行分组排序,把序号更新到org字段里


img


那么可以通过开窗函数获取分组序号


img


然后用这个查询去更新原表的字段


img


确认更新结果


img


LINK:https://ask.csdn.net/questions/7657228?answer=53710569
SOURCE:CSDN_ASK
ASK_ID:7657321
ANSWER_ID:53710538
TITLE:ORACLE数据库,我想使用用户B中的表,在用户A创建视图(VIEW)
ANSWER:

不确定你的目的是让用户A获得创建视图的权限还是让用户A能查到用户B的数据


  1. 如果只是为了查这张表里的数据,不需要做数据过滤的话,直接授权B用户的这个表给A用户查询权限,A用户就能查B用户的这个表了


    grant select on B用户.表名 to A用户;

    然后在A用户下执行查询时要带上用户名


    select * FROM B用户.表名;

    或者再建一个同义词就不需要加用户名了


    create synonym A用户.表名 for B用户.表名;
    select * FROM 表名;

  2. 如果是只让用户A访问视图,而视图里的表都是B用户的,那么也没必要把视图建在A用户下,你可以直接把视图先建在B用户下,然后使用上面的方法授权给A查询


  3. 如果是想让用户A能自主创建视图,而且还能使用用户B的表,那么要授权A用户查询任何表的查询权限和创建任何视图的权限



LINK:https://ask.csdn.net/questions/7657321?answer=53710538
SOURCE:CSDN_ASK
ASK_ID:7657306
ANSWER_ID:53710498
TITLE:如何获得数据库中SQL查询的查询树?
ANSWER:

你上面这个图是人家手工单独查表手工做的示意图,那个表里面怎么可能只有两行数据,如果数据很多,工具难道要把表里面的数据全部显示出来么?
至于sql的执行计划,各个数据库提供的查询方式不同


LINK:https://ask.csdn.net/questions/7657306?answer=53710498
SOURCE:CSDN_ASK
ASK_ID:7656920
ANSWER_ID:53710477
TITLE:一句sql不会优化,一共三张表,是要查出不要的东西。
ANSWER:
select *
from 表1
where not exists (select 1
from 中间表, 表2
where 中间表表2.id = 表2.id
and2.字段 = ‘已知’
and1.id = 中间表表1.id)

或者


select *
from1
where1.id not in (
select 中间表表1.id
from 中间表, 表2
where 中间表表2.id = 表2.id
and2.字段 = ‘已知’)

LINK:https://ask.csdn.net/questions/7656920?answer=53710477
SOURCE:CSDN_ASK
ASK_ID:7656933
ANSWER_ID:53710468
TITLE:python或者SQL如何将表格合并转置
ANSWER:

ORACLE和sqlserver都支持pivot来进行行列转换,而且超简单,
以下是oracle的写法


select *
from a
pivot(max(value)
for key in(‘sex’ sex,
‘country’ country,
‘hobby’ hobby,
‘age’ age,
‘weight’ weight))

img


LINK:https://ask.csdn.net/questions/7656933?answer=53710468
SOURCE:CSDN_ASK
ASK_ID:7656983
ANSWER_ID:53710451
TITLE:使用navicate,删除数据时出现问题
ANSWER:

先用sql,count一下整张表,看看这个表总共有多少行,
然后用sql删除一条你不要的记录,(注意要使用delete命令,你用软件按钮来删,不知道还有没有什么确认动作要执行)
再用sql,count一下整张表看看有多少行,看看记录数是否有变化,


  • 如果行数减少了,说明删除成功了,这个时候你还能看到乱码数据是因为还有其他行存在乱码数据你没删;
  • 如果行数不变,请仔细观察下删除时,那个提示信息是什么
  • 如果行数增加了,那说明还有程序在写入数据

另外,你删除数据的时候where条件是咋写的?有没有先用这个where条件来查询一下数据看看查不查得出?你用乱码作为where条件是查不到数据的,因为存在不可见字符你复制不到,建议用其他非乱码的字段作为查询条件去删


LINK:https://ask.csdn.net/questions/7656983?answer=53710451
SOURCE:CSDN_ASK
ASK_ID:7657018
ANSWER_ID:53710436
TITLE:关于#mysql#的问题:如何用MY SQL,按照月份进行拆分原始数据
ANSWER:

这种题已经有不少人问过了,如果是mysql8.0以上,支持递归sql。
但是你这题有一点点不一样,就是最后一个月份竟然不要拆?那我只能假定先用where enddate<>'29991231’剔除掉这部分数据先处理了,再union all回这一部分数据了。
然后你这数据有点少,我多造了一点数据


–测试数据
drop table test_a_20220308;

create table test_a_20220308 (id int,start_date date,end_date date,org VARCHAR(10),type VARCHAR(10));
insert into test_a_20220308 values (1,‘2021-01-01’,‘2021-03-15’,‘A’,‘22’);
insert into test_a_20220308 values (2,‘2021-03-16’,‘2021-12-15’,‘A’,‘22’);
insert into test_a_20220308 values (3,‘2021-04-05’,‘2021-07-08’,‘A’,‘33’);


–查询sql (mysql 8.0 以上)
with RECURSIVE cte as(
select
id,
start_date ,
last_day( start_date) end_date1 ,
end_date,
org,
type
from test_a_20220308 a
union all
select
cte.id,
date_add(start_date-day(start_date)+1,interval 1 month),
least(last_day(date_sub(start_date,interval -1 month)),end_date),
end_date,
org,
type
from cte where date_add(start_date-day(start_date)+1,interval 1 month)<=cte.end_date
)
select id,start_date,end_date1 end_date,org,type from cte order by id ,start_date

img


LINK:https://ask.csdn.net/questions/7657018?answer=53710436
SOURCE:CSDN_ASK
ASK_ID:7657072
ANSWER_ID:53710321
TITLE:服务器装的系统是server2012,装数据库sql2012卡在install_vsshell_cpu32_action:PublishProduct这个安装界面一直运行不下去了如何解决
ANSWER:

只要没报错,建议先等1到2个小时再看


LINK:https://ask.csdn.net/questions/7657072?answer=53710321
SOURCE:CSDN_ASK
ASK_ID:7657076
ANSWER_ID:53710318
TITLE:怎么制作exe安装程序包?
ANSWER:

不知道如何才算你说的高大上


  1. 打包成msi

    img



  1. 创建winrar或7-zip自解压文件

    img


    https://jingyan.baidu.com/article/b87fe19e9025915218356803.html

LINK:https://ask.csdn.net/questions/7657076?answer=53710318
SOURCE:CSDN_ASK
ASK_ID:7657170
ANSWER_ID:53710307
TITLE:sql server 复制一个数据库的sql 语句
ANSWER:

你这个应该叫做数据库迁移,如果是同版本的话,可以用下面这个方式
https://jingyan.baidu.com/article/597a064334c2dd312a524359.html


如果是跨版本的话,建议使用微软官方提供的迁移工具DMA


DMA迁移完整操作步骤


LINK:https://ask.csdn.net/questions/7657170?answer=53710307
SOURCE:CSDN_ASK
ASK_ID:7657157
ANSWER_ID:53710291
TITLE:这段SQL语句的各个意思?
ANSWER:

这段sql里没看到有任何特殊的语法,关联几个表求个和而已,不知道你是哪里看不懂。
如果是问业务含义的话,应该没人比你内部人员更懂你自己公司的业务了吧?
我根据以往工作的经验,大概给你分析一下查玩意查的是啥


  1. 表名以wms开头,说明这是个物流仓库管理系统,
  2. wms_inventory 是库存表,wms_item 是商品主档表,wms_asn 是asn单据表(有些地方叫装运装载),wms_bill_type 是单据类型表
  3. QTY_BASE_QTY <> 0 表示基本数量不等于0(可能就是库存数量),
  4. T1.LOT_INFO_ERP_CODE IN () ,从这个字段起的别名WhsCode来看,可能是仓库(warehouse)代码,也就是只查这10个仓库的数据
  5. billType.ID IN (13, 14, 15, 16, 17)表示查这5种单据类型
  6. billType.ID IN (12) AND asn.BE_FEEDBACK = TRUE 表示在单据类型为12的时候,需要同时满足后面这个条件才进行统计,也就是说这种单据可能存在多个中间状态
  7. T0.INV_TYPE = 'Normal' 这玩意应该是查的正常库存,也就是说这个库存表里面可能还有不正常的库存,比如临期、过期、破损之类的,只需要统计库存类型为正常的
  8. 最后查出来的几个字段就是商品编码、商品名称、批次号、数量(来自ASN单据中商品数量的合计)、库存单位(比如个、瓶、克之类的)、仓库代码、状态、取数时间

LINK:https://ask.csdn.net/questions/7657157?answer=53710291
SOURCE:CSDN_ASK
ASK_ID:7656302
ANSWER_ID:53709622
TITLE:SQLserver AVG函数求1到3月的各项平均值
ANSWER:

你把你的else 0都删掉试试。


select
avg(case when year(D.RQ)=2021 and month(D.RQ)=1 then D.DYM end) DYM1,
avg(case when year(D.RQ)=2021 and month(D.RQ)=1 then D.RY end) RY1,
avg(case when year(D.RQ)=2021 and month(D.RQ)=2 then D.DYM end) DYM2,
avg(case when year(D.RQ)=2021 and month(D.RQ)=2 then D.RY end) RY2,
avg(case when year(D.RQ)=2021 and month(D.RQ)=2 then D.RYOU end) RYOU2,
avg(case when year(D.RQ)=2021 and month(D.RQ)=3 then D.DYM end) DYM3,
avg(case when year(D.RQ)=2021 and month(D.RQ)=3 then D.RY end) RY3,
from DXTJ A left join GLY_JBXXB B on A.GLY=B.ID left join DEPT_JBXXB C on A.SGDW=C.DEPEID left join CSJING_SCSJB D on A.JH=D.JH
where JB=‘油井’

avg不对的原因是,它的算法是求和再除以非空的行数,你这行数没有发生变化,不是指定月份的数据你给了个0,它当然数据会偏小了


另外,你确定不在后面加个where条件限定下查询数据的范围么?你这样查,整个表的数据都扫到了


LINK:https://ask.csdn.net/questions/7656302?answer=53709622
SOURCE:CSDN_ASK
ASK_ID:7656782
ANSWER_ID:53709613
TITLE:windows server部署mysql大家都用管理员用户部署还是普通用户部署
ANSWER:

windows上的服务,如果涉及到文件的读写,你不给个管理员身份就很容易遇到各种奇奇怪怪的问题,所以建议还是放到服务里去。
话说我以前公司里的生产环境就没有哪个mysql是在windows上的。。。


LINK:https://ask.csdn.net/questions/7656782?answer=53709613
SOURCE:CSDN_ASK
ASK_ID:7656752
ANSWER_ID:53709481
TITLE:请教!有什么办法可以把D盘剩余的空间匀出来一些给C盘,现在D盘还剩150个G,C盘只剩下14个G了T_T
ANSWER:

在PE下使用diskgenius可以把D盘切一部分出来,然后合到C盘,
但是要注意,这个操作如果有哪一步失误了,你数据可能就没了。
这个操作我做过十多次了,只有一次是搞错了合并方向导致数据没了…


LINK:https://ask.csdn.net/questions/7656752?answer=53709481
SOURCE:CSDN_ASK
ASK_ID:7656730
ANSWER_ID:53709464
TITLE:为什么CSDN网页界面这么大?
ANSWER:

按住ctrl,然后鼠标滚轮往下滚


LINK:https://ask.csdn.net/questions/7656730?answer=53709464
SOURCE:CSDN_ASK
ASK_ID:7656705
ANSWER_ID:53709458
TITLE:打开网站但是需要使用微信继续打开如果跳过
ANSWER:

如果它没做微信号身份验证的话,那么改下请求头就好了
请求头里有个浏览器类型,设置成微信浏览器。
但如果它会申请微信验证,那就跳不过了


LINK:https://ask.csdn.net/questions/7656705?answer=53709458
SOURCE:CSDN_ASK
ASK_ID:7656711
ANSWER_ID:53709453
TITLE:字符型常量和整型常量有什么关系吗
ANSWER:

字符就是文本,可以放数字字母符号以及各国语言文字;
整型全称叫整数型,只能放整数


LINK:https://ask.csdn.net/questions/7656711?answer=53709453
SOURCE:CSDN_ASK
ASK_ID:7656713
ANSWER_ID:53709450
TITLE:第27题:圆括号的优先级不是应该比其他的优先级高嘛,为什么先算了a+b
ANSWER:

按这个题应该是这个意思,
从左至右看,如果后面是括号就先算括号,如果后面是乘除就先算乘除,否则按顺序算


LINK:https://ask.csdn.net/questions/7656713?answer=53709450
SOURCE:CSDN_ASK
ASK_ID:7656715
ANSWER_ID:53709437
TITLE:mysql一个小的建表问题
ANSWER:

语法不对,为什么建表连字段名都不写?


CREATE TABLE `u1` (
`id` int DEFAULT NULL,
`name` varchar(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

LINK:https://ask.csdn.net/questions/7656715?answer=53709437
SOURCE:CSDN_ASK
ASK_ID:7656440
ANSWER_ID:53709412
TITLE:sql一张表的嵌套查询
ANSWER:

用原表关联你查出来的这个数据,关联条件为原表的时间小于你查出来的这个数据的时间就行了,由于不清楚你这个id是什么东西,还有用户字段是啥,也不知道你原表长什么样子,也不知道还有些别的什么字段,因此无法给出sql。
另外,你应该要给出你的数据库类型、版本以及建表sql和测试数据


LINK:https://ask.csdn.net/questions/7656440?answer=53709412
SOURCE:CSDN_ASK
ASK_ID:7656594
ANSWER_ID:53709406
TITLE:Oracle VM VirtualBox恢复备份是灰色的
ANSWER:

正在运行的机器是不能备份的,因为数据一直在变,请先关机再进行备份


LINK:https://ask.csdn.net/questions/7656594?answer=53709406
SOURCE:CSDN_ASK
ASK_ID:7656667
ANSWER_ID:53709398
TITLE:plsql怎么批量修改如下数据
ANSWER:

oracle12c开始,提供了一些函数支持json的读写操作
但是你这个字符串好像修改前和修改后都不是完整的json串,那么可以采取识别字符串来定位进行截取和拼接的方式来处理


declare
str varchar2(32767) := ‘{“expand”:[{“zd”:“imageParameters”,“mrz”:“{“visibleLayers”:[40]}”,“sm”:“动态图层指定显示的图层号”}’;
begin
str := str || ‘,{“zd”:“layers”,“mrz”:"’ ||
substr(str,
instr(str, ‘
“visibleLayers”:[’) +
length(‘
“visibleLayers”:[’),
instr(str, ‘
]}“,”sm"’) - instr(str, ‘“visibleLayers”:[’) -
length(‘“visibleLayers”:[’)) || ‘",“sm”:“三维动态图层拓展参数”}]’;
dbms_output.put_line(str);
end;


img


如果是要更新表里面的数据的话,直接一个update 就完事了,当然前提是你要确保字符串规则是完全一致的



update aa
set xx = xx || ‘,{“zd”:“layers”,“mrz”:"’ ||
substr(xx,
instr(xx, ‘
“visibleLayers”:[’) +
length(‘
“visibleLayers”:[’),
instr(xx, ‘
]}“,”sm"’) - instr(xx, ‘“visibleLayers”:[’) -
length(‘“visibleLayers”:[’)) || ‘",“sm”:“三维动态图层拓展参数”}]
where xx is not null


LINK:https://ask.csdn.net/questions/7656667?answer=53709398
SOURCE:CSDN_ASK
ASK_ID:7656566
ANSWER_ID:53709371
TITLE:刚学pl/SQL,想问一下怎样可以判断等腰直角三角形
ANSWER:

你这段plsql逻辑看上去没问题,你想问的是怎么输入参数能识别成等腰直角三角形吧?
假设a边=1,b边=1,那么c边就应该要等于根号2,开方的函数为sqrt,因此你c应该要输入 sqrt(2)


img


LINK:https://ask.csdn.net/questions/7656566?answer=53709371
SOURCE:CSDN_ASK
ASK_ID:7656196
ANSWER_ID:53708998
TITLE:谁能翻译一下这段内容,是Oracle的
ANSWER:

这玩意直接翻译出来你也不一定能懂,我换种方式说明一下吧


select e.,
d.department_name
from hr.employees e,hr.departments d
where e.department_id = d.department_id
and e.job_id=‘101’

img


上面这个sql里,执行计划就有nested loop,它就相当于套了两个循环,下面是伪代码


for erow  in (select * from employees where job_id=‘101’) loop
for drow in (select * from departments where department_id =erow.department_id ) loop
select erow.
,drow.department_name from dual;
end loop;
end loop;

最外层循环的employees 叫驱动表,因为它先定义了数据范围job_id=‘101’,然后把这个数据中的每一行丢到内部再循环获取departments 的数据


LINK:https://ask.csdn.net/questions/7656196?answer=53708998
SOURCE:CSDN_ASK
ASK_ID:7656360
ANSWER_ID:53708968
TITLE:dbeaver连接数据库报错
ANSWER:

检查下这台数据库的SQLNET.ora文件里是不是做了什么特殊配置


img


还可以参考这篇文章


LINK:https://ask.csdn.net/questions/7656360?answer=53708968
SOURCE:CSDN_ASK
ASK_ID:7656318
ANSWER_ID:53708947
TITLE:SQL 两列,第一列ID相同,第二列数据不全,增加第三列根据ID补全空值
ANSWER:

我和楼上考虑的点是一样的,第二列存在多种值的时候,第三列的规则应该是怎样的?excel的vlookup是取的从上往下数第一条.
另外,sql server2008支持的开窗函数太少了,first_value肯定是不支持的,可以改成用max,窗口里面不需要排序,但这就是假定第二列存在多种值的时候,第三列取第二列中的最大值了,题主并没有说清楚这个规则究竟应该是怎样的


select t.*, max(第二列) over(partition by 第一列) 第三列 from table as t;

LINK:https://ask.csdn.net/questions/7656318?answer=53708947
SOURCE:CSDN_ASK
ASK_ID:7656031
ANSWER_ID:53708929
TITLE:JDBC 的初始问题 统一资源定位符
ANSWER:

猜测一下哈,后面单独设置的属性会被当成字符串拼接,而拼接的规则就是在原字符串上 +"&" +key+"=" +value,如果原字符串后面没有任何参数的话,那连接串的格式就错了,所以至少得先接一个参数


LINK:https://ask.csdn.net/questions/7656031?answer=53708929
SOURCE:CSDN_ASK
ASK_ID:7656038
ANSWER_ID:53708917
TITLE:Oracle下载第七步卡在42%
ANSWER:

卡住不动等了多久了?oracle数据库安装有时候的确会出现卡进度条的假象,因为某一步操作需要消耗很长时间,而这个进度条又不是按照消耗时长均匀分配的长度。建议先等个1到2小时再看




有没有把杀毒软件什么的都关掉?




安装这种大型服务软件的时候,只要确保软件来源是可信的情况下,建议关闭所有三方安全软件及杀毒软件,因为这些所谓的安全软件会限制安装程序写注册表、注册动态库、以及复制文件到关键位置等等操作,然后好一点的安装软件就会不断重试,造成了卡在那里的假象


LINK:https://ask.csdn.net/questions/7656038?answer=53708917
SOURCE:CSDN_ASK
ASK_ID:7656147
ANSWER_ID:53708906
TITLE:高斯数据库,发现字段中英文混合,截取发现为字节数,汉字截取报错了
ANSWER:

你是不是用错函数了,不要用结尾带b的那个。
另外,注意字段的类型,如果是二进制的,要转换成文本再截取。


LINK:https://ask.csdn.net/questions/7656147?answer=53708906
SOURCE:CSDN_ASK
ASK_ID:7656340
ANSWER_ID:53708893
TITLE:怎么把数据导入html中以表格显示出来?
ANSWER:

纯静态网页,不借助其他开发语言的话,可以用excel公式去拼标签。
但如果你是有用什么开发语言,循环写标签不是很简单么?


LINK:https://ask.csdn.net/questions/7656340?answer=53708893
SOURCE:CSDN_ASK
ASK_ID:7656008
ANSWER_ID:53708286
TITLE:用审查元素的方式修改公司网页内容,然后把保存按钮显示出来,就可以保存修改后的数据
ANSWER:

因为公司发现了这个漏洞,就做了控制呗,这种控制前端后端数据库里都能做。
既然漏洞已经修掉了,哪还能那么容易让你钻空子呢?


LINK:https://ask.csdn.net/questions/7656008?answer=53708286
SOURCE:CSDN_ASK
ASK_ID:7655967
ANSWER_ID:53708240
TITLE:有没有人能给个将oracle数据库里指定表的所有字段名从小写修改成大写的脚本?
ANSWER:

刚好写过这个玩意,实际上就是循环拼接动态sql来执行


BEGIN
FOR REC IN (select *
from DBA_TAB_COLS C
WHERE C.OWNER = ‘用户名’
AND C.TABLE_NAME in (‘表A’,‘表B’,‘表C’)
AND COLUMN_NAME <> UPPER(COLUMN_NAME) LOOP
EXECUTE IMMEDIATE ’ alter table ‘ || REC.OWNER || ’.‘ || REC.TABLE_NAME ||
’ rename column “‘ || REC.COLUMN_NAME || ’” to ' ||
UPPER(REC.COLUMN_NAME);
END LOOP;
END;

LINK:https://ask.csdn.net/questions/7655967?answer=53708240
SOURCE:CSDN_ASK
ASK_ID:7655926
ANSWER_ID:53708200
TITLE:python无法创建数据库
ANSWER:

先把完整运行的代码和报错截图贴出来,因为并不确定你代码里其他地方是否有问题,单一个建表语句看不出,还有,生成不了肯定有个报错提示啊,报错提示里会告诉你为什么生成不了。


下面这个教程有完整的语法说明,你可以看一下,是不是有哪里和你理解的不一样


LINK:https://ask.csdn.net/questions/7655926?answer=53708200
SOURCE:CSDN_ASK
ASK_ID:7655858
ANSWER_ID:53708191
TITLE:装虚拟机ubuntu卡在这个地方是怎么回事?
ANSWER:

参考以下两篇文章,这个其实与ubuntu本身的关系不大,是vmware在安装工具,可以选择不安装或者事后自行安装的




LINK:https://ask.csdn.net/questions/7655858?answer=53708191
SOURCE:CSDN_ASK
ASK_ID:7655889
ANSWER_ID:53708188
TITLE:sublime中读取不了文件
ANSWER:

它这提示的就是没有这个文件,你去计算机的c盘下的file目录里看看这个文件在不在,还有文件名以及后缀是否正确


LINK:https://ask.csdn.net/questions/7655889?answer=53708188
SOURCE:CSDN_ASK
ASK_ID:7655911
ANSWER_ID:53708183
TITLE:mysql亿级数据量的时候,大家帮看看这个sql如何优化呢?
ANSWER:

只从个sql上看的话,
B和C建立联合索引(貌似可以建唯一索引?),A建立普通索引。
但是暂时无法理解BCD的业务含义,无法深入分析其具体应对的业务场景,
比如这个D=4就相当令人费解,还有BC如果查出来有多条记录,这个sql是会报错的,因为不是用的in。


另外,都已经亿级了,就不能做成分区表么?如果查询条件带分区字段,查询效率会提高不少


LINK:https://ask.csdn.net/questions/7655911?answer=53708183
SOURCE:CSDN_ASK
ASK_ID:7655850
ANSWER_ID:53708179
TITLE:恢复出厂设置可以恢复注册表误删吗?
ANSWER:

win10中的高级启动菜单里的确有恢复出厂的操作,但是这会删掉系统里所有你后来安装的软件,而且会删掉你所有的文件,请慎重执行。
这已经和重装操作系统差不多了。。。


LINK:https://ask.csdn.net/questions/7655850?answer=53708179
SOURCE:CSDN_ASK
ASK_ID:7655851
ANSWER_ID:53708176
TITLE:Window文件夹日志的错误怎么解决
ANSWER:

看上去是与NV显卡有关的问题,网上有不少人都有同样的问题,但引起的原因有很多


  1. 显卡供电不足


  2. 显卡驱动bug,建议老显卡用老版本的稳定驱动,新显卡用最新驱动
    https://g.nga.cn/read.php?tid=16732525&rand=76


  3. win10和win11某几个版本对显卡的支持存在问题,尝试更新一下补丁


  4. 显卡上部分元件坏了,这个时候只能换了



LINK:https://ask.csdn.net/questions/7655851?answer=53708176
SOURCE:CSDN_ASK
ASK_ID:7655862
ANSWER_ID:53708169
TITLE:装了Linux之后,是这个页面。是我用的光盘不一样吗,为啥没有也没有。终端都找不到
ANSWER:

你这个安装的是带有图形化界面的linux系统,
点左上角的applications(这个玩意相当于windows的开始菜单)
然后里面就应该能找到终端程序(terminal)


LINK:https://ask.csdn.net/questions/7655862?answer=53708169
SOURCE:CSDN_ASK
ASK_ID:7655837
ANSWER_ID:53708132
TITLE:mysql已经配好了环境变量,命令行窗口为什么还是不能用
ANSWER:
  1. 多个环境变量应该以分号";"进行分隔,从图上看,你C:\的前面没有分号
  2. path这个环境变量只需要配置好文件夹路径就行了,不需要配置到具体文件,所以后面的mysqld.exe不需要

LINK:https://ask.csdn.net/questions/7655837?answer=53708132
SOURCE:CSDN_ASK
ASK_ID:7655817
ANSWER_ID:53708110
TITLE:mysql 拆分表,怎么查询?
ANSWER:
  1. 建议尝试使用分区表的方式来替代拆分的实体表,这样使用指定条件的时候会自动指向分区,而不用全表扫。
  2. 拆分的时候,尽量按照业务定义来拆,比如与时间有关的,前端查询条件假设不会超过一个月,那么拆的时候就一个月拆一次。
  3. 结合应用代码逻辑,根据前端输入的查询条件,动态指向不同的拆分表。
  4. 当mysql的分区表和应用代码逻辑无法满足的时候,就表示该做大数据相关方面的建设了,比如建个数仓,并设计好相关数据统计模型

LINK:https://ask.csdn.net/questions/7655817?answer=53708110
SOURCE:CSDN_ASK
ASK_ID:7655781
ANSWER_ID:53708106
TITLE:如何读取mysql的结果实现with open读取txt的效果
ANSWER:

你是想实现这种效果?

img


import pymysql
db = pymysql.connect(host=‘localhost’,
user=‘root’,
password=‘123456’,
database=‘mysql’)
cursor = db.cursor()
sql=“SELECT group_concat(concat(‘’‘’,aid,‘’‘’) SEPARATOR ’ ’ ) a from test_20220306”
cursor.execute(sql)
data = cursor.fetchone()
print ("‘aid’ “+data[0])
db.close()

或者和txt里一样?


img


import pymysql
db = pymysql.connect(host=‘localhost’,
user=‘root’,
password=‘123456’,
database=‘mysql’)

cursor = db.cursor()
sql=“SELECT replace(group_concat(concat(‘’‘’,aid,‘’‘’) SEPARATOR ‘,’ ),‘,’,char(10)) a from test_20220306”
cursor.execute(sql)
data = cursor.fetchone()
print (”‘aid’ "+ ‘\n’ +data[0])
db.close()

LINK:https://ask.csdn.net/questions/7655781?answer=53708106
SOURCE:CSDN_ASK
ASK_ID:7655769
ANSWER_ID:53708067
TITLE:SQL 两列,第一列ID相同,第二列数据不全,增加第三列,根据ID补全空值
ANSWER:
  1. 请说明数据库类型及版本
  2. 第二列中,对于同一个id是否可能存在不为空的多个不相同的值?这个时候第3列要取哪个值?

比如下面这个数据要变成什么样子
id,第二列,第三列
2,a,null
2,b,null
2,null,null


LINK:https://ask.csdn.net/questions/7655769?answer=53708067
SOURCE:CSDN_ASK
ASK_ID:7655741
ANSWER_ID:53708022
TITLE:win10安装MySQL connector/python 失败
ANSWER:

鼠标右键,使用管理员身份运行,其实你贴的这个信息里面已经有失败原因和建议你要怎么操作了



The installer has insufficient privileges to access this directory: C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.7_3.7.2544.0_x64__qbz5n2kfra8p0\Lib\site-packages\mysql. The installation cannot continue. Log on as administrator or contact your system administrator.



大概翻译过来就是:安装程序没有这个目录的权限,安装不能继续,用管理员身份登录或者联系你的系统管理员


LINK:https://ask.csdn.net/questions/7655741?answer=53708022
SOURCE:CSDN_ASK
ASK_ID:7655713
ANSWER_ID:53708008
TITLE:视图 left join 一个千万级别的表查询非常慢已建立索引
ANSWER:

对于硬件配置较好的oracle数据库来说,千万行真不是什么问题。
一段段拆开来看吧。


  1. 首先是v_depositloan_hkzh 这个视图,里面的记录数和逻辑复杂度是怎样的?
  2. 关联的这个子查询查询后得到的记录数是多少?单独执行效率怎么样?
  3. 中间加的这个hint索引没有什么意义,还不如直接加并行hint
    /*+parallel (flow,12) */

  4. 实际应用中的查询条件是什么?应用是否可以修改成不使用视图,而是直接用这个sql,然后把查询条件写进子查询里?

以上是单从逻辑上来分析,另外,oracle21c支持一些新特性,比如sql宏,可以让视图外的查询条件写到视图内的子查询中,但NC系统估计是不会用这个oracle版本的


LINK:https://ask.csdn.net/questions/7655713?answer=53708008
SOURCE:CSDN_ASK
ASK_ID:7655705
ANSWER_ID:53707985
TITLE:MySQL语句问题,初学者
ANSWER:

mysql的外键语法


从你这两个表上来看,应该是想要tb_user的desc_id 来自于tb_user_desc 的id吧,那么外键就应该放在tb_user这个表上,按照普通的外键方式建立,这没有任何问题。
然后你说要设置外键唯一,如果是指在tb_user_desc中id唯一,那么也不用改什么了;如果是说desc_id在tb_user中唯一,那么再用这个字段建一个唯一约束或者唯一索引不就好了?


LINK:https://ask.csdn.net/questions/7655705?answer=53707985
SOURCE:CSDN_ASK
ASK_ID:7655451
ANSWER_ID:53707862
TITLE:linux 有哪些在使用命令时 需要加 /
ANSWER:

主要是避免歧义问题,假设你在bin下有一个python程序,然后下载了一个绿色版python放到了 /python3 文件夹下,
那么在你cd 到 /python3后,执行 python命令,它默认是会去执行你path环境变量下的程序,比如bin下的python,而非当前路径下的python,
所以运行时使用 ./python 就可以强行指定运行当前路径下的python


LINK:https://ask.csdn.net/questions/7655451?answer=53707862
SOURCE:CSDN_ASK
ASK_ID:7655574
ANSWER_ID:53707855
TITLE:关机后vscode的应用变成了unins0000.exe,怎么还原vscode
ANSWER:

这个不是变成了unins0000.exe,而是本来就有一个unins0000.exe,这个玩意是卸载程序,你打开它就会卸载vscode,这个文件夹下完整的文件是这样的


img


既然已经被卸载了,当然只能重新安装了


LINK:https://ask.csdn.net/questions/7655574?answer=53707855
SOURCE:CSDN_ASK
ASK_ID:7655386
ANSWER_ID:53707853
TITLE:sql2012下载失败
ANSWER:

你下载这个的这个是sqlserver2012.rar,先鼠标右键点它,选解压到当前文件夹,
然后这个文件夹下就会有一个iso文件,然后再鼠标右键点它,选解压到指定文件夹,(或者点装载也行,这样电脑就会多一个虚拟光驱,可以打开进行安装)
最后再进入这个文件夹打开setup.exe进行安装


LINK:https://ask.csdn.net/questions/7655386?answer=53707853
SOURCE:CSDN_ASK
ASK_ID:7655409
ANSWER_ID:53707849
TITLE:树莓派解压时找不到路径
ANSWER:

在Desktop这个路径下执行ls,看看到底有没有这个文件


LINK:https://ask.csdn.net/questions/7655409?answer=53707849
SOURCE:CSDN_ASK
ASK_ID:7655432
ANSWER_ID:53707847
TITLE:git push报错怎么解决
ANSWER:

如果是github的话,建议隔一会儿重试,因为国内访问github并不稳定,间歇性抽风


LINK:https://ask.csdn.net/questions/7655432?answer=53707847
SOURCE:CSDN_ASK
ASK_ID:7655463
ANSWER_ID:53707845
TITLE:下载数据库相关软件时遇到这个问题怎么解决?
ANSWER:

安装目录请不要使用中文等非英文字符
它这个提示是告诉你 "MySQL Workbench 不能 运行在 一个包含有 非ASCII字符 的路径里"


LINK:https://ask.csdn.net/questions/7655463?answer=53707845
SOURCE:CSDN_ASK
ASK_ID:7655510
ANSWER_ID:53707842
TITLE:一键重装xp系统后ie浏览器网页图片全部不显示全部是红色的x。
ANSWER:

winXP自带浏览器是IE6,目前大多数页面都不支持IE6了,请下载其他浏览器进行访问。
另外,IE6可以升级到IE7,可以解决一部分的网页兼容问题,
但建议如非必要,还是不要用IE了,毕竟微软官方都放弃IE作为WIN10默认浏览器了


LINK:https://ask.csdn.net/questions/7655510?answer=53707842
SOURCE:CSDN_ASK
ASK_ID:7655557
ANSWER_ID:53707840
TITLE:关于#android#的问题:请教一下如何制作安卓L2TP和PPTP拨号器?
ANSWER:

提示一下,安卓是开源的,所以完全可以在安卓源码中找到相关代码是怎么写的。。。




可以去安卓开源项目官网获得下载源代码的方式
https://source.android.com/setup/downloading


img


不过国内貌似不能直接访问哦


LINK:https://ask.csdn.net/questions/7655557?answer=53707840
SOURCE:CSDN_ASK
ASK_ID:7655539
ANSWER_ID:53707837
TITLE:第三范式传递依赖判断
ANSWER:

按照不同的表结构设计(或者说业务逻辑设计),这个既可以依赖也可以不依赖。
当一个老师可以教多门课程时,那么老师的这个表一般不会放课程,此时老师就不依赖于课程;
假设一个老师必须教一门课程且不能多于1门课程,那么在老师的这个表里就要放课程,此时老师就依赖于课程


LINK:https://ask.csdn.net/questions/7655539?answer=53707837
SOURCE:CSDN_ASK
ASK_ID:7655500
ANSWER_ID:53707826
TITLE:sql语句询问(我有这三列数据,需要找到人数前10的作品,其对应的作者的全部作品 这用sql语句该怎么写?)
ANSWER:

问sql题的时候,请提供你的数据库类型以及版本,
因为不同数据库以及不同版本,排序取前N行的sql有所区别。


然后,题主要求的不仅仅是取前十行,而是要求的取前十行的数据,提取出作者,然后再取这些作者的所有书,因此楼上专家的答案有点问题


以mysql为例,按照这个逻辑直接写的出sql是这样的


select * from 表名 where author  in (
select author from 表名 order by people desc limit 10
) t

LINK:https://ask.csdn.net/questions/7655500?answer=53707826
SOURCE:CSDN_ASK
ASK_ID:7655348
ANSWER_ID:53707815
TITLE:rootkit病毒会由U盘传播吗
ANSWER:

移动存储设备中的病毒向外扩散的方式,大多数都是通过"自动播放"这一功能,因此建议在电脑系统中设置关闭自动播放。这样插上去就不会自动扩散(针对大多数病毒)。
另外,千万不要以双击打开的方式打开可能携带病毒的设备以及文件。如果想查看移动设备中的文件,请鼠标右键资源管理器,这样可以避免执行移动设备中的autorun.inf,因为这个文件里记录的就是自动播放的内容,是可能含有扩散病毒的代码的。
目前常见的杀毒软件都可以杀rootkit了,因此你只要确保关闭了自动播放,把u盘插上去,先用杀毒软件扫一遍,确认没有问题再打开就行了


LINK:https://ask.csdn.net/questions/7655348?answer=53707815
SOURCE:CSDN_ASK
ASK_ID:7655150
ANSWER_ID:53707577
TITLE:笔记本不支持高清摄像头
ANSWER:

可以从三方面考虑


  1. USB供电能力,一般笔记本USB口输出功率比台式机要低,因此可以尝试加上外置电源
  2. USB接口传输速率,USB接口是有多种协议的,使用USB3.0的带宽比USB2.0要大
  3. 使用的摄像头驱动是否完全一致

LINK:https://ask.csdn.net/questions/7655150?answer=53707577
SOURCE:CSDN_ASK
ASK_ID:7655283
ANSWER_ID:53707561
TITLE:对象存储oss文件上传
ANSWER:

你数据库里这个字段的字段类型是啥?


LINK:https://ask.csdn.net/questions/7655283?answer=53707561
SOURCE:CSDN_ASK
ASK_ID:7654415
ANSWER_ID:53707552
TITLE:mysql的json_extract函数碰到部分数据为空报错
ANSWER:

条件加下面不行,那就加上面呗


select id,patient_name,hospital_name,
case when json_valid(data_content->>.report.stepPhase&#39;</span>) <span class="hljs-keyword">then</span> <br/>data_content-&gt;&gt;<span class="hljs-string">&#39;.report.stepPhase’ end as stepPhase
from mrc_report
where hospital_name = ‘积水潭医院’ and report_type != “balance”

LINK:https://ask.csdn.net/questions/7654415?answer=53707552
SOURCE:CSDN_ASK
ASK_ID:7655052
ANSWER_ID:53707529
TITLE:grace level2数据下载
ANSWER:

img


你这个网址里说在 ftp://podaac.jpl.nasa.gov/allData/grace/L2/CSR/RL06/ 这里看,但我这里打开太慢,不确定里面是不是还有数据,所以顺藤摸瓜找到了其官网,如下



但这个里面L2的文件夹是空的,L3的还有数据


img


另外,这个地址国内不能访问。。。


LINK:https://ask.csdn.net/questions/7655052?answer=53707529
SOURCE:CSDN_ASK
ASK_ID:7655124
ANSWER_ID:53707507
TITLE:MySql多对多,怎么插入中间表
ANSWER:

从你这个3个表的关系来看,应该要有3个维护操作,分别对应这3张表


  1. user可以单独创建
  2. group也可以单独创建
  3. 然后再多一步,用户选择一个user和一个group进行关联,后台就往关系表中插入一条记录(可能存在一个user对应多个group的情况)。

但是,如果你这个关系表就这么3个字段,而且user和group是一对一的关系,那么单独做这张表没有意义的,还不如在user表里再加一个gno字段,并修改一下操作流程


  1. 新建group,后台插入一笔group记录
  2. 新建user,并选择一个group关联到user(也可以为空group,后期可以修改),此时后台插入一笔user记录,里面已经包含了gno字段

LINK:https://ask.csdn.net/questions/7655124?answer=53707507
SOURCE:CSDN_ASK
ASK_ID:7655142
ANSWER_ID:53707503
TITLE:navicate导入表格时候出现Unknown system variable 'innodb_large_prefix’错误?如何解决
ANSWER:

mysql8里没有这个系统参数了,可以跳过这行代码不执行


参考官方文档


img


LINK:https://ask.csdn.net/questions/7655142?answer=53707503
SOURCE:CSDN_ASK
ASK_ID:7655203
ANSWER_ID:53707497
TITLE:MySQL中的一个字段的默认值为另外两个字段值的拼接,如何实现?
ANSWER:

参考语法


CREATE TABLE triangle (
sidea DOUBLE,
sideb DOUBLE,
sidec DOUBLE AS (SQRT(sidea * sidea + sideb * sideb))
);

这个 AS 括号里面的东西就是整个函数表达式
来自MYSQL官方文档


根据你这个例子,其实就是



create table temp_20220305(
id int,
inputdate datetime,
newcode varchar(20) as (concat(date_format(inputdate,‘%Y%m%d’),‘-’,id))
);

insert into temp_20220305(id,inputdate) values (1,now())

select * from temp_20220305

img


LINK:https://ask.csdn.net/questions/7655203?answer=53707497
SOURCE:CSDN_ASK
ASK_ID:7655112
ANSWER_ID:53707480
TITLE:mysql第七题 查询不会 求解
ANSWER:

两个表join,然后按部门聚合,汇总收入,用having 筛出大于9000 的


select max(dept_name) dept_name from 
dept,emp
where dept.dept1=emp.dept2
group by dept.dept1
having sum(incoming)>9000;

你信不信我这查询结果是对的,但你老师可能会判错,因为可能更多人是下面这么写的


select dept.dept1,dept.dept_name, sum(incoming)   incoming
from dept
join emp on dept.dept1=emp.dept2
group by dept.dept1,dept.dept_name
having sum(incoming)>9000

但是你可以发现,我给的第一个sql只group by 了一个字段,因为部门编号本就是唯一,再按部门名称group by 没有意义了,会拖慢性能,
而且第一个sql是按要求只输出了部门名称,没有输出其他的多余字段。
另外如果在MYSQL8.0以上,我第一个sql里面的max建议换成any_value


LINK:https://ask.csdn.net/questions/7655112?answer=53707480
SOURCE:CSDN_ASK
ASK_ID:7655040
ANSWER_ID:53707327
TITLE:WPS无法打开文件怎么办
ANSWER:

你之前是不是开启了文件加密功能?
如果使用的是第三方加密,那么只要再把软件装回来做好配置就行了,
如果是用的系统自带的加密,比如NTFS分区加密,那么加密的文件只能在本操作系统上打开,系统重装后就打不开了,需要使用一些特殊手段


LINK:https://ask.csdn.net/questions/7655040?answer=53707327
SOURCE:CSDN_ASK
ASK_ID:7654996
ANSWER_ID:53707269
TITLE:取出每个人最后更新的那条
ANSWER:

问sql以及数据库相关的题,请先说明使用的数据库类型以及数据库版本,因为不同数据库支持的sql写法不一样;
还有,需要提供相关的create table 和insert的sql,因为不同的字段类型处理方式也会不一样。
你这题存在歧义,假设表里只有这两个字段,那么简单的max聚合即可


select 工号,max(更新时间) 最后时间 fromgroup by 工号

但是如果这个表里不止这两个字段,而且要取出完整的行记录时,则需要使用开窗函数。
假设你用的数据库支持开窗函数,那么可以使用row_number()分组倒序排序后取第一条


select b.* from 
(
select a.*,
row_number() over(partition by 工号 order by 更新时间 desc) rn
from 表 a
) as b where rn=1

LINK:https://ask.csdn.net/questions/7654996?answer=53707269
SOURCE:CSDN_ASK
ASK_ID:7654936
ANSWER_ID:53707264
TITLE:怎么使用msql对中文列转行[无奈]
ANSWER:
  1. 请先说明数据库版本,不同版本支持的sql语法不一样
  2. 请把create table 和insert数据的sql放出来,方便答题人测试
  3. 请以表格的形式说明,最后需要的数据是长什么样子

另外,如果你英文列可以转,那么中文列也可以使用同样的方法转,这两者在逻辑上并没有什么区别




mysql 5.7 及以下版本支持的sql写法比8少多了,所以写这种sql会比较繁琐。
另外,sql标准是,一个sql必须有确定的列数和列名,你这个例子中是5行变5列,那么写出来的sql也就只能5行变5列,不能因为数据中有6行而自动变成6列。
还有,必须确定行号,因为如果没有确定的顺序,是不清楚你表里面哪一行是第一行的,所以我在你原表中加入了一个id字段用来识别顺序
下面是mysql5.7支持的写法之一


–测试数据
CREATE TABLE IF NOT EXISTS ld_cust_mm
(id int,
name VARCHAR(50)
,emp_name VARCHAR(100)
,s_name VARCHAR(100)
,c_name VARCHAR(100)
) ;
INSERT INTO ld_cust_mm VALUES (1,‘老大’,‘张三’,‘华联’,‘辣条’ );
INSERT INTO ld_cust_mm VALUES (2,‘老二’,‘李四’,‘物美’,‘苹果’ );
INSERT INTO ld_cust_mm VALUES (3,‘老三’,‘李逵’,‘优衣’,‘T恤’ );
INSERT INTO ld_cust_mm VALUES (4,‘老四’,‘李明’,‘三星’,‘手机’ );
INSERT INTO ld_cust_mm VALUES (5,‘老五’,‘王君’,‘艾尔’,‘大宝’ );

–查询sql
select
max(case when id=1 then name end ) name1,
max(case when id=2 then name end ) name2,
max(case when id=3 then name end ) name3,
max(case when id=4 then name end) name4,
max(case when id=5 then name end ) name5 from (
SELECT id,‘name’ tp,name FROM ld_cust_mm union all
SELECT id,‘emp_name’ tp,emp_name FROM ld_cust_mm union all
SELECT id,‘s_name’ tp,s_name FROM ld_cust_mm union all
SELECT id,‘c_name’ tp,c_name FROM ld_cust_mm
) as t group by tp
;

img


另外,其实这种数据处理,如果允许导出数据,那么在excel中全选复制、选择性粘贴、勾上转置的方式来处理要快得多


LINK:https://ask.csdn.net/questions/7654936?answer=53707264
SOURCE:CSDN_ASK
ASK_ID:7654957
ANSWER_ID:53707261
TITLE:sql求出每两个相邻的时间差
ANSWER:

问sql以及数据库相关的题,请先说明使用的数据库类型以及数据库版本,因为不同数据库支持的sql写法不一样;
还有,需要提供相关的create table 和insert的sql,因为不同的字段类型处理方式也会不一样。
假设你用的数据库是oracle,支持开窗函数,date类型也可以直接相减,那么可以使用lag或者lead来查询上一行或者下一行


select a.,
lag(a.Load_Time) over(order by a.Period_Key) 上一行的时间,
lag(a.Load_Time) over(order by a.Period_Key)- a.Load_Time 时间差天数,
(lag(a.Load_Time) over(order by a.Period_Key)- a.Load_Time)
246060 时间差秒数
froma

如果是sqlserver,在使用开窗函数获得上一行的时间后,用 datediff(second, 开始日期,结束日期) 来计算时间差


select a.*,
lag(a.Load_Time) over(order by a.Period_Key) 上一行的时间,
datediff(second, lag(a.Load_Time) over(order by a.Period_Key),a.Load_Time) 时间差秒数
froma

但sqlserver2008版本太老了,不确定是否有lag函数,当前没有环境可以测试


img


微软官方都没有提供这个版本的文档了


img




刚在官网一个角落找到了sqlserver2008r2的文档,里面没有介绍有关开窗函数的内容


除了使用开窗函数以外,要在本行查询到非本行数据,只能使用自关联了,
针对此题,先把第一个字段转换成日期类型,然后这个表自己join自己,关联on的条件是前一个表的日期等于后一个表的日期加一天,这样就能把上下相邻的两行放到同一行里了,此时可以使用datediff函数计算时间差


LINK:https://ask.csdn.net/questions/7654957?answer=53707261
SOURCE:CSDN_ASK
ASK_ID:7654985
ANSWER_ID:53707254
TITLE:ora-12546怎么解决
ANSWER:

有报错截图没?




你有没有发现,你截图中的报错和你问题里的报错不一样?




现在报错代码提供正确了,但是引起这个报错的原因有很多,目前网上常见的,该问题发生在操作系统与数据库的兼容性上面,比如32位和64位冲突或者在win10上安装早已经不被支持的oracle10g等。
根据你这个联网和不联网的现象来看,还有可能是设置了禁止远程登录sysdba身份,所以你的监听配置是可能有问题的,所以要么改监听,要么允许远程sysdba登录


以下这几篇文章中的解决方案也可能对你有用



只有看清楚错误信息,才可能在网上去搜索相关内容


LINK:https://ask.csdn.net/questions/7654985?answer=53707254
SOURCE:CSDN_ASK
ASK_ID:7654917
ANSWER_ID:53707241
TITLE:装机方面遇到问题急需解决,有偿
ANSWER:
  1. 为什么工作软件不能在虚拟机里用?而且windows自带hyper-V虚拟机,不需要装其他三方收费的虚拟机了。我之前的有些古董级的开发软件就只能在xp上跑,弄个虚拟机相当舒坦,而且可以建立共享文件夹,映射盘符,两个系统的文件都可以共享使用
  2. 我在4代U的机器上直接装过xp,虽然勉强还能跑,但已经有部分硬件没有驱动无法完全正常使用了,更别说你的10代U了,主板驱动、pcie4.0驱动、CPU驱动等等啥的新硬件驱动都没有xp兼容的

LINK:https://ask.csdn.net/questions/7654917?answer=53707241
SOURCE:CSDN_ASK
ASK_ID:7654164
ANSWER_ID:53707232
TITLE:按照查询条件,分别把 表#tb02 的 w1~11 替换成对应的数字,并每一行从小到大排序
ANSWER:

sql来了


select * from ( 
select a.id,c.val,‘n’+cast(row_number()over(partition by a.id order by case when c.val is null then 1 else 0 end ,c.val) as nvarchar(10)) new_col
from
(select id,val,col
from #tb02 unpivot (val for col in (n1,n2,n3,n4,n5,n6,n7,n8,n9,n10,n11)) as t ) as a left join
(select * from #tb unpivot (val for col in (w1,w2,w3,w4,w5,w6,w7,w8,w9,w10,w11)) as t) as c on a.val=c.col
) as n pivot (min(val) for new_col in ( n1, n2, n3, n4, n5, n6, n7, n8, n9, n10, n11)) as o

img


除了你曾经提出的这些问题以外,我是真没见过拿数据库做这种事的。
这些问题是你自己想出来的还是有什么实际应用场景?


LINK:https://ask.csdn.net/questions/7654164?answer=53707232
SOURCE:CSDN_ASK
ASK_ID:7654528
ANSWER_ID:53707137
TITLE:关于#sql#的问题,请各位专家解答!
ANSWER:
select a.sname from sailors a,boats b,reserves c 
where a.sid=c.sid and b.bid=c.bid and b.color=‘red’;

LINK:https://ask.csdn.net/questions/7654528?answer=53707137
SOURCE:CSDN_ASK
ASK_ID:7654912
ANSWER_ID:53707128
TITLE:为什么这个SQL语句一直不正确
ANSWER:

左上角切换一下数据库类型,因为sqlite数据库不支持comment添加字段注释


LINK:https://ask.csdn.net/questions/7654912?answer=53707128
SOURCE:CSDN_ASK
ASK_ID:7654812
ANSWER_ID:53707107
TITLE:连接本地数据库没有问题,但是连接服务器数据库报错No operations allowed after connection closed.怎么解决
ANSWER:

Connection is not available, request timed out after 30052ms.



连接不可用,请求超时
这就是没连上嘛,请检查连接配置,以及是否有网络权限


LINK:https://ask.csdn.net/questions/7654812?answer=53707107
SOURCE:CSDN_ASK
ASK_ID:7654879
ANSWER_ID:53707100
TITLE:join和select子句中的子查询 效率比较
ANSWER:

这两种方式在不同场景下,效率可能各有高低,主要是看这两个表中的记录数、通过where限制条件后需要展示的记录数、主表(或者说一个主查询SQL)是否为一个比较复杂的查询。
在原表数据量大、主SQL比较复杂,且最终需要的记录数不多的情况下,比如只有一行,那么用标量子查询可能会比较快。
如果数据都不大,SQL也不复杂,最终要展示的记录数和原表差不多时,用join。
标量子查询是要一行一行去查的,当数据量少时有优势,数据量大循环次数多就没有优势了。
至于为什么要比较主SQL的复杂度,是基于内存考虑,本来主SQL的窗口大小已经够大了,再join一个表,窗口中的列数又变多了;而标量子查询是在查出关联字段的数据后再去检索匹配字段,占内存会比较小。
所以这两种方式哪种好,应该在实际的应用场景中亲自去试,这个没有绝对的


LINK:https://ask.csdn.net/questions/7654879?answer=53707100
SOURCE:CSDN_ASK
ASK_ID:7654689
ANSWER_ID:53706819
TITLE:请问一下这里的 is是用来比较地址是否一致的吗 还有A和C不是一个形式吗 为什么x is y输出不为True呢?
ANSWER:

XY和MN的区别在于,XY是浮点,MN是整型


img


img


is 比较的东西,可以理解为是 id() 返回的值,在这里可以发现,对于值相同的两个浮点,返回的地址是不一样的,至于为什么会不一样,这是python的规则


而且还有个与这个题类似的


img


LINK:https://ask.csdn.net/questions/7654689?answer=53706819
SOURCE:CSDN_ASK
ASK_ID:7653998
ANSWER_ID:53706818
TITLE:SQL语句如何进行优化?
ANSWER:

我觉得,把 t3.type_ = 2 这个条件,从on 里去掉,放到where后面,可能会比你目前要好


SELECT
t1.id,
t1.type_code,
t1.type_name,
t1.cjr,
t1.create_time,
t1.parent_id,
t1.is_parent,
t1.type_sort,
GROUP_CONCAT( DISTINCT t2.id ) AS regime_id_list
FROM
hr_regime_category t1
JOIN hr_regime_info t2 ON t1.id = t2.category
JOIN hr_regime_department t3 ON t2.id = t3.regime_id_
JOIN sys_dept d ON t3.dept_id_ = d.dept_id
JOIN sys_user u ON d.dept_id = u.dept_id
where t3.type_ = 2
GROUP BY
t1.type_code
ORDER BY
t1.type_sort,
t1.create_time ASC

LINK:https://ask.csdn.net/questions/7653998?answer=53706818
SOURCE:CSDN_ASK
ASK_ID:7654149
ANSWER_ID:53706817
TITLE:SQL条件判断筛选问题
ANSWER:

加一个where条件


and h.supplier_id is not null

分析过程:
你这个所谓出现重复记录的地方,供应商一个为空一个有值,很明显并不是供应商表中出现了问题,所以看这个字段的来源,
首先是I表,但很明显,这是供应商主档表,不会有供应商为空的情况
然后I表和H表连接,这个暂时不明,H表继续和A表连接,但A表说了只会有一条记录,
那么问题极有可能出现在H表,即H表中,对于同一个requesition_d_id,会存在两条记录,其supplier_id字段,一行为空,一行有值。
因此得出需要加上面这个条件的结论。
当然,这个条件不能加在最后,而是应该加在查询 h表时,即


left join (select * from req_dispatched where supplier_id is not null) h on a.requesition_d_id=h.requesition_d_id

另外,这种代码麻烦不要贴截图,请直接使用代码块添加,你提问的时候,平台上是有提示的吧


LINK:https://ask.csdn.net/questions/7654149?answer=53706817
SOURCE:CSDN_ASK
ASK_ID:7654152
ANSWER_ID:53706815
TITLE:请问HANA如何排除字段为空的行?
ANSWER:

你如果是希望排除某几个字段同时为空的数据,可以这么写条件


where not (a is null and b is null and c is null)

LINK:https://ask.csdn.net/questions/7654152?answer=53706815
SOURCE:CSDN_ASK
ASK_ID:7654234
ANSWER_ID:53706810
TITLE:MySQL 千万级 分组怎么优化
ANSWER:

建议写个定时任务,每天凌晨执行一次统计,将结果插入到一张汇总表,然后其他程序就查这张汇总表。
这样既保证了数据准确,又保证了查询效率,而且还节省了数据库的开销。
年龄这玩意,用你的算法,1天之内是不会发生变化的吧


LINK:https://ask.csdn.net/questions/7654234?answer=53706810
SOURCE:CSDN_ASK
ASK_ID:7654276
ANSWER_ID:53706806
TITLE:sqlserver2012无法执行KILL命令
ANSWER:

无法在用户事务内部使用,那意思其实就是可以在用户事务外部使用。
你是在当前事务下制造的锁,然后又想在当前事务下杀死自己,这在sqlserver里是不被许可的。
所以你可以尝试新建一个连接以开启新的事务,然后再执行kill命令


LINK:https://ask.csdn.net/questions/7654276?answer=53706806
SOURCE:CSDN_ASK
ASK_ID:7654317
ANSWER_ID:53706803
TITLE:oracle相关问题
ANSWER:

在线的免费oracle环境大多数不提供本地直连,而且拒绝从数据库里连接到外网,因为oracle数据库里可以直接对操作系统进行各种侵入式操作,太危险了。
oracle官方的oracle cloud是免费申请,但是需要国际信用卡,而且本地连接比一般的数据库连接要麻烦不少,主要是还要配置wallet
如果仅仅只是测试plsql,你可以尝试拉一个oracle的docker,容器启动就啥都给你装好配置好了,直接连就是,而且不需要担心本地环境被搞乱


测数据库基本功能,可以尝试使用墨天轮提供的在线实训数据库,这个是提供了一个整个操作系统


另外,还有一些平台可以切换不同的数据库简单的跑跑sql,比如



LINK:https://ask.csdn.net/questions/7654317?answer=53706803
SOURCE:CSDN_ASK
ASK_ID:7654323
ANSWER_ID:53706798
TITLE:使用python往mysql中传入数据编码出现问题
ANSWER:

插入时,使用convert函数转换字符集


 CONVERT(‘中文’ USING GBK)

LINK:https://ask.csdn.net/questions/7654323?answer=53706798
SOURCE:CSDN_ASK
ASK_ID:7654330
ANSWER_ID:53706795
TITLE:请大家帮我看下什么原因?
ANSWER:

建议你先直接用数据库管理工具连接mysql,直接执行一下这条sql,看看到底有没有数据。
如果数据库里本来就查不到,你再怎么检查自己的代码都检查不出来问题所在


LINK:https://ask.csdn.net/questions/7654330?answer=53706795
SOURCE:CSDN_ASK
ASK_ID:7654339
ANSWER_ID:53706794
TITLE:odbc连接oracle数据库查询sql乱码
ANSWER:

userenv(‘language’)这个是查的客户端的字符集。
oracle数据库中,没有提供任何以sql的方式来查询数据库的字符集。
这代表在大多数时候,应用开发不需要管oracle数据库的字符集。
然后你查到的客户端字符集为US7ASCII,这玩意肯定是不能显示中文的,这个东西取的是你的环境变量NLS_LANG中的配置,所以你当前NLS_LANG就配置错了。
字符集这一段,如果要显示简体中文,要么配置成AL32UTF8,要么配置成ZHS16GBK,至于配置成哪个,应该与你的应用代码页保持一致。
更多关于oracle字符集的内容,可以参考我这篇文章


LINK:https://ask.csdn.net/questions/7654339?answer=53706794
SOURCE:CSDN_ASK
ASK_ID:7654413
ANSWER_ID:53706790
TITLE:mysql删除某个表100条之后的数据
ANSWER:

如果表里面有唯一标识符,比如id或者单号什么的,
且如果mysql版本是8.0以上,
那么可以先使用开窗函数定位第101-123的唯一标识id,然后删除时in这些id就行了


—查询
select id from (select id,row_number()over(order by 日期) rn from 表) where rn>100;
—删除
delete fromwhere id in (
select id from (select id,row_number()over(order by 日期) rn from 表) where rn>100
);

LINK:https://ask.csdn.net/questions/7654413?answer=53706790
SOURCE:CSDN_ASK
ASK_ID:7654447
ANSWER_ID:53706789
TITLE:用正则替换字符串里括号里面所有内容
ANSWER:
select regexp_replace( ‘深圳(今天a01)百度(a01)(我)’,‘\([^\)]+\)’,‘’) 

img


原理,识别所有的以左括号开始中间任意个数字符然后以右括号结尾,然后替换成空
hive的正则,某些符号的转义需要双斜杠




非得一个个符号解释么。。。


\(   表示左括号开始,HIVE转义要双斜杠
[^\)]+ 表示除了右括号外的任意字符,加号表示任意个数
\) 表示右括号结尾

也就是说,这个正则表达式匹配的就是所有的括号及括号里的内容


LINK:https://ask.csdn.net/questions/7654447?answer=53706789
SOURCE:CSDN_ASK
ASK_ID:7654484
ANSWER_ID:53706781
TITLE:达梦数据库创建视图后插入数据显示视图为只读视图
ANSWER:

当然啊,你这个视图里有两个表,不能直接插入的。
建视图的主要目的是为了方便查询,而不是为了编辑,老老实实的一张一张表处理吧。
绝大多数的视图都是只读。
对视图数据进行编辑的情况我见过两种:
一种是双表平衡负载,两张表一模一样,今天视图里是这张表,明天视图里是另外一张表,视图里的代码就是select * from 这张表
另一种是在视图中增加触发器,捕获插入、修改、删除动作,全部instead,不执行对该视图的任何操作,修改为对视图中引用的表进行分别的操作,这些代码也要逐个表来写,不能一条sql命令同时对多个表进行处理


LINK:https://ask.csdn.net/questions/7654484?answer=53706781
SOURCE:CSDN_ASK
ASK_ID:7654495
ANSWER_ID:53706779
TITLE:oracle与pg数据库差异
ANSWER:
  1. 你在oracle里怎么用的limit?
  2. 你用的什么界面工具?有些oracle工具(比如plsql developer)会默认加上 fetch first n row only或者强行加hint指定执行计划以只获取前n行进行展示,当继续往下展开时还是会继续从数据库中获取数据;而某些pg数据库的界面工具并没有此类优化。
  3. 你只说了是单张千万上亿的表,但比较性能不能只看这一个,比如数据库是安装在什么样配置的硬件上,还有给数据库分配的资源是否有差异,表中的数据是否已经经过了统计分析,碎片率怎么样,等等

LINK:https://ask.csdn.net/questions/7654495?answer=53706779
SOURCE:CSDN_ASK
ASK_ID:7654568
ANSWER_ID:53706778
TITLE:请问大家 我想添加一个“入职时间”的字段 意思就是在每一个人后面填充进对应入职时间 应该怎么办啊
ANSWER:

"insert" 是指插入,数据库中对表数据的插入都是指插入一行。
要修改原有行记录中的字段的值时,请用"update",即更新


LINK:https://ask.csdn.net/questions/7654568?answer=53706778
SOURCE:CSDN_ASK
ASK_ID:7654576
ANSWER_ID:53706777
TITLE:SQL 多行ID相同,但只有第一行有数值,把其他行空值填充第一行的值
ANSWER:

先说下用什么数据库以及版本,并且提供一下你的表结构,因为不同数据库的写法是有区别的。
一般来说,这种情况可以用开窗函数,因为开窗函数的特点就是能在本行查非本行的内容。
假设你有一个表有二个字段


uidc
1a
1
2b
2

那么可以使用类似如下的sql


select id,max© over(partition by id) from

当然max不是唯一选择,sum也行,甚至还可以用first_value或者last_value排序取第一行或者最后一行。
重点是要形成一个意识,本行数据的某个字段要用到非本行数据时,开窗


LINK:https://ask.csdn.net/questions/7654576?answer=53706777
SOURCE:CSDN_ASK
ASK_ID:7653892
ANSWER_ID:53705592
TITLE:SQL语句如何优化。
ANSWER:

假设不改主体逻辑的话,可以把你这些or的条件改成in,这样代码会短不少。
不过,这一堆参数看着实在太乱了,以后加类型还得改sql。
所以,建议新建两个配置表,分别至少有两个字段,运营商和yrtre,运营商和fdssag,并且yrtre和fdssag建立唯一索引,之后就可以关联着查了


LINK:https://ask.csdn.net/questions/7653892?answer=53705592
SOURCE:CSDN_ASK
ASK_ID:7653821
ANSWER_ID:53705571
TITLE:请问怎么做怎么做做呀
ANSWER:

首先,题目标题里麻烦对问题进行简要描述,你这题我差点就跳过去了,
然后,sql题请提供你的表结构(create table)、测试数据(insert),以及你最终需要的数据的样子(表格数据),


这里我假设你是用的oracle自带的hr这个schema中employees表,
一般这种题有两种方式,
普通点的就是先算出每个部门的平均工资得到一个数据(两列),再去关联原表进行计算,但这要查两次原表。
所以建议用开窗函数,只用查一次原表


select department_id, round(count(i)/count(1)*100,2)||‘%’ p
from (select a.department_id,
case
when a.salary > avg(a.salary)
over(partition by a.department_id) then
1
end i
from hr.employees a)
group by department_id

img


答案不是唯一的,就算使用开窗函数,这个题也可以写得五花八门


LINK:https://ask.csdn.net/questions/7653821?answer=53705571
SOURCE:CSDN_ASK
ASK_ID:7653817
ANSWER_ID:53705550
TITLE:MySQL 命令不了,特别好奇
ANSWER:

这个其实就是停止服务,你可以去Windows的计算机管理里,找到对应的服务来关闭或者开启。
如果你报这个,说明你是乱改环境变量了,可以参考这篇文章再改一下


但是,如果之前path里还有别的,估计你得看看别人正常的电脑里还有些啥再对照着补回来了


LINK:https://ask.csdn.net/questions/7653817?answer=53705550
SOURCE:CSDN_ASK
ASK_ID:7653709
ANSWER_ID:53705472
TITLE:mysql查询语句 select id from table where id in (1,2,3) 和id in (2,5,4)两个sql什么区别?
ANSWER:

这个我做个类比吧,
假设有一张excel表,里面有5行数据,id即为行号,然后你只能通过键盘上下键来移动光标定位数据。
假设光标始终初始在第一行,
当你要定位第1、2、3行时,只需要按两次下键即可让光标扫到所有需要的行;
当你要定位第2、5、4行时,先把光标下移到2,然后再下移到5,再上移到4,需要按 下、下下下、上,一共6次按键
但如果第2例是2、4、5的顺序,你就会发现需要的操作会变少,只需要按4次下就行了。


上面这个类比中,excel表格就相当于磁盘存储,光标就相当于磁盘的磁头,尽量让其要读取的数据是连续的,这样能减少一些不必要的性能开销


LINK:https://ask.csdn.net/questions/7653709?answer=53705472
SOURCE:CSDN_ASK
ASK_ID:7653739
ANSWER_ID:53705458
TITLE:请教SQL自连接的实现?
ANSWER:

用开窗函数只需要查一次这个表,不知道为啥要用什么自连接


select last_name, job_id, salary from 
(SELECT last_name, job_id, salary,dense_rank() over(order by salary desc ) rk
FROM employees) as e
where rk=1

自连接无非就是同一个表写两个别名,然后join起来,但你这个是要找工资最少的,那么当然是min一下,但这个数据聚合后就不是同一个表了,所以换个思路,


select a.last_name,a. job_id, a.salary
from employees a left join employees b
on a.salary >b.salary
where b.salary is null

即在b表中不存在比a表中还小的数据时, a表这一行就是最小。
虽然结果是正确的,但是,这个sql极其浪费性能,把where条件去掉就能发现,这个join构造了一个远超原表记录数的数据


LINK:https://ask.csdn.net/questions/7653739?answer=53705458
SOURCE:CSDN_ASK
ASK_ID:7653657
ANSWER_ID:53705373
TITLE:sql中in database的使用?
ANSWER:
  1. 先说明一下你是用的什么数据库,不同数据库的语法有所区别,而且不同数据库关于database(数据库)、schema(模式)和user(用户)的定义也不同
  2. 一般来说,创建一个数据库后,需要写命令切换到该数据库(在某些数据库上需要登录该数据库),然后再执行创建表的命令
  3. 有些数据库,可以在建表的时候,直接在表名前面加上 "数据库名称." ,即可在不切换到指定数据库时直接将表创建到对应的数据库中

一定要注意,千万不要把不同厂家的数据库混为一谈,有些数据库的database层级是其他数据库的schema层级,有些数据库schema和user是一个层级


LINK:https://ask.csdn.net/questions/7653657?answer=53705373
SOURCE:CSDN_ASK
ASK_ID:7653617
ANSWER_ID:53705362
TITLE:hana数据库 sql版本号字段的问题
ANSWER:

先分组排序,然后再筛选出每组中的第一行,最后求和。另外,排序的确会有问题,当你版本大于10以后,按字符串排序就不对了,所以要转换成数字再来排序


select sum(b.money) from (
select a.*,row_number() over (partition by id order by CAST (replace(ver.‘V’,‘’) as INTEGER) desc) rn from 表 a) as b
where b.rn=1

LINK:https://ask.csdn.net/questions/7653617?answer=53705362
SOURCE:CSDN_ASK
ASK_ID:7653337
ANSWER_ID:53705298
TITLE:SQL SERVER 存储过程 多行数据不同的时间段进行合并,有什么便捷的实现方法吗?
ANSWER:

你想合并成什么样子?


LINK:https://ask.csdn.net/questions/7653337?answer=53705298
SOURCE:CSDN_ASK
ASK_ID:7653346
ANSWER_ID:53705295
TITLE:关于postgre \o 命令如何输出制表符或者其他特殊符号
ANSWER:

看下这篇文章吧, 这篇文章示例中,\o的sql里面已经拼接好了分隔符


在官方文档中\o的命令也没有分隔符参数
http://postgres.cn/docs/12/app-psql.html


img


因此,如果要使用自定义分隔符的话,建议使用copy命令


LINK:https://ask.csdn.net/questions/7653346?answer=53705295
SOURCE:CSDN_ASK
ASK_ID:7653354
ANSWER_ID:53705284
TITLE:mysql关联模糊查询时,加入排序变得很慢
ANSWER:

这样试试


select B.showCode, B.Name, B.Sex, A.AppointmentDate 
from A ,B
WHERE A.PatientID = B.PatientID
and A.AppointmentDate>=date_sub(current_date(), interval ‘10’ day)
and A.isFinish = 0
and (B.Name like ‘%1111%’ or B.showCode like ‘%1111%’)
and B.HospitalID = ‘20220302160409’
ORDER BY 4

LINK:https://ask.csdn.net/questions/7653354?answer=53705284
SOURCE:CSDN_ASK
ASK_ID:7653151
ANSWER_ID:53704834
TITLE:上课用不了虚拟机怎么办
ANSWER:

方法一:按下重启电脑后,狂点del,进入bios
然后在bios里开启vt-x虚拟化
方法二:修改虚拟机设置,把虚拟化相关的设置禁用掉


LINK:https://ask.csdn.net/questions/7653151?answer=53704834
SOURCE:CSDN_ASK
ASK_ID:7652990
ANSWER_ID:53704827
TITLE:为什么通过sql查询生成的dataframe转换成列表和读取csv文件转换成列表的数据不一样呀(语言-python)
ANSWER:

csv文本抛弃了字段类型,再读取的话是无法识别原字段类型的,这样有可能导致数据处理出问题。而df可以保留原字段类型


LINK:https://ask.csdn.net/questions/7652990?answer=53704827
SOURCE:CSDN_ASK
ASK_ID:7653095
ANSWER_ID:53704825
TITLE:关于plsql for循环和goto语句的使用
ANSWER:

参考下面这个,


begin
for i in 2, 1, 3 loop
if i = 1 then
dbms_output.put_line(i);
elsif i = 2 then
dbms_output.put_line(i);
elsif i = 3 then
dbms_output.put_line(i);
end if;
end loop;
end;

一般如非必要,不太建议使用goto,goto的大多数场景都可以用判断及循环来实现


LINK:https://ask.csdn.net/questions/7653095?answer=53704825
SOURCE:CSDN_ASK
ASK_ID:7652642
ANSWER_ID:53704390
TITLE:egg-mysql怎么批量操作数据
ANSWER:

一般这种工具都会提供自定义sql执行的,比如


const results = yield app.mysql.query(‘update posts set status = 1 where id in (4,5,6,7,8,9)’);

参考官方文档


LINK:https://ask.csdn.net/questions/7652642?answer=53704390
SOURCE:CSDN_ASK
ASK_ID:7652377
ANSWER_ID:53704274
TITLE:关于本地navicat连接远程oracle报错
ANSWER:

只要数据库服务起来了,那么数据库服务器本地就是可以连接数据的;
但如果要外部可以连接上这个数据库,那么需要把数据库的监听服务开起来


lsnrctl start

并且你需要确保监听文件配置是正确的


LINK:https://ask.csdn.net/questions/7652377?answer=53704274
SOURCE:CSDN_ASK
ASK_ID:7652812
ANSWER_ID:53704259
TITLE:mysql不会建表 求解答
ANSWER:

你在这个数据库里,输入下面这条命令回车,就可以查出建表的sql了


show create table 表名;

LINK:https://ask.csdn.net/questions/7652812?answer=53704259
SOURCE:CSDN_ASK
ASK_ID:7652818
ANSWER_ID:53704249
TITLE:python往数据库里面插入一段js代码,提示错误,如何解决?
ANSWER:

这个要根据你插入是用的字符串拼接的方式还是用的绑定变量的方式来看,
如果是字符串拼接,那么给字符串变量赋值的时候,字符串中的单引号要替换成两个单引号


html_code = html_code.replace(“'”,“‘’”)

因为sql中,单引号引起来的表示字符串,你直接拼含单引号的字符串时,会导致字符串被截断,因此需要使用两个单引号。
如果是用的绑定变量的话,就不存在这个问题了。


LINK:https://ask.csdn.net/questions/7652818?answer=53704249
SOURCE:CSDN_ASK
ASK_ID:7652844
ANSWER_ID:53704238
TITLE:oracleA表时间是否在B表时间段里?
ANSWER:

这个问题看上去,是打算根据日计划汇总月计划,并且月份的日期分段由B表确定


select b.vc_month, sum(a.day_plan) month_plan
from a, b
where a.time between b.d_begin_date and b.d_end_date
group by b.vc_month

LINK:https://ask.csdn.net/questions/7652844?answer=53704238
SOURCE:CSDN_ASK
ASK_ID:7652766
ANSWER_ID:53704227
TITLE:excel进行查找时,只能显示被找到的单元格数,但我想查找某个数字总共出现几次,怎么解决
ANSWER:

找个空单元格,输入


=SUM(LEN(A:A)-LEN(SUBSTITUTE(A:A,“1”,“”)))/LEN(“1”)

注意公式输入完后不要按回车,而是按 ctrl + shift +回车,即数组公式


img


此方法来自微软office官方文档


img


LINK:https://ask.csdn.net/questions/7652766?answer=53704227
SOURCE:CSDN_ASK
ASK_ID:7652638
ANSWER_ID:53704090
TITLE:union all後数据来源哪张表
ANSWER:
select * from a union all b 

其实就是先查a表,放在查询结果的最上面,然后再查b表,把b表数据拼在刚刚查出来的a表数据的下面。
你说的x字段,当然来自a表的数据属于a表,来自b表的数据属于b表呗。
如果你是想区分,某行数据来自哪个表,那么需要在这个SQL上加一个查询字段


select ‘A’ 来源,a.* from a
union all
select ‘B’ ,b.* from b;

LINK:https://ask.csdn.net/questions/7652638?answer=53704090
SOURCE:CSDN_ASK
ASK_ID:7652686
ANSWER_ID:53704078
TITLE:计算机网络几乎0基础 求一个懂ip知识的朋友回答下疑问
ANSWER:

静态ip就是不会变的ip,与之相反的就是动态ip。
原生IP是指由当地ISP运营商提供的本地IP,原生属于当地,并非是指由 IP 分配机构(例如 ARIN/APNIC 等)指派在某个地区使用的 IP


独立IP就是这个IP不是共用的。
代理IP是有角度追踪来源的,但一般开发商不会去做,因为耗费成本过高。
查IP所在区域很简单,你打开百度首页,输入IP,点搜索,就会出现IP的归属地

img


LINK:https://ask.csdn.net/questions/7652686?answer=53704078
SOURCE:CSDN_ASK
ASK_ID:7652547
ANSWER_ID:53703846
TITLE:mysql查询近一年数据 有的月没有数据但是还是需要展示商品名
ANSWER:

方案一,你这个数据库里应该还有个完整的商品信息表吧,你把那个商品信息表和你做的这个月份数据进行笛卡尔积join,即不使用任何条件,即可得到任意商品和任意月份的组合数据,这个时候再用这个数据去left join你的订单数据即可。但是这个缺点是,你商品表里可能有很多垃圾数据,即从未进行过任何交易的商品,这样最后你的数据里就会存在很多无用数据。所以,你还可以尝试用这个订单数据distinct商品出来替代前面说的这个完整商品信息表,但缺点就是查询效率变低了


方案二,如果是8.0以上,可以使用with递归,判断本行没有数据就用上一行的数据(商品名称),但你没写数据库版本,也没给建表和模拟数据的sql,我就不细说了,可以参考下面这个问答,只是"WITH cte_name AS" 要改成"WITH RECURSIVE cte_name AS",和其他数据库相比多了个"RECURSIVE"


LINK:https://ask.csdn.net/questions/7652547?answer=53703846
SOURCE:CSDN_ASK
ASK_ID:7652542
ANSWER_ID:53703821
TITLE:数据库连接池参数设置
ANSWER:

连接一次数据库是需要消耗不少时间的,如果一开始就已经把连接建立好了,那么在使用过程中就不需要考虑连接数据库的时间消耗了。
但是,这会导致服务启动时消耗的时间变长,而且增加了数据库的平均压力


LINK:https://ask.csdn.net/questions/7652542?answer=53703821
SOURCE:CSDN_ASK
ASK_ID:7652221
ANSWER_ID:53703746
TITLE:怎么把格式化不了的U盘救活
ANSWER:

参考这篇文章,介绍了各种U盘修复软件


LINK:https://ask.csdn.net/questions/7652221?answer=53703746
SOURCE:CSDN_ASK
ASK_ID:7652254
ANSWER_ID:53703733
TITLE:在使用临时表的时候  无论是事务级的临时表还是会话级的临时表 ,插入数据后,新打开一个SQL调试窗口,查询该临时表,都是空的
ANSWER:

一个会话里是可以有多个事务的,对于TEMPORARY TABLE而言,不同会话间的数据都是隔离的,
你新打开一个窗口就是一个新的会话,所以查不到数据是很正常的。
如果你是调试存储过程的时候想查表里面的数据,是可以点击

img


这个按钮来在调试会话中执行查询的


LINK:https://ask.csdn.net/questions/7652254?answer=53703733
SOURCE:CSDN_ASK
ASK_ID:7652482
ANSWER_ID:53703705
TITLE:oracle数据库中,表数据是日增的,字段有一个每日增加的产品代码,有可能重复,还有一个save_time 是 DATE类型
ANSWER:

索引的建立,都是按使用场景来的,一般都是按执行sql中的where条件来创建,但是当你索引建得比较复杂的时候,那么插入速度就会受到影响,而且复杂索引的存储空间也会很大,所以,此时要看下查询时的限制,比如每次查询时有限定时间范围长度,那么可以尝试按时间建立范围分区,那么在查询的时候就不会扫到无关分区,而且插入的时候也能直接定位到分区。
如果你依然只想建立联合索引,那么我建议时间放前面,因为按照一般的查询场景来说,时间查询条件是个范围,而不是某一天,而产品代码也有可能不会作为查询条件,因为存在统计所有产品的场景。
至于题主的这个环境会有些什么样的查询场景我肯定是不清楚的。当你自己无法判断的时候,不妨两种方式都试一下,实践出真知,有时候oracle的cbo相当智能,不一定会完全按照你所想的走,没准你建个索引,它还是走了全表扫描,因为它可能觉得此时全表扫描比索引快


LINK:https://ask.csdn.net/questions/7652482?answer=53703705
SOURCE:CSDN_ASK
ASK_ID:7652289
ANSWER_ID:53703681
TITLE:关于#SQL#的问题,如何解决?
ANSWER:

我就觉得奇怪了,为什么别人的答案都是限定前6位再统计,那有个啥意义啊,这当然是截取前6位来group by 啊


—测试表
create table test_20220302 (部门编号 varchar2(10),身份证号 varchar2(10));

—查询sql
select 部门编号,
substr(身份证号, 1, 6) 身份证前六位,
count(1) 身份证前六位相同人数,
count(1) over(partition by 部门编号) 部门总人数,
substr(身份证号, 1, 6) / (count(1) over(partition by 部门编号)) 占比
from test_20220302
group by 部门编号, substr(身份证号, 1, 6)
;

LINK:https://ask.csdn.net/questions/7652289?answer=53703681
SOURCE:CSDN_ASK
ASK_ID:7652097
ANSWER_ID:53703190
TITLE:oracle数据库if语句放for循环报错,求答疑和解决方案,如何解决?
ANSWER:

3个错误


  1. if 的语法错误, 不是else if 而是elsif,另外,你没有end if


    ifthen
    elsifthen
    else
    end if;

  2. 冒号加等于号表示赋值,所以这个错了 lev:=7


  3. 后面突然来个i,前面没有声明,或者是写错变量了,numsum这个也是



改成下面这个样子就可以跑通了


declare
expr number;
begin
for lev in 710
loop
if lev=7 then
expr:=8000;
elsif lev=8 then
expr:=11000;
elsif lev=9 then
expr:=15000;
else expr:=20000;
end if;
Dbms_Output.put_line(expr);
end loop;
end;

LINK:https://ask.csdn.net/questions/7652097?answer=53703190
SOURCE:CSDN_ASK
ASK_ID:7652045
ANSWER_ID:53703112
TITLE:plsql编程,这个为什么会报错啊
ANSWER:

OPEN C_emp 这行命令没写结束符,后面少了个分号 。


img


LINK:https://ask.csdn.net/questions/7652045?answer=53703112
SOURCE:CSDN_ASK
ASK_ID:7652034
ANSWER_ID:53703108
TITLE:关于mysql执行顺序的一个问题
ANSWER:

当然要先确定会查询到哪些行,之后才能根据这些行里的数据进行聚合(折叠)
连数据范围都没确定的话,它都不知道要聚合的是什么东西了




如果你已经聚合了,就筛不掉了啊,比如有一列是1、2、3,根据where条件是 要取1和3,如果求和则得4,但是如果先聚合,求和就变成了6,这个时候你难道根据where条件再从6里面把2减掉么?




我这个例子你没看懂么?我再举一个例子:
假设有个表a,有两个字段,有6行记录,如下


TYPEC
11
12
13
14
23
24

按type分组,计算字段c中偶数的平均值,则sql为


select type,avg© avg_c from a where c in(2,4) group by type;


typeavg_c
13
24

但假设按你说的,先group by ,那么sql为


select type,avg© avg_c from a  group by type; 


typeavg_c
15
23.5

然后你拿着这两行数据,怎么用where把聚合前的奇数去掉,来获得和正确sql执行一样的结果??




这个例子中,group by时, 如果不使用avg、sum、max、min等聚合函数对未group by 的字段进行处理,那么这些字段就会直接被舍弃了,group by 时产生了一个新的数据集,行数为group by 后面字段去重的个数,此时已经无法再对原数据进行任何过滤,因为当前阶段已经没有原数据了




因为group by 之后,数据就已经被折叠了,多行变成了一行。下面这两个sql是等效的:


select a,b from c group by a,b;
select distinct a,b from c;

当这个c表里面如果除了a和b以外还有其它字段,如果不聚合,其余字段的数据就会被舍弃,如果聚合,那么只会得到聚合后的结果,找不到聚合之前的数据了


LINK:https://ask.csdn.net/questions/7652034?answer=53703108
SOURCE:CSDN_ASK
ASK_ID:7651916
ANSWER_ID:53703105
TITLE:mysql怎么计算分组的数量?
ANSWER:

楼上的方法需要再执行一次查询,这样有可能由于时间差,数据已经发生了改变,所以建议使用开窗函数


select 日期,省,市,count(1) 任务数,count(count(1)) over() 分组记录数 fromgroup by 日期,省,市

当然这要mysql8.0以上才支持


LINK:https://ask.csdn.net/questions/7651916?answer=53703105
SOURCE:CSDN_ASK
ASK_ID:7651969
ANSWER_ID:53703096
TITLE:用SQL算出每块电表的用电量
ANSWER:

请说明一下使用的是什么数据库,以及数据库的版本,还有你最终想得到的数据是长什么样子,有哪些字段。
我,先假定你这个数据可以确保每个电表每分钟都一条记录,最后想要的数据是在这个数据的基础上加三列,
那么这个最简单的写法就是用开窗函数的lag将上n行的数值拉到本行,再相减。


select a.*,
(lag(数值)over(partition by 电表名称 order by 数据生成时间))-a.数值 一分钟用电量,
(lag(数值,15)over(partition by 电表名称 order by 数据生成时间))-a.数值 十五分钟用电量,
(lag(数值,60)over(partition by 电表名称 order by 数据生成时间))-a.数值 一小时用电量 from 表 a

但是有部分数据库是不支持开窗函数的。
假设数据是不完整的或者存在某分钟的数据重复了,上面这个方法就会有偏差,但同理,假设倒推60分钟后,刚好那分钟没有采集到数据,这个该怎么算,你也得给个规则


另外,如果你是想聚合数据,按指定的时间点来进行分段统计,那么你需要说明一下每15分钟的第1分钟是从哪里开始




你这个格式的话,要说明一下每个字段打算怎么计算,明明输出的每个电表只有一行记录,哪里来的每小时?
如果是平均每小时的用电量,那只要算出平均每分钟直接乘60,
你用ivalue求和是不对的,因为这个值是抄表记录,不是表示1分钟用了这么多电,比如电表初始记录为1000,下1分钟电表为1020,那么这分钟就用了20度电,
因此你如果确定是计算平均用电的话,只需要


  1. 拿每个电表的最后一个数值减去第一个数据,得到总用电量,
  2. 然后用最后一次时间减去第一次时间,得时长并转换为分钟,
  3. 最后用总用电量除以时长即可。
    但这种平均用电量在实际使用中并没有什么意义,看不到任何数据走势,无法区分用电高峰期

LINK:https://ask.csdn.net/questions/7651969?answer=53703096
SOURCE:CSDN_ASK
ASK_ID:7651982
ANSWER_ID:53703077
TITLE:怎么从一张表中剔除数据
ANSWER:

如果只是查询,not in 或not exists 都行


select * from testA as  a where not exists (select 1 from testB as  b where a.user_id=b.user_id and b.tag=1);

如果是要删除A表中的数据,用in 或者exists 都行


delete  testA as  a where exists (select 1 from testB as  b where a.user_id=b.user_id and b.tag=1);

LINK:https://ask.csdn.net/questions/7651982?answer=53703077
SOURCE:CSDN_ASK
ASK_ID:7651931
ANSWER_ID:53703070
TITLE:oracle查询问题
ANSWER:

如果只要提取满足条件的bh,那么可以使用下面这个sql,注意这个count(distinct )=2,也就是必须满足 权利人和义务人同时存在


select bh from qlr 
where QLRLX in (‘权利人’,‘义务人’)
and length(QLRMC) >5
group by bh
having count(distinct QLRLX )=2

如果是要在查询qlr表的时候,多一个字段显示是否满足要求,那么可以使用开窗函数


select qlr.*,
case when (count(distinct (case when QLRLX in (‘权利人’,‘义务人’) and length(QLRMC) >5 then QLRLX end)) over(partition by BH) )=2 then ‘Y’ else ‘N’ END FLAG
from qlr

另外,我不确定你这个数据里,对于同一个BH是否会存在多个权利人或者多个义务人,如果有的话,你先得说明一下,如果存在一个权利人和一个义务人满足条件,但存在另一个权利人不满足条件,那么这个BH是否还满足条件?
如果这种情况属于不满足,那么LENGTH判断就不能放在where里面,而是应该在查询count里用case when加length去和不带length条件的count去判断


LINK:https://ask.csdn.net/questions/7651931?answer=53703070
SOURCE:CSDN_ASK
ASK_ID:7651808
ANSWER_ID:53702884
TITLE:关于数据库的几个小问题
ANSWER:

所有数据都是以二进制形式存储在存储介质上的,比如磁带、磁盘,
最开始是人工对数据进行分类,比如这盘磁带放什么,那个磁盘放什么,直接手写标记,但是数据一多了,管理就麻烦了,因此需要一个系统来管理这些数据


而数据库又分很多种类,你说的mysql,管理的拥有关系的多张表格,这个叫关系型数据库。早期这种数据是以纯文本形式存储,当时的关系型数据模型管理也只是编写了一些代码来对这些文本文件进行访问及处理,



然后,你说的"本地数据库",这里需要纠正一下,一个操作系统的启动运行并不依赖数据库,而是软件在开发中,发现使用数据库更容易管理数据,才会在这个软件中添加数据库并添加数据库管理相关的内容,比如常见的有使用文本文件来保存数据或者用sqlite/access等小型单文件数据库,所以windows系统中是存在大量的数据库的,因为它自带的前后台软件极多。


“本地"是一个网络概念,相对的是"远程”,某台电脑上装了个数据库,在这台电脑上它叫本地数据库,其他设备来访问这个数据库的时候,它就叫远程数据库了。


mysql安装时,你完全可以把它当成一个普通的软件,和qq微信一样,都是解压文件到你电脑上,然后改几个注册表键值,再新增一个自启动服务。


tips:excel是1985年开发的,第一个商用关系型数据库是1976年发布的。。。


LINK:https://ask.csdn.net/questions/7651808?answer=53702884
SOURCE:CSDN_ASK
ASK_ID:7651778
ANSWER_ID:53702821
TITLE:DB2 load加载数据文件,最后几条没有加载进去
ANSWER:

检查第1520条到1521条之间的分隔方式是否完全和前后保持一致


LINK:https://ask.csdn.net/questions/7651778?answer=53702821
SOURCE:CSDN_ASK
ASK_ID:7651694
ANSWER_ID:53702813
TITLE:linux安装的oracle,可以使用sys用户登陆,但是用本地plsql连接linux上的oracle时,报ora-01031没有权限,请问该怎么解决?
ANSWER:

这个提示不是没有权限,而是这个视图查出来没有数据


LINK:https://ask.csdn.net/questions/7651694?answer=53702813
SOURCE:CSDN_ASK
ASK_ID:7651645
ANSWER_ID:53702626
TITLE:同一款APP可以同时安装在PDA和智能手机上吗?有区别吗?
ANSWER:

我先假定你说的PDA和智能手机都是android系统(如果不是同一个系统就没有讨论意义了)。
然后,主要是看你的app有没有调用特殊的硬件,比如有些PDA是有激光条码扫描器的,而普通的手机没有,那么这个app如果能正常安装在手机里,也是无法调用激光条码扫描器的。同理,还有什么打印机、红外、rfid之类的硬件也是如此。
另外,还要系统软件的兼容性,目前安卓系统版本已经很多了,很多软件无法百分百的向上或向下兼容,只能在某个特定的版本下使用。
所以,只要app开发的时候适配了两者的硬件及系统版本,那么就能同时在PDA和手机上使用,否则就容易出现兼容性问题


LINK:https://ask.csdn.net/questions/7651645?answer=53702626
SOURCE:CSDN_ASK
ASK_ID:7651624
ANSWER_ID:53702554
TITLE:请问一下,文件服务器的权限怎么设置
ANSWER:

看你是用的什么东西搭建的文件服务器,不同的工具设置方式不一样




windows server 自带的文件服务器是可以设置权限的

img


img


把指定用户的写入及修改去掉,就不能删除文件了

img


具体可以参考这篇文章


LINK:https://ask.csdn.net/questions/7651624?answer=53702554
SOURCE:CSDN_ASK
ASK_ID:7651379
ANSWER_ID:53702550
TITLE:文件地址如何有效存储在数据库中
ANSWER:

参考知名的私有云文件管理软件nextcloud(owncloud),它在数据库中的文件路径设置是用的递归


img


如果页面中只是要显示一个文件的这三个地址,我建议直接切字符串


LINK:https://ask.csdn.net/questions/7651379?answer=53702550
SOURCE:CSDN_ASK
ASK_ID:7651514
ANSWER_ID:53702502
TITLE:SQL Server 存储过程 多行结果 合并为一行数据,请问怎么实现呢?
ANSWER:

下面这段


SELECT * 
FROM #PayDetail
UNION ALL
SELECT NULL 序号,
NULL AS 网点号,
NULL AS 收款单号,
NULL AS 业务单号,
NULL AS 网点名称,
NULL AS 业务类型,
NULL AS 收款日期,
@PayPrice AS 收款金额,
[支付方式],
SUM([支付金额])
FROM #PayDetail
GROUP BY [支付方式]

改成


SELECT NULL 序号,
NULL AS 网点号,
NULL AS 收款单号,
NULL AS 业务单号,
NULL AS 网点名称,
NULL AS 业务类型,
NULL AS 收款日期,
@PayPrice AS 收款金额,
[支付方式],
SUM([支付金额])
FROM #PayDetail
GROUP BY [支付方式]

LINK:https://ask.csdn.net/questions/7651514?answer=53702502
SOURCE:CSDN_ASK
ASK_ID:7651525
ANSWER_ID:53702501
TITLE:请问HeidiSQL导出MySQL表里的数字变成科学计数该怎么解决?
ANSWER:

其实吧,导出的数据应该并没有变成科学计数法,是你打开的excel进行了自动格式化显示,你可以用文本编辑工具,比如记事本,打开这个csv文件,看这个csv文件里面的内容到底长什么样子


LINK:https://ask.csdn.net/questions/7651525?answer=53702501
SOURCE:CSDN_ASK
ASK_ID:7651581
ANSWER_ID:53702495
TITLE:mysql有俩个字段一个是记录状态的,另一个是记录状态录入时间的,怎么计算一个状态的持续时间
ANSWER:
任务ID状态时刻
1初始化2022-03-01 13:26:00
1处理中2022-03-02 14:27:00
1处理完成2022-03-03 15:28:00

以上面这个数据为例,你是想得到 初始化的时间为 处理中的时刻减去初始化的时刻是吧?
这个很典型的是要拿到下一行的记录,那么应该用开窗函数中的lead


select 任务ID,状态,开始时刻, lead(时刻) over(partition by 任务ID order by 时刻) 完成时刻 from 表;

至于计算持续时间,比较开始时刻和完成时刻这两个字段就行了,用timestampdiff这个函数


LINK:https://ask.csdn.net/questions/7651581?answer=53702495
SOURCE:CSDN_ASK
ASK_ID:7651470
ANSWER_ID:53702483
TITLE:MySQL优化方案对比
ANSWER:

目前我没环境可以造这么大量的数据进行实机测试,而且综合评估的话还得看磁盘读取效率、内存速度等,所以我还是保留上一个问题中回答的观点,使用exists,因为它只要扫到任意一行满足条件的就会true,不会把所有记录都扫到


LINK:https://ask.csdn.net/questions/7651470?answer=53702483
SOURCE:CSDN_ASK
ASK_ID:7651333
ANSWER_ID:53702080
TITLE:SQL中TMP代表什么
ANSWER:

tmp本身没有任何含义,在你这个SQL里,tmp是你前面这个子查询的别名,可以理解为有张叫tmp的表,表里的数据为这个SQL的查询结果


select count(*) as cnt
From graduates
GROUP BY INCOMR

当然,实际这张表是不存在的,只是为了方便引用而已,而且你把这个tmp改成别的名称也一样没问题,只是引用到的地方也得一起改


LINK:https://ask.csdn.net/questions/7651333?answer=53702080
SOURCE:CSDN_ASK
ASK_ID:7651356
ANSWER_ID:53702076
TITLE:关于公司产量业务的问题
ANSWER:

300万的存量提成=3000.105=31.5
200万的存量提成=200
0.105=21
增量客户应达到的总提成=31.5-21=10.5
增量客户产值应为10.5/0.12=87.5万


这是小学数学题么?


LINK:https://ask.csdn.net/questions/7651356?answer=53702076
SOURCE:CSDN_ASK
ASK_ID:7651252
ANSWER_ID:53701979
TITLE:sql文exception中出现的raise是什么意思
ANSWER:

你把原始代码贴一下看看,怕你精简这个代码不是原代码的本意


首先,应该有个地方声明了这个"A"作为exception,
然后,顺着这个代码思路来看,假设他不加第二个raise,那么这段代码在遇到A这种异常的时候,就不会抛出错误,而只是执行了一次c_01过程(这个是在写日志表吧,而且应该是个独立事务)而已。加上第二个raise,目的就让它既记录日志也抛出错误。
其实这里的日志可能是后期加进去的,


declare
a EXCEPTION;
begin
if i = 0 then
raise A;
end if
end;
/

然后后面要加日志,就写了个exception,其实这个时候的raise A已经和第一个raise A 不一样了。




exception里面如果不raise的话,程序不会向调用它的程序抛出错误,至于是raise A还是raise别的,不影响这段程序的运行逻辑。其实如果exception里不raise,你就可以当它是个类似if或者case when的判断逻辑,如果出现特定情况就执行特定的代码


LINK:https://ask.csdn.net/questions/7651252?answer=53701979
SOURCE:CSDN_ASK
ASK_ID:7651260
ANSWER_ID:53701975
TITLE:oracle密码问题
ANSWER:

请提供报错信息,报错信息里已经说了原因,这与你昨天是不是改了密码没有关系


LINK:https://ask.csdn.net/questions/7651260?answer=53701975
SOURCE:CSDN_ASK
ASK_ID:7650882
ANSWER_ID:53701959
TITLE:db2数据库查询 如果某个字段的值为0时则显示上个月的数据
ANSWER:

db2支持开窗函数,可以使用lag来查上一行的记录


lag(SUM(CONTRACT_WT)/10000) over (partition by PROD_CLASS_NAME,SUTSOURCING_SELF_MARK order by YEAR||‘.’||MONTH)

由于没有环境测试,而且你也没提供建表的sql,因此不确定DB2的开窗函数中是否允许使用聚合,如果不允许的话,请在外面再包一层,然后再用开窗函数


LINK:https://ask.csdn.net/questions/7650882?answer=53701959
SOURCE:CSDN_ASK
ASK_ID:7650923
ANSWER_ID:53701953
TITLE:这一条sql 为什么会执行成功 SELECT *,COUNT(c_id) FROM Score GROUP BY c_id
ANSWER:

你查一下这个


SELECT @@GLOBAL.sql_mode;

如果里面不包含"ONLY_FULL_GROUP_BY",那么就不会报错,反之就会报错。
老版本的mysql里默认是不含这个的,mysql8.0以上默认含这个


LINK:https://ask.csdn.net/questions/7650923?answer=53701953
SOURCE:CSDN_ASK
ASK_ID:7650939
ANSWER_ID:53701948
TITLE:SQL如何根据某字段包含的数据主键(某主键,某主键)分组求和
ANSWER:

说一下是什么数据库吧,指定分隔符的字符串转列在很多数据库都算是个比较麻烦的事,你指定了数据库后我再按你指定数据库的语法来写一下


—模拟数据
insert into hr_share_browsing_history (ID,share_id,jobnumber) values (1,1,‘A’);
insert into hr_share_browsing_history (ID,share_id,jobnumber) values (2,2,‘A’);
insert into hr_share_browsing_history (ID,share_id,jobnumber) values (3,3,‘A’);
insert into hr_share_browsing_history (ID,share_id,jobnumber) values (4,1,‘B’);
insert into hr_share_browsing_history (ID,share_id,jobnumber) values (5,2,‘B’);
insert into hr_share_browsing_history (ID,share_id,jobnumber) values (6,5,‘B’);
INSERT INTO hr_share_series(id,title_name,share_id) VALUES(1,‘XXX’,‘1,2,3’);
INSERT INTO hr_share_series(id,title_name,share_id) VALUES(2,‘YYY’,‘5’);

—一个系列里的知识个数不能大于700个,否则需要自己建一个序列来替代mysql.help_topic 这张表
select a1.id,any_value(a1.share_id), avg( score ) AS score, count() AS read_number
from
(SELECT
a.
, substring_index( substring_index( a.share_id, ‘,’, b.help_topic_id + 1 ), ‘,’,- 1 ) share_id_s
FROM
hr_share_series a
JOIN mysql.help_topic b ON b.help_topic_id < ( length( a.share_id ) - length( REPLACE ( a.share_id, ‘,’, ‘’ ))+ 1 )
) a1 join hr_share_browsing_history b
on a1.share_id_s=b.share_id
GROUP BY a1.id

img


LINK:https://ask.csdn.net/questions/7650939?answer=53701948
SOURCE:CSDN_ASK
ASK_ID:7650978
ANSWER_ID:53701943
TITLE:MySQL优化方案对比(酬谢一百起步)
ANSWER:

关于哪个好,是有不同的评价标准,比如代码简洁度、查询速度、占资源多少等。
首先方案一,同一个表item查了两次,这绝对是浪费了性能开销
然后方案1和2都是把所有符合条件的sn的记录都找出来了,然后再去的重,而实际上,对于某一个sn,只要至少出现过一行,就应该视为满足条件。
所以我给了个方案三


SELECT * FROM item where company_id = 123 AND
exists (select 1 from detail
where detail.company_id = item.company_id
and detail.sn=item.sn
and detail.person_id in (123, 321));

当然,由于不清楚实机情况,数据库的执行计划不是绝对能按你想的去走,它会有一些自行处理的优化,所以无法100%判断哪个跑得更快。
但按照常规的经验来说,我建议还是用exists来代替你的distinct in


LINK:https://ask.csdn.net/questions/7650978?answer=53701943
SOURCE:CSDN_ASK
ASK_ID:7650997
ANSWER_ID:53701927
TITLE:mysql 计算’年-月’格式日期的月份差
ANSWER:

用concat补全字符串就行了


select TIMESTAMPDIFF(MONTH,concat(‘2022-02’,‘-01 00:00:00’) ,concat(‘2021-01-01’,’ 00:00:00') )

img


LINK:https://ask.csdn.net/questions/7650997?answer=53701927
SOURCE:CSDN_ASK
ASK_ID:7650999
ANSWER_ID:53701905
TITLE:数据分析的学习路径是什么?
ANSWER:

想具备数据分析能力的话,不是先学技术,而是应该先去了解有些什么东西可以分析,需求方希望得到一个什么样的分析结果,换句话说,就是先定目标,不知道目标长啥样子的话,可以先多看看别人写的分析报告。
有些人完全不懂技术,只用excel照样能做分析,甚至有很多大厂的高级数据分析师自己是不写代码的,一般专业是数学和经济,只根据目前用户的场景需要,写出公式算法思路,至于代码就交给开发人员去写了,等代码跑出结果再去分析数据,这个里面需要有相当丰富的业务经验,而这又是与技术无关的内容。
现在很多所谓的数据分析师根本算不上分析师,纯粹就是个写报表sql的,都是简单查查数据再进行下四则运算,当然这也是必要的经验积累阶段,只有从这个阶段突破出去,不再是来一个需求写一个sql的工作方式,而是能主动从数据中分析并挖掘出其背后隐藏的东西及预测未来的走势,这样才是真正的数据分析师。


LINK:https://ask.csdn.net/questions/7650999?answer=53701905
SOURCE:CSDN_ASK
ASK_ID:7651040
ANSWER_ID:53701888
TITLE:如何用达梦语句实现MySQL数据库中的group by效果
ANSWER:

你这个语法不符合sql标准,MYSQL8.0默认都不支持你这个写法了。
group by WXYSKM这一个字段,输出结果会是一个WXYSKM作为一行,然后y.stdname和n.stdname随机取一条,这样会可能出现每次查询结果不一样的情况,不严谨。
查询的非聚合字段,一定是要放到group by 后面去的,否则应该使用any_value或者max、min函数按指定规则取一个值。


LINK:https://ask.csdn.net/questions/7651040?answer=53701888
SOURCE:CSDN_ASK
ASK_ID:7651145
ANSWER_ID:53701881
TITLE:ERROR: index row requires 8856 bytes, maximum size is 8191
ANSWER:

索引是有最大大小的,目前PG的限制为8191,但你这个数据的索引大小达到了8856,超过了PG的限制,当然报错了。一般超过这个值,说明是索引设计或者表设计存在问题,建议进行一下优化,比如减少索引的字段,或者检查数据是否有异常,比如某个索引字段超长。一般是用较短数据的字段作为索引的,那种长的字段应该做全文检索,而不是建普通索引。


LINK:https://ask.csdn.net/questions/7651145?answer=53701881
SOURCE:CSDN_ASK
ASK_ID:7651155
ANSWER_ID:53701871
TITLE:Excel数据导入数据库错误
ANSWER:

你在插表的时候,指定了两个变量,但是parames却是一个元素个数大于2的列表,当然插不进去了,而且你上面的循环,把EXCEL里所有行和所有列的值全部都放到一个一维列表里去了,也就是一行记录,这样哪里还能区分哪个值放第一个字段哪个值放第二个字段呢?


LINK:https://ask.csdn.net/questions/7651155?answer=53701871
SOURCE:CSDN_ASK
ASK_ID:7650802
ANSWER_ID:53701351
TITLE:Postgresql如何用游标查出所有表的大小和条数,然后插入某张表?
ANSWER:

查pg_class,速度更快,只是里面的数据是定时刷新。
对每张表去count的话,速度很慢,而且对数据库的性能造成不必要的影响。
非得要查的话,无非就是用pg_class来作为游标,然后拼接动态sql来执行插入count值的指令




给你一个官方提供的循环并执行了动态sql的例子吧,你只要把游标sql改了,把动态sql改成拼insert语句就行了


CREATE FUNCTION refresh_mviews() RETURNS integer AS $$
DECLARE
mviews RECORD;
BEGIN
RAISE NOTICE ‘Refreshing all materialized views…’;

FOR mviews IN
SELECT n.nspname AS mv_schema,
c.relname AS mv_name,
pg_catalog.pg_get_userbyid(c.relowner) AS owner
FROM pg_catalog.pg_class c
LEFT JOIN pg_catalog.pg_namespace n ON (n.oid = c.relnamespace)
WHERE c.relkind = ‘m’
ORDER BY 1
LOOP

– Now “mviews” has one record with information about the materialized view

RAISE NOTICE ‘Refreshing materialized view %.% (owner: %)…’,
quote_ident(mviews.mv_schema),
quote_ident(mviews.mv_name),
quote_ident(mviews.owner);
EXECUTE format(‘REFRESH MATERIALIZED VIEW %I.%I’, mviews.mv_schema, mviews.mv_name);
END LOOP;

RAISE NOTICE ‘Done refreshing materialized views.’;
RETURN 1;
END;
$$
LANGUAGE plpgsql;

中文官方文档地址
http://postgres.cn/docs/12/plpgsql-control-structures.html#PLPGSQL-CONTROL-STRUCTURES-LOOPS


LINK:https://ask.csdn.net/questions/7650802?answer=53701351
SOURCE:CSDN_ASK
ASK_ID:7650847
ANSWER_ID:53701340
TITLE:查询Score表中除了每门课程最高分的学生编号和课程编号
ANSWER:

用开窗函数做分组排行,再把第一名剔除就是


select * from (
select t.*,rank() over(partition by cno order by degree desc) rk from score t
) as t2 where rk>1

如果不用开窗函数的话,那就得先写个子查询,得到每个课程的最高分,即课程和分数两个字段,然后再从原表里把对应的课程和分数进行剔除,可以用not in 也可以用not exists ,但这样相当于一张表要查两次,明显不如开窗函数来得优雅


LINK:https://ask.csdn.net/questions/7650847?answer=53701340
SOURCE:CSDN_ASK
ASK_ID:7650588
ANSWER_ID:53700846
TITLE:有没有查询MySQL数据库关键字的方法
ANSWER:

最权威的当然是在mysql官网


LINK:https://ask.csdn.net/questions/7650588?answer=53700846
SOURCE:CSDN_ASK
ASK_ID:7650500
ANSWER_ID:53700739
TITLE:分别取两张表的两个字段的所有值
ANSWER:

先不说有没有关联字段,重点是,你的查询结果想显示什么样的数据?如果两个数据不做任何关联,直接join,那么你查询出来的结果条目数为两张表条目数的乘积,即对于A表中的任意行匹配B表中的所有行。比如下面这样


A表


abcd
1234
5678

B表


efg
123
567

查询结果


select a,e from A表,B

ae
11
51
15
55

另外一种情况是,按照行号进行匹配,即A表中第一行匹配B表中第一行,A表中第二行匹配B表中第二行,以此类推,这个时候只需要在两个数据中分别加上行号字段即可,用行号做为条件来进行join。但是A表和B表的总行数可能不一致,那么就需要说清楚是仅展示能匹配上的行?还是A表记录为准?还是以B表记录为准?sql如下,根据不同的需要,full可以改成left或者right


select a.a,b.e from 
(select row_number()over(order by 1) rn,a from a ) as a
full join
(select row_number()over(order by 1) rn,e from b ) as b
on a.rn=b.rn



如果C表只是要建表结构,不要数据的话,倒是问题不大


create table c as 
select a.a,b.e from a ,b where 1=2;

但既然这样的话,为什么不直接指定字段类型和字段名称来建表呢?


LINK:https://ask.csdn.net/questions/7650500?answer=53700739
SOURCE:CSDN_ASK
ASK_ID:7650394
ANSWER_ID:53700696
TITLE:怎样快速熟练运用存储过程
ANSWER:

我也没师傅教,自己多看,多分析,然后多练。
重点是自己要有清晰的逻辑,熟悉基本语法和结构。
写这玩意讲究逻辑清晰以及各种写法的灵活组合,光看是不够的,只能靠实际自己写来积累经验


LINK:https://ask.csdn.net/questions/7650394?answer=53700696
SOURCE:CSDN_ASK
ASK_ID:7650475
ANSWER_ID:53700690
TITLE:ValueError: list.remove(x): x not in list报错
ANSWER:

因为你没有准确的写什么时候退出循环,然后它就一直在那删,当列表里没有这个元素的时候你还去删,它就会报错


LINK:https://ask.csdn.net/questions/7650475?answer=53700690
SOURCE:CSDN_ASK
ASK_ID:7650463
ANSWER_ID:53700683
TITLE:想问问stata合并了缺失项之后怎么删除那个点
ANSWER:

咋最近有人开始问stata的了,这玩意不算数据库,顶多只能算一个数据分析工具,加载到里面的数据不能sql语言进行查询,在这里应该很少有人知道的。
合并的话,建议直接加或者用rowtotal


参考之前的回答


LINK:https://ask.csdn.net/questions/7650463?answer=53700683
SOURCE:CSDN_ASK
ASK_ID:7650288
ANSWER_ID:53700570
TITLE:CASE WHEN 里面嵌套了一个CASE WHEN 给我报缺少关键字
ANSWER:

这个提问的提示里,说了 ** “问题相关代码,请勿粘贴截图”**


然后,为什么要用嵌套?case when 不是你这么用的,从你这个sql看不出你想实现什么效果,只能看出最后要么是money要么是0,
case when 里是可以写多个条件的,比如


case when ( a.c1=1 and a.c2=2 and a.c3=3) or (b.c1=1 and b.c2=2 and b.c3=3) 
then amount
else 0
end

而且case when 也可以 when 多次


case when a.c1=1 and a.c2=2 then 1
when a.c1=2 and a.c2=2 then 2
else 0
end

```


LINK:https://ask.csdn.net/questions/7650288?answer=53700570
SOURCE:CSDN_ASK
ASK_ID:7650217
ANSWER_ID:53700501
TITLE:Oracle密码过期处理(ORA-28002),如何处理?
ANSWER:

修改密码,或者改成密码永不过期


—修改密码
alter user scott identified by 新密码;

—密码永不过期
DECLARE
L_PROFILE VARCHAR2(200);
BEGIN
SELECT PROFILE INTO L_PROFILE FROM dba_users where username = ‘SCOTT’;
EXECUTE IMMEDIATE ‘ALTER PROFILE ‘ || L_PROFILE ||
’ LIMIT PASSWORD_LIFE_TIME UNLIMITED’;
END;
/

注意密码不过期的策略是按PROFILE 来的,一个PROFILE 可以给多个用户使用,因此同一个PROFILE下的用户拥有相同的规则


LINK:https://ask.csdn.net/questions/7650217?answer=53700501
SOURCE:CSDN_ASK
ASK_ID:7650150
ANSWER_ID:53700339
TITLE:VMware虚拟机设置里面使用ISO映像文件为啥是灰色的?
ANSWER:

虚拟机要关机后,才能修改虚拟机设置


LINK:https://ask.csdn.net/questions/7650150?answer=53700339
SOURCE:CSDN_ASK
ASK_ID:7650020
ANSWER_ID:53700190
TITLE:想问问如何创建递增的数值列,并且位数固定为6位
ANSWER:

在原来的基础上限制字段长度为6位。
但是,
如果你6位数0-999999全用完了怎么办?直接报错,永远不再增加新用户?
你想想为什么之前是6位,用着用着就变成7位了?


LINK:https://ask.csdn.net/questions/7650020?answer=53700190
SOURCE:CSDN_ASK
ASK_ID:7649908
ANSWER_ID:53700144
TITLE:有没有懂ftp上传的,请教个问题
ANSWER:

你问的这个问题与FTP本身没有任何关系啊,你这只是要根据数据库里数据的情况来确定是否要执行某一条命令而已,而且客户端上传还必须用你的程序,不能直接用FTP传,因为FTP本身是不支持你说的这个逻辑的。
而且你第二句和最后一句不是矛盾的么?第二条说FTP上删了不能再次上传但最后一条FTP删了又上传了?
至于JAVA怎么用ftp上传,这种教程不是到处都是?


LINK:https://ask.csdn.net/questions/7649908?answer=53700144
SOURCE:CSDN_ASK
ASK_ID:7649977
ANSWER_ID:53700138
TITLE:vmware虚拟机安装macos出现问题
ANSWER:

第一张图显示,虚拟机硬盘里没有文件,CD-ROM里面没有可以启动的东西,
所以,你配置虚拟机的时候,有选择正确的系统安装光盘么?


安装教程


LINK:https://ask.csdn.net/questions/7649977?answer=53700138
SOURCE:CSDN_ASK
ASK_ID:7649937
ANSWER_ID:53700137
TITLE:mysql的一个问题
ANSWER:

这个玩意是动态变化的,建议两个一起查,你分两次查,数据已经不一样了


select avg(total),round(avg(total), 1) from x$waits_global_by_latency;

LINK:https://ask.csdn.net/questions/7649937?answer=53700137
SOURCE:CSDN_ASK
ASK_ID:7649931
ANSWER_ID:53700132
TITLE:关于mysql的一个问题
ANSWER:

后面的排序改成


order by 3

我有点怀疑你是写成了下面这个样子,导致没有排序


order by ‘new total’

能不能上个实际运行的截图看看?


LINK:https://ask.csdn.net/questions/7649931?answer=53700132
SOURCE:CSDN_ASK
ASK_ID:7649969
ANSWER_ID:53700125
TITLE:SQL中DESC代表什么
ANSWER:

我补充一下,你这个语法在mysql 8.0开始已经不支持了,如果要排序,必须使用order by
参考文章


LINK:https://ask.csdn.net/questions/7649969?answer=53700125
SOURCE:CSDN_ASK
ASK_ID:7649873
ANSWER_ID:53699985
TITLE:crontab执行hbase shell命令输出列数改变
ANSWER:

输出日志的shell里,前面加上行宽设置


stty cols 188

crontab用的是内部终端,默认行宽大小和你手动在当前终端下执行的当然不一样。
具体可以去了解一下 stty 的用法


LINK:https://ask.csdn.net/questions/7649873?answer=53699985
SOURCE:CSDN_ASK
ASK_ID:7649795
ANSWER_ID:53699903
TITLE:postgres数据库有没有all_source表
ANSWER:

查 pg_proc 这个表


select * from pg_proc where lower(prosrc) like ‘%小写表名%’

LINK:https://ask.csdn.net/questions/7649795?answer=53699903
SOURCE:CSDN_ASK
ASK_ID:7649716
ANSWER_ID:53699824
TITLE:SQL SERVER 存储过程 查询出来的数据为一行合计 不需要进行分组,如何进行调整。
ANSWER:

把最下面那段select改成这样


SELECT NULL 序号,
NULL AS 网点号,
NULL AS 收款单号,
NULL AS 业务单号,
NULL AS 网点名称,
NULL AS 业务类型,
NULL AS 收款日期,
SUM([收款金额]),
null as 支付方式,
SUM([支付金额])
FROM #PayDetail


LINK:https://ask.csdn.net/questions/7649716?answer=53699824
SOURCE:CSDN_ASK
ASK_ID:7649593
ANSWER_ID:53699663
TITLE:oracle登录了下不了jdk,网页打不开怎么办
ANSWER:

你那个版本官方已经不提供支持了,可以用最新版的


img


LINK:https://ask.csdn.net/questions/7649593?answer=53699663
SOURCE:CSDN_ASK
ASK_ID:7649604
ANSWER_ID:53699645
TITLE:关于#sql#的问题,如何解决?
ANSWER:

这就一个自关联笛卡尔积的灵活运用


create table test_team_20220225(id varchar2(10),team varchar2(20),area varchar2(1));
insert into test_team_20220225 values(‘01’,‘RNG’,‘E’);
insert into test_team_20220225 values(‘02’,‘EDG’,‘E’);
insert into test_team_20220225 values(‘03’,‘QG’,‘E’);
insert into test_team_20220225 values(‘04’,‘GK’,‘W’);
insert into test_team_20220225 values(‘05’,‘JC’,‘W’);
insert into test_team_20220225 values(‘06’,‘XQ’,‘W’);

select ‘区内赛’ 比赛阶段, a.team 主场, b.team 客场
from test_team_20220225 a, test_team_20220225 b
where a.area = b.area –同区
and a.id > b.id –相同两队只比赛一次,换成小于也行
UNION ALL
select ‘跨区赛’ 比赛阶段, a.team 主场, b.team 客场
from test_team_20220225 a, test_team_20220225 b
where a.area <> b.area –不同区的队伍任意组合

img


LINK:https://ask.csdn.net/questions/7649604?answer=53699645
SOURCE:CSDN_ASK
ASK_ID:7649388
ANSWER_ID:53699342
TITLE:数据库时间条件查询问题
ANSWER:
  1. 不同数据库的函数使用有区别
  2. 不同数据库的数据类型隐式转换有区别

第一个sql,是把一个datetime类型的数据转换成varchar(100)的类型,因此可以使用字符串进行匹配,单引号引起来的就是字符串,"CONVERT(varchar(100), CreateTime, 23) "这个函数的用法是sqlserver独有的。


第二个sql,你没说这个create_time是什么类型,但是右边的 '2022-01-13%'肯定是个字符串类型,此时mysql会对左边的字段进行隐式转换,也变成一个字符串,因此可以用like来进行匹配


LINK:https://ask.csdn.net/questions/7649388?answer=53699342
SOURCE:CSDN_ASK
ASK_ID:7649350
ANSWER_ID:53699322
TITLE:SQL Sever如何在计算结果中增加一定百分比的损耗值,比如求和结果理论用量为10,需要加百分之十五的损耗率,就是用11.5
ANSWER:

你这个sql里面其实已经有类似的写法了


case when CHARINDEX(‘金属卡条’,unit)>0 then 
cast(round(Length*1.15, 0) as nvarchar) + ‘*’ +
cast(round(Width, 0) as nvarchar)
end

LINK:https://ask.csdn.net/questions/7649350?answer=53699322
SOURCE:CSDN_ASK
ASK_ID:7649282
ANSWER_ID:53699292
TITLE:怎么根据B表字典,替换A表多列单元格中的内容?
ANSWER:

列数不确定,列名不确定,这个问题有意思,直接上sql


—测试数据
create table test_a_20220225
(col1_fasfa varchar2(10),col2_eufyei varchar2(10),col3_bdgooer varchar2(10));
insert into test_a_20220225 values(‘a’,‘b’,‘e’);
insert into test_a_20220225 values(‘c’,‘v’,‘n’);
insert into test_a_20220225 values(‘x’,‘r’,‘t’);
commit;

create table test_b_20220225
(from_str varchar(10),to_str varchar(10));
insert into test_b_20220225 values (‘a’,‘1’);
insert into test_b_20220225 values (‘b’,‘2’);
insert into test_b_20220225 values (‘c’,‘3’);
insert into test_b_20220225 values (‘e’,‘4’);
insert into test_b_20220225 values (‘n’,‘5’);
insert into test_b_20220225 values (‘t’,‘6’);
insert into test_b_20220225 values (‘v’,‘7’);
insert into test_b_20220225 values (‘r’,‘8’);
insert into test_b_20220225 values (‘x’,‘9’);
commit;

–创建c表
create table test_c_20220225 as select from test_a_20220225 where 1=2;

–生成C表数据
declare
l_sql clob;
begin
l_sql := empty_clob();
dbms_lob.createtemporary(l_sql, true);
l_sql := 'insert into test_c_20220225 select '; –这里放目标表名
for rec in (SELECT t2.column_value.getrootelement() name
FROM (SELECT

FROM TABLE(XMLSEQUENCE(cursor (select
from test_a_20220225 –这里放原表名
where rownum = 1)))) t1,
TABLE(XMLSEQUENCE(EXTRACT(t1.column_value,
‘/ROW/node()’))) t2) loop
dbms_lob.append(l_sql,
‘replace(’ || rec.name || ‘,’ || rec.name || ‘,’ ||
‘(select to_str from test_b_20220225 where from_str=’ || —这里放用于匹配的表名
rec.name || ‘)),’);

end loop;
dbms_lob.write(lob_loc => l_sql,
amount => 1,
offset => dbms_lob.getlength(l_sql),
buffer => ’ ‘);
dbms_lob.append(l_sql, ’ from test_a_20220225 '); —这里放原表名
execute immediate l_sql;
commit;
end;

–查看c表数据
select
from test_c_20220225;

img


无论你有多少列,哪怕有几百个列,而且列名没有任何规则,用这个sql都可以把你数据给转换了,不需要在excel表里对每一个列都单独写公式,因为这个sql里面没有指定任何列名,全是动态获取


LINK:https://ask.csdn.net/questions/7649282?answer=53699292
SOURCE:CSDN_ASK
ASK_ID:7649150
ANSWER_ID:53699118
TITLE:关于#数据库#的问题,请各位专家解答!
ANSWER:

把你plsql里首选项设置里的Unicode选项勾上,然后重启plsql再试。
还可以尝试升级你plsql的版本。
另外,也可以尝试修改一下你本地客户端的字符集


LINK:https://ask.csdn.net/questions/7649150?answer=53699118
SOURCE:CSDN_ASK
ASK_ID:7649103
ANSWER_ID:53698802
TITLE:怎样通过sql,将A列和B列作为判断,A列为空时,将B列的数据转换到A列显示,如果B列的数据为空,还是保持原样,这个sql要怎么写?
ANSWER:

是什么数据库?不同数据库空值函数不一样,oracle是nvl,mysql是ifnull,另外还有个通用的coalesce函数。
或者,可以使用更加通用的case when


select id,
case when a is null then b else a end as a,
b
from

LINK:https://ask.csdn.net/questions/7649103?answer=53698802
SOURCE:CSDN_ASK
ASK_ID:7649089
ANSWER_ID:53698798
TITLE:mysql连接一段时间不使用后连接卡顿失效
ANSWER:

你的wait_timeout设置为600,意思就是断开超过10分钟sleep的连接。
一般建议连接池那边做个心跳机制,未使用连接时,每隔一段时间(小于wait_timeout的时间)去查下数据库,告诉数据库它还活着


LINK:https://ask.csdn.net/questions/7649089?answer=53698798
SOURCE:CSDN_ASK
ASK_ID:7649068
ANSWER_ID:53698786
TITLE:python读取mysql中的数据,里面有转义字符,反斜杠又会被转义该如何处理
ANSWER:

替换字符串,把两个反斜杠替换成一个反斜杠


LINK:https://ask.csdn.net/questions/7649068?answer=53698786
SOURCE:CSDN_ASK
ASK_ID:7649045
ANSWER_ID:53698769
TITLE:又报错了,ERROR 1064 (42000)呜
ANSWER:

语法错误,你的else后面没有指定值,当然会报错,下面几种写法都不会报错


select
id,
name,
case sex
when ‘男’ then ‘F’
when ‘女’ then ‘M’
else ‘X’
end as sex,
salary
from employee;

select
id,
name,
case sex
when ‘男’ then ‘F’
when ‘女’ then ‘M’
else sex
end as sex,
salary
from employee;

select
id,
name,
case sex
when ‘男’ then ‘F’
when ‘女’ then ‘M’
end as sex,
salary
from employee;

LINK:https://ask.csdn.net/questions/7649045?answer=53698769
SOURCE:CSDN_ASK
ASK_ID:7649012
ANSWER_ID:53698765
TITLE:PgSql 提示42P01错误!试了很多方法还是报错
ANSWER:

这个其实就是告诉你"dwb_gov_office_item_list_min“这张表不存在,在你上面的数据库截图里面的确也没看到这张表(可能在下面没截到?)
另外,可以尝试把 "dwb_gov_office_item_list_min"这个表名,改成 "datacentre.dwb_gov_office_item_list_min",
或者修改连接串,增加SearchPath或者currentSchema参数,不指定schema时,默认是在public下面


LINK:https://ask.csdn.net/questions/7649012?answer=53698765
SOURCE:CSDN_ASK
ASK_ID:7648976
ANSWER_ID:53698716
TITLE:MySQL会话第一次执行此SQL时抛出“子查询返回多行结果”的异常,如何解决?
ANSWER:
select pid from as_org WHERE id = 1468177630664540161

先查一下在这个表里面是否存在一个id对应多个pid的情况。


按照你这个表结构,我模拟了4条数据,然后用你这个sql怎么查都不会出现你这个报错,因此怀疑是你表里面的数据有问题,
虽然你给的建表sql写了个PRIMARY KEY,但这个表名好像和你截图里的表名不一致,因此不能排除数据存在异常的可能。


img


LINK:https://ask.csdn.net/questions/7648976?answer=53698716
SOURCE:CSDN_ASK
ASK_ID:7648791
ANSWER_ID:53698654
TITLE:关于#sql#的问题,写一个SQL查询,找出每个部门获得前三高工资的所有员工占前三工资总和的比列
ANSWER:

到底是oracle还是hive?两个数据库的函数有区别的
我先写个oracle的


select DEPARTMENT, EMPLOYEE, SALARY,
round((ratio_to_report(salary) over(partition by DEPARTMENT))*100,2)||‘%’ proportion
from (
select dense_rank() over(partition by a.departmendld order by a.salary desc) rk,
b.name department,a.name employee,a.salary
from employee a, department b
where a.departmendld = b.id) where rk<=3

img


问sql题麻烦用create table 和insert或者with语句把原始数据贴出来,方便回答的人调试,造数据很浪费时间的


LINK:https://ask.csdn.net/questions/7648791?answer=53698654
SOURCE:CSDN_ASK
ASK_ID:7648842
ANSWER_ID:53698638
TITLE:oracle分组查询一段天数内每天18点到第二天8点的数据
ANSWER:

首先,你这个问题有点奇怪,每天18点到第二天8点,这才14个小时,另外还有10小时的数据是不要进行统计么?(假设不统计)
然后,假设是2月1号的18点到2月2号的8点,你是想统计到1号还是2号呢?(假设统计到1号)
还有,是否包含8:00:00点整呢?(假设不包含)


假设你的日期和时间是在time 这个字段里,并且如题已经限制了天数范围,由于你只统计14个小时,另外10个小时没有在查询条件里剔除,那么只能在select 的时候用case when 来处理了,比如


select case
when time - 8 / 24 >= trunc(time - 8 / 24)+10/24 and
time - 8 / 24 < trunc(time - 8 / 24) +1 then
trunc(time - 8 / 24)
end 日期, count(1)
from test_20220225
group by case
when time - 8 / 24 >= trunc(time - 8 / 24)+10/24 and
time - 8 / 24 < trunc(time - 8 / 24) +1 then
trunc(time - 8 / 24)
end

img


(之前的sql有点小问题,已修正)


上面查的这个字段可以让你的数据得到可以用于聚合的日期字段,你按这个日期group by 就行了,这个字段为空的就是你不要的那10个小时,要去掉。
原理就是你表里的时间都减8小时,这样就可以让需要聚合的数据在同一天了


另外,如非必要,在查询条件里尽量不要对字段进行格式化,因为格式化字段会导致查询不走索引以及分区。
因此不要写这样的查询条件 to_char(日期字段,‘yyyy-mm-dd hh24’)=‘2022-02-24 17’,如果是查指定小时,应该写成


日期字段 >=date’2021-02-24+17/24 and 日期字段<date’2021-02-24+18/24

LINK:https://ask.csdn.net/questions/7648842?answer=53698638
SOURCE:CSDN_ASK
ASK_ID:7648714
ANSWER_ID:53698443
TITLE:db2数据库如何优化视图的查询效率
ANSWER:

对推荐人计算积分,那么where条件应该是推荐人id,索引也应该是这个id,因此用于计算积分的case when字段与索引没有关系 ,积分字段是不应该有索引的;
有union all的话,建议拆开两条查询分别查,最后再合并。
由于没给出你当前的sql及表结构,暂无法给出其他建议


LINK:https://ask.csdn.net/questions/7648714?answer=53698443
SOURCE:CSDN_ASK
ASK_ID:7648761
ANSWER_ID:53698393
TITLE:从MySQL的某个表中随机取出几条数据的语句是什么啊?
ANSWER:

你说的不好用是什么意思?是查询报错还是每次查都是一样的?


实测该sql没有问题,连着查几次,每次结果都不一样。

img


img


LINK:https://ask.csdn.net/questions/7648761?answer=53698393
SOURCE:CSDN_ASK
ASK_ID:7648725
ANSWER_ID:53698372
TITLE:sqlserver数据库查询问题
ANSWER:
with t as (
select 1001 id, ‘tom’ name, 1 sex, 12 age, ‘a’ text union all
select 1001, ‘tom’ ,1 ,12, ‘b’ union all
select 1001 ,‘tom’ ,1 ,12 ,‘c’)

select t.id,t.name,t.sex,t.age,
stuff((select ‘,’+t2.text from t as t2 where t2.id=t.id and t2.name=t.name and t2.sex=t.sex and t2.age=t.age for xml path(‘’)),1,1,‘’) text
from t group by t.id,t.name,t.sex,t.age

img




上面这个sql已经考虑到数据里存在分组的情况了,sql不用改


img


话说你自己就没去试一下么?


LINK:https://ask.csdn.net/questions/7648725?answer=53698372
SOURCE:CSDN_ASK
ASK_ID:7648742
ANSWER_ID:53698338
TITLE:SQL:怎么计算一个表中的和并插入到另一个表中
ANSWER:

对已经存在的行的部分字段进行修改,这个叫更新,不叫插入。
然后,你需要说明你使用的是什么数据库,不同数据库支持的写法是有所区别的。
以下是在oracle数据库中的写法


update order a set total=(select sum(price) from goods b where a.id=b.order_id) 
where exists (select 1 from goods b where a.id=b.order_id);

或者用plsql游标循环


begin
for rec in (select order_id, sum(price) s from goods group by order_id) loop
update order a set a.total=rec.s where a.id=rec.order_id;
end loop;
end;

LINK:https://ask.csdn.net/questions/7648742?answer=53698338
SOURCE:CSDN_ASK
ASK_ID:7648515
ANSWER_ID:53698165
TITLE:sql server2014 update语句执行后怎么撤回
ANSWER:

参考


LINK:https://ask.csdn.net/questions/7648515?answer=53698165
SOURCE:CSDN_ASK
ASK_ID:7648625
ANSWER_ID:53698159
TITLE:如何用oracle查询最近的一天数据。
ANSWER:
select * fromwhere 日期=(select max(日期) fromwhere 日期<trunc(sysdate))



如果这个字段是日期类型,肯定没问题,你说不行,那肯定是有条件没说明。
比如你这个日期字段是什么类型?里面的数据长什么样子?以及你期望获得什么样子的数据


LINK:https://ask.csdn.net/questions/7648625?answer=53698159
SOURCE:CSDN_ASK
ASK_ID:7648406
ANSWER_ID:53697734
TITLE:stata中两列数据如何合并相互补齐呢?
ANSWER:

你这是什么数据库什么工具?数据库里原始数据就有这个单独的点么?如果有,那就说明这两个字段是字符类型;如果没有,那就应该当空值处理。
假设数据的确是个".",则


select case when 字段a=‘.’ then 字段b else  字段a end from 表;

如果是空值,则


–通用
select case when 字段a is null then 字段b else 字段a end from 表;
–ORACLE
select nvl(字段a,字段b) from 表;
–mysql
select ifnull(字段a,字段b) from 表;



MIMIC是数据库里的数据,我问的是数据库系统。另外,你说的stata是那个数据分析软件?


stata是不支持在自己的数据上使用sql的,只能是访问其他数据库的时候使用sql


在stata上可以这么合并列,


egen  sa_new=rowtotal(sa-sa10)
keep zp sa_new

实际上就是弄个求和列,你直接相加都可以


参考


请学会使用搜索引擎来找问题


img


LINK:https://ask.csdn.net/questions/7648406?answer=53697734
SOURCE:CSDN_ASK
ASK_ID:7648170
ANSWER_ID:53697448
TITLE:oracle数据库,时间计算的sql问题
ANSWER:

请提供create table和insert 命令,并以表格形式举例说明你想达到的效果


LINK:https://ask.csdn.net/questions/7648170?answer=53697448
SOURCE:CSDN_ASK
ASK_ID:7648147
ANSWER_ID:53697441
TITLE:ORA-04091: 表发生了变化, 触发器/函数不能读它
ANSWER:

建议把代码贴出来看看


你读A表会读本次操作以外的行么?
如果只是读本行,完全不用去重新查A表,而应该用":new.字段名"这种参数,对于这张表的所有字段都是适用的


LINK:https://ask.csdn.net/questions/7648147?answer=53697441
SOURCE:CSDN_ASK
ASK_ID:7648055
ANSWER_ID:53697430
TITLE:MYSQL嵌套排序,先排序筛选最新数据,再将这个列表自定义排序
ANSWER:

建议举个例子,从目前的题目上来看没有任何难点


LINK:https://ask.csdn.net/questions/7648055?answer=53697430
SOURCE:CSDN_ASK
ASK_ID:7648018
ANSWER_ID:53697190
TITLE:Oracle数据库表中的null 和空值’ ',数据库是否可以配置成只要是空值自动写入null这种解决办法?
ANSWER:

首先,ORACLE 中的空字符串’‘和null是一样的,


insert into table  tablename(col) values (null);
insert into table tablename(col) values (’‘);

上面这两条sql插入后没有任何区别。


然后,你具体是遇到了什么问题?无论是’‘还是null,本来就都不能作为关联条件,因为空不等于任何,空也不等于空,只能用is null 或者is not null。
另外,在建表时,字段可以设置默认值,,当没有指定这个字段插入时,会按默认值写入。当然,如果这个默认值你设置成空 字符串’'或者null,其实都是相当于没有设置默认值


LINK:https://ask.csdn.net/questions/7648018?answer=53697190
SOURCE:CSDN_ASK
ASK_ID:7647825
ANSWER_ID:53697052
TITLE:用SQLServer 填充缺少日期的不同项目不同产品的每日结存
ANSWER:

用with递归可以实现


with t as (
select CAST(‘01/01/2022’ as date) 日期 ,‘A’ 项目, ‘apple’ 产品名称, 20 变动数量 ,20 结存 union all
select CAST(‘01/03/2022’ as date) ,‘A’ , ‘banana’ 产品名称, 50 变动数量 ,50 结存 union all
select CAST(‘01/05/2022’ as date) ,‘A’ , ‘apple’ 产品名称, -10 变动数量 ,10 结存 union all
select CAST(‘01/06/2022’ as date) ,‘B’ , ‘banana’ 产品名称, 20 变动数量 ,20 结存
) ,
x as(
select t.*,row_number() over(partition by 项目,产品名称 order by 日期) rn from t) ,
cte as (select 日期,项目,产品名称,变动数量,结存 from x where rn=1
union all
select dateadd(d, 1, cte.日期),cte.项目,cte.产品名称,
isnull((select x.变动数量 from x where dateadd(d, 1, cte.日期)=x.日期 and cte.项目=x.项目 and cte.产品名称=x.产品名称),0),
isnull((select x.结存 from x where dateadd(d, 1, cte.日期)=x.日期 and cte.项目=x.项目 and cte.产品名称=x.产品名称),cte.结存) from cte
where dateadd(d, 1, cte.日期)<=CAST(‘01/06/2022’ as date)
)
select * from cte order by 日期,项目,产品名称

img


sqlserver的递归sql里不能使用外关联,否则也不需要用子查询来来获取上一行了


LINK:https://ask.csdn.net/questions/7647825?answer=53697052
SOURCE:CSDN_ASK
ASK_ID:7647962
ANSWER_ID:53696986
TITLE:plsql插入数据问题
ANSWER:
–带时分秒
insert into jlgl(Start_time) values(sysdate);
–不带时分秒
insert into jlgl(Start_time) values(trunc(sysdate));

LINK:https://ask.csdn.net/questions/7647962?answer=53696986
SOURCE:CSDN_ASK
ASK_ID:7647718
ANSWER_ID:53696523
TITLE:数据库连接断开重连,是会创建新的链接吗?
ANSWER:

直连数据库的情况下,断开后重连肯定是要重新输入用户名密码登录的,当然会创建新的连接。
但是目前很多应用都是用的连接池机制,即服务启动就挂很多个数据库连接,然后应用需要访问数据库都从现有的空闲连接上进行访问,用完了就恢复空闲状态,也不需要断开,毕竟重新登录一次数据库也是要花一些时间的。但这种连接池的机制,无法很好的利用数据库自带锁的特性,只能自己写代码来模仿锁的机制


LINK:https://ask.csdn.net/questions/7647718?answer=53696523
SOURCE:CSDN_ASK
ASK_ID:7647459
ANSWER_ID:53696481
TITLE:informix数据库怎么将一行数据拆分成多行
ANSWER:

用regexp_split函数,第一个参数是原字符串,第二个参数是分隔符
官方文档:


LINK:https://ask.csdn.net/questions/7647459?answer=53696481
SOURCE:CSDN_ASK
ASK_ID:7647668
ANSWER_ID:53696475
TITLE:数据库可以增加修改,无法查询
ANSWER:

找不到select类,是用的jdbc连接的么?换个包试试?


LINK:https://ask.csdn.net/questions/7647668?answer=53696475
SOURCE:CSDN_ASK
ASK_ID:7647608
ANSWER_ID:53696446
TITLE:MySQL多表查询问题
ANSWER:

这个用开窗函数分组排序就好了呀


select * from (
select a.student_id,
a.name,
b.score_num,
b.score_time,
row_number() over(partition by a.student_id order by b.score_num desc) rn
from table_a a, table_b b
where a.student_id = b.student_id
) where rn=1

LINK:https://ask.csdn.net/questions/7647608?answer=53696446
SOURCE:CSDN_ASK
ASK_ID:7647512
ANSWER_ID:53696228
TITLE:plsql导出表数据为CSV或者xlsx格式表格,但是速度特别慢,这种应该怎么提高速度呢?(数据量比较大)数据量大概有个几百万行,大概有个30G
ANSWER:

plsql developer不适合导出大量数据,建议使用sqluldr2,这个应该是除了自带dmp以外最快的导出方式了


LINK:https://ask.csdn.net/questions/7647512?answer=53696228
SOURCE:CSDN_ASK
ASK_ID:7647496
ANSWER_ID:53696216
TITLE:sql如何将字符串替换成不同的字符?
ANSWER:

如果是日期类型,直接用date_format格式化成字符串就好了


select start_date, date_format(start_date,%Y%m%d日’) from test_a_20220218;

img


如果本来就是字符类型,那么可以先转成日期类型再用上面这个方式。


或者用最笨的方法


concat(substr(字段,1,4),‘年’,substr(字段,6,2),‘月’,substr(字段,9,2),‘日’)

LINK:https://ask.csdn.net/questions/7647496?answer=53696216
SOURCE:CSDN_ASK
ASK_ID:7647495
ANSWER_ID:53696204
TITLE:数据库手动sql修改完数据,java代码查询数据是修改前的
ANSWER:

你在数据库里改了后,有没有执行commit?
如果没有执行commit,那么你改的数据只是在本会话生效,其他会话就还是你改之前的数据


img


左边这个按钮是提交commit,右边这个是回滚rollback


LINK:https://ask.csdn.net/questions/7647495?answer=53696204
SOURCE:CSDN_ASK
ASK_ID:7647309
ANSWER_ID:53696156
TITLE:Clikhouse数据库如何根据String类型字段的首字母排序
ANSWER:
order by upper(name) desc,name 

LINK:https://ask.csdn.net/questions/7647309?answer=53696156
SOURCE:CSDN_ASK
ASK_ID:7647043
ANSWER_ID:53695548
TITLE:查出数据库表中字段1或字段2中能够匹配到关键字key的数据,想优先显示字段1中匹配的数据
ANSWER:

问题有点模糊,先确认几个点。


  1. 你想展示的数据是不是匹配到的字段1或者字段2的值,而非匹配到的这一整行?
  2. 当字段2中有值时,字段1是为空还是有值?
  3. 如果某行字段1和字段2同时匹配,你是想显示一条记录还是两条记录?如果是一条记录的话,你是想只显示字段1中的值?
  4. 字段1中是否存在能匹配到多条记录的情况?匹配到多条是同时展示?
  5. 你匹配条件是用的是等于还是like?

我先猜一下,给个sql


select  case when 字段1 like ‘%KEY%’ then 字段1 when 字段2 like ‘%KEY%’  then 字段2 end 
fromwhere (字段1 like ‘%KEY%’ or 字段2 like ‘%KEY%’);

条件没有用concat的原因是,因为不清楚你数据长啥样,怕字段1的后半截和字段2的前半截组合后刚好和key相似,因此分别写条件。而展示的数据,case when 完美的诠释了优先级的用法


LINK:https://ask.csdn.net/questions/7647043?answer=53695548
SOURCE:CSDN_ASK
ASK_ID:7647020
ANSWER_ID:53695461
TITLE:SQL 如何去除不同列不同行的重复数据
ANSWER:

请举个例子,原始数据是什么样子,以及 你想处理成什么样子


LINK:https://ask.csdn.net/questions/7647020?answer=53695461
SOURCE:CSDN_ASK
ASK_ID:7647018
ANSWER_ID:53695459
TITLE:oracle distinct后仍有重复记录
ANSWER:

有时候,它只是看上去一样,实际上不一样,可以用dump函数或者utl_raw.cast_to_raw函数来看它实际存的是什么东西,比如


select  a,b,c,dump(a),dump(b),dump© from 
(
select distinct a,b,c from table t
where t.b like ‘%ABC%’
)

具体原理可以参考我的两篇文章



LINK:https://ask.csdn.net/questions/7647018?answer=53695459
SOURCE:CSDN_ASK
ASK_ID:7646931
ANSWER_ID:53695355
TITLE:java拼接有null的查询条件要怎么办呢?
ANSWER:
  • 如果是当用户有输入值时以输入值查询,当输入值为null时不限制该条件,则
    where 字段名A=ifnull(用户输入的值,字段名A) 

  • 如果是用户输入了一个值,然后你的输出结果中除了用户输入的值外,还允许数据中出现空值,那这样一个or不就好了
    where (字段名A is null or 字段名A=用户输入的值)


LINK:https://ask.csdn.net/questions/7646931?answer=53695355
SOURCE:CSDN_ASK
ASK_ID:7646929
ANSWER_ID:53695350
TITLE:SqlServer里面null可以用update修改成某个值吗
ANSWER:

没有 "= null" 这种写法,等号要求左右两边必须有数据(二进制数据),存在至少一侧为空它就false了。
一般要查询null数据,应该要用 " where 字段名 is null"这种写法


LINK:https://ask.csdn.net/questions/7646929?answer=53695350
SOURCE:CSDN_ASK
ASK_ID:7646901
ANSWER_ID:53695338
TITLE:关于#mysql#的问题,如何解决?
ANSWER:

你这平均数是个位数不确定的浮点,浮点是不精确的,而等号则要求完全相等,
所以,尝试把等号两边都四舍五入保留相同的小数位再试试


LINK:https://ask.csdn.net/questions/7646901?answer=53695338
SOURCE:CSDN_ASK
ASK_ID:7646876
ANSWER_ID:53695182
TITLE:oracle 语句求全注释
ANSWER:

目的是更新C_NE 这张表,
先 看where条件,限定了 a.stateflag = 0 ,还有 存在于 temp_zz这个表的记录,
即下面这部分数据


select * from C_NE a where 
a.stateflag = 0
and exists
(select 1 from temp_zz b where a.product_no = b.xinid)

然后,对这部分数据,更新a.zassu_gra 这个字段,更新成(select zlevel from temp_zzz b where a.product_no = b.xinid) 这个值,如果想在更新前看这个数据的话,你可以这么查一下


select a.*,a.zassu_gra 旧值,(select zlevel from temp_zzz b where a.product_no = b.xinid) 新值 
from C_NE a
where a.stateflag = 0
and exists
(select 1 from temp_zz b where a.product_no = b.xinid);

所以,实际上你这个更新的效果,就是把上面这个sql的新值更新到旧制对应的字段上去


LINK:https://ask.csdn.net/questions/7646876?answer=53695182
SOURCE:CSDN_ASK
ASK_ID:7646733
ANSWER_ID:53695157
TITLE:无论是outlook 还是excel 还是word在录入单词的时候 词中字母录入时 会出现混乱大小写得情况
ANSWER:

参考下这个,可能是类似的问题


LINK:https://ask.csdn.net/questions/7646733?answer=53695157
SOURCE:CSDN_ASK
ASK_ID:7646743
ANSWER_ID:53695142
TITLE:mysql怎么查询两个时间段分别最近的一条数据
ANSWER:

分两次查,伪代码


where 时间 小于 ‘2022-02-20 9:00’ order by 时间 倒序 limit 1
where 时间 小于 ‘2022-02-21 11:00’ order by 时间 倒序 limit 1

LINK:https://ask.csdn.net/questions/7646743?answer=53695142
SOURCE:CSDN_ASK
ASK_ID:7646716
ANSWER_ID:53694949
TITLE:用proxifier连接公司内网,navicat中可以连接到oracle,但是本地启动项目却始终尝试连线失败
ANSWER:

换下新版的jdbc试试


LINK:https://ask.csdn.net/questions/7646716?answer=53694949
SOURCE:CSDN_ASK
ASK_ID:7646598
ANSWER_ID:53694628
TITLE:想问下大伙遇到过sql语句更新成功但没改变数据库吗
ANSWER:

你的查询条件和更新后的值都是同一个 params.title ,如果你想要修改title,那么传入的参数应该要有两个不同的title,一个老的一个新的,


var title = row.title;
var newtitle = row.newtitle;
var about = row.about;
var content = row.content;

[params.newtitle, params.about, params.content, params.title]

LINK:https://ask.csdn.net/questions/7646598?answer=53694628
SOURCE:CSDN_ASK
ASK_ID:7646528
ANSWER_ID:53694624
TITLE:interval day to second 可以取底,为什么不能取顶
ANSWER:

你用的是啥数据库?
我用openGauss貌似没问题


img


LINK:https://ask.csdn.net/questions/7646528?answer=53694624
SOURCE:CSDN_ASK
ASK_ID:7646506
ANSWER_ID:53694622
TITLE:navicat导入数据
ANSWER:

B库里面的表有数据,而且A库里同一张表也有数据?假设主键冲突,是保留B的数据还是用A的数据覆盖?如果有外键约束或者规则约束之类的,这些数据也可能会有冲突。在存在多种复杂场景的情况下,这根本不是任何一个工具能做到的事情,主要还是看数据保留规则怎么制定,不同表的规则根据业务情况可能还不一样。
两个库同一个表的数据不管逻辑直接混到一起,到时候出了故障都很难挽救了。
A库导入到B库,不考虑复杂逻辑,就只有一个选择,备份B库中即将要导入的所有表,然后清空B库中即将要导入的所有表,再执行导入。
如果是两库合并数据,由于两库有各自的递增id,那么需要对每个id都要新增一个字段放一个全局id,以避免重复,但程序代码可能就要大改了


LINK:https://ask.csdn.net/questions/7646506?answer=53694622
SOURCE:CSDN_ASK
ASK_ID:7646432
ANSWER_ID:53694604
TITLE:HiveSQL行列转换题
ANSWER:
–测试数据
create table test_20220220(id int,col string);
insert into test_20220220 values (1,‘a,b,c’);
insert into test_20220220 values (2,‘1-2-3’);
insert into test_20220220 values (3,‘A/B/C’);

–查询sql
select COLLECT_LIST(g[1])[0] as l1,
COLLECT_LIST(g[2])[0] as l2,
COLLECT_LIST(g[3])[0] as l3
from
(
select new_line,map(id,val) g from
(SELECT id, val,row_number() over(partition by id order by val) new_line
FROM test_20220220 lateral view explode(split(col,‘,|-|/’)) lv as val) as t
) as t2
group by new_line;

img


添加一个辅助列id,主要为了确定行的顺序,要不然无法知道哪行是第一行,哪行是第二行


LINK:https://ask.csdn.net/questions/7646432?answer=53694604
SOURCE:CSDN_ASK
ASK_ID:7646396
ANSWER_ID:53694518
TITLE:利用#开窗函数#的问题,如何解决?#面试题#
ANSWER:

你的月累计和年累计的确是用开窗函数没问题,用order by 或者滑动窗口都行。
但是重点是,无法保证每个产品在每天都有记录,这个点不是用开窗函数来解决,而应该用递归来处理,但这就要看你的数据库是啥了,不同数据库的写法不一样。另外,还可以通过产品列表和日期维表来无条件关联,得到两两任意组合的一个完整数据,此时可以用这个数据为主,左关联其他的数据再来进行开窗函数计算,但这明显不如递归优雅。


开窗函数不能增加不存在的记录,所以只能先构建一个不存在的记录了,不用递归sql大概长这样


with t1 as (
select * from
(select distinct pl_name from table1) a,table2 b
)

select
t1.PERIOD_CODE ,
t1.PL_NAME ,
nvl( t2.amount,0) AMOUNT_day,
sum(nvl( t2.amount,0)) over(partition by substr(PERIOD_CODE,1,6) order by PERIOD_CODE) AMOUNT_MONTH ,
sum(nvl( t2.amount,0)) over(partition by substr(PERIOD_CODE,1,4) order by PERIOD_CODE) AMOUNT_YEAR
from t1 left join table1 t2 on t1.PERIOD_CODE=t2.PERIOD_CODE and t1.pl_name=t2.pl_name

之所以没用PERIOD_MONTH这个字段,是怕数据里有跨年的,光这个月份字段无法进行准确分组,因此从日期里重新截取年月和年




如果sqlserver不支持这种窗口,那么可以使用移动窗口,从第一行到当前行 ,


sum(isnull( t2.amount,0)) over(partition by PERIOD_MONTH,t1.PL_name order by PERIOD_CODE rows between unbounded preceding and current row)

关于递归的话,我举个类似的例子吧



with t as (
select 1 dt ,‘a’ name,1 amount union all
select 2 dt ,‘a’ name,1 amount union all
select 3 dt ,‘a’ name,1 amount union all
select 5 dt ,‘a’ name,1 amount union all
select 1 dt ,‘b’ name,1 amount union all
select 2 dt ,‘b’ name,1 amount
),
x as(
select t.*,row_number() over(partition by name order by dt) rn from t) ,
cte as (select dt,name,amount,amount amount_sum from x where rn=1
union all
select cte.dt+1,cte.name,
isnull((select x.amount from x where cte.dt+1=x.dt and cte.name=x.name),0),
isnull((select x.amount from x where cte.dt+1=x.dt and cte.name=x.name),0)+cte.amount_sum from cte where cte.dt+1<=5
)
select * from cte order by name,dt

img


假设dt是日期,可以看到原始数据不连续,但通过cte中的递归,实现了数据的补齐,并且还可以同时把累加一起做了,而且,最后的数据行数可能还会比笛卡尔积的要少,因为这个对于每个产品只会从有销售的第一天开始统计,避免了很多无效数据


LINK:https://ask.csdn.net/questions/7646396?answer=53694518
SOURCE:CSDN_ASK
ASK_ID:7646223
ANSWER_ID:53694510
TITLE:MySQL如何建立大量字段的表
ANSWER:
  • 方法一,借助navicat等工具
    第一步,先把你这个表里的字段名改了,因为数据库的字段名不能是数字开头,也不能带".“
    第二步,用navicat导入,选择新建表,这个时候会自动识别excel里首行并生成对应的字段名,导入完成后,表也有了,数据也进去了。


  • 方法二,在excel里直接拼出建表sql
    第一步,和方法一的第一步一样。
    第二步,复制首行,选择性粘贴转置到另一个表里,从A2单元格开始
    第三步,在B2单元格填入字段类型和逗号
    第四步,在A1单元格填写 “create table xxxx (”
    第五步,把最后一个单元格的逗号改成”)"
    全选,复制,就是建表sql了,就像下面这张图这样



img


LINK:https://ask.csdn.net/questions/7646223?answer=53694510
SOURCE:CSDN_ASK
ASK_ID:7646298
ANSWER_ID:53694387
TITLE:mysql全表更新加where和不加where效率有区别吗?
ANSWER:

大多数情况下,加where更快,这与你是不是更新成一样的值没关系,这个只考虑要更新的记录数。
但是,你可以做几个这样的实验:
全部都是0,加条件或者不加条件全部更新成1;
全部都是1,加条件或者不加条件全部更新成1。
以上4种情况,去测下各自需要多少时间,实践出真知,毕竟这个更新效率影响的不仅仅只有这个几个因素,某个环境条件发生变化后,可能会有其他你不知道的环境条件同时发生了变化


LINK:https://ask.csdn.net/questions/7646298?answer=53694387
SOURCE:CSDN_ASK
ASK_ID:7645949
ANSWER_ID:53693925
TITLE:excel里把日期时间改成2022-02-10 07:11:13
ANSWER:

自定义单元格格式


img


LINK:https://ask.csdn.net/questions/7645949?answer=53693925
SOURCE:CSDN_ASK
ASK_ID:7645884
ANSWER_ID:53693864
TITLE:SQL计算同指令下最晚完成时间及状态个数和完成情况。
ANSWER:

是什么数据库?版本多少?




只要是支持开窗函数的数据库,都可以用下面的方式来查询


select t.*,
last_value(完成日期) over(partition by 指令 order by 完成日期) 最晚完成时间,
case when (count(case when 状态 in (‘V’,‘H’) THEN 1 END ) OVER (partition by 指令))>0 THEN ‘未完成’ else ‘完成’ end 完成状态,
count(case when 状态 in (‘B’,‘C’) THEN 1 END ) OVER (partition by 指令) BC个数,
count(case when 状态 in (‘A’,‘D’) THEN 1 END ) OVER (partition by 指令) AD个数,
count(case when 状态 NOT in (‘A’,‘B’,‘C’,‘D’) THEN 1 END ) OVER (partition by 指令) 除ABCD个数
from t

LINK:https://ask.csdn.net/questions/7645884?answer=53693864
SOURCE:CSDN_ASK
ASK_ID:7645922
ANSWER_ID:53693859
TITLE:怎么让sql查询的两个结果,对比只显示结果不同的。
ANSWER:

最简单的方式,用except


select mbl from indata where orderid=‘443140’
except
select mbl from passinfo where orderid=‘443140’ and toolsindex=‘60’

或者用exists


select mbl from indata a where orderid=‘443140’ and 
not exists (select 1 from passinfo b where b.orderid=‘443140’ and b.toolsindex=‘60’ and a.mbl=b.mbl)

或者用 in,上面有人贴了代码了


LINK:https://ask.csdn.net/questions/7645922?answer=53693859
SOURCE:CSDN_ASK
ASK_ID:7645939
ANSWER_ID:53693834
TITLE:Oracle Function执行结果诡异现场,求解释
ANSWER:

这个条件有歧义,建议把传入参数的名称改一下

img


LINK:https://ask.csdn.net/questions/7645939?answer=53693834
SOURCE:CSDN_ASK
ASK_ID:7645788
ANSWER_ID:53693548
TITLE:关于hive的一个小问题
ANSWER:

差不多,不过我会选择先过滤数据再进行聚合


select a.订单号 from a,(select 订单号 from a where 方式=7210) b where a.订单号=b.订单号 group by a.订单号 having count(1)>2

另外,我看你这个sql最后还是想查对应订单的原始记录?
hive是支持开窗函数的,用下面这个方式,套的层数更少,而且只用查询一次原表


select t2.id,t2.tp from (
select t.*,
count(1)over(partition by id) ct,
count(case when tp=7210 then 1 end) over(partition by id) c7210
from test_20220218 t) as t2
where ct>2 and c7210=1

img


LINK:https://ask.csdn.net/questions/7645788?answer=53693548
SOURCE:CSDN_ASK
ASK_ID:7645707
ANSWER_ID:53693531
TITLE:mysql开头替换的问题。
ANSWER:

还可以用正则替换


select regexp_replace(‘100100’,‘(100)(.+)’,‘200\2’)

img


有些mysql版本语法不一样,可能要改成


select regexp_replace(‘100100’,‘(100)(.+)’,‘200$2’)

img


LINK:https://ask.csdn.net/questions/7645707?answer=53693531
SOURCE:CSDN_ASK
ASK_ID:7645608
ANSWER_ID:53693335
TITLE:vs code 不能输出中文,
ANSWER:

选gbk试试


LINK:https://ask.csdn.net/questions/7645608?answer=53693335
SOURCE:CSDN_ASK
ASK_ID:7645655
ANSWER_ID:53693327
TITLE:mysql数据库导入
ANSWER:

是一张表还是多张表?
如果表少的话,写sql时用目标库的字段来写字段别名,用sql导出数据,然后再在目标库导入
如果表多的话,也可以用上面这个方式,但明显手动写sql的工作量就大了,但是匹配字段这是无论你使用哪个工具都必须要做的,因为没人知道你字段是怎么匹配的


LINK:https://ask.csdn.net/questions/7645655?answer=53693327
SOURCE:CSDN_ASK
ASK_ID:7645652
ANSWER_ID:53693323
TITLE:求一个sql语句同时满足条件
ANSWER:

别把 and 条件 和 or条件写在同一级
and 表示必须都满足 ,or表示任意满足,放同一级,前面的and的限制就没起到作用了
如果想满足条件1,且条件2和条件3任意满足一个即可的话,应该像下面这样写


条件1 and (条件2 or 条件3)

另外,你题目里说的 既为空又不等于4, 这是矛盾的,不知道你是不是想表达下面这个意思


 temp1.responsible_department = ’ ‘ and 
temp1.task_type=’' and (
temp2.self_evaluation is null or
(temp2.self_evaluation!= 4 and temp2.expected_results != 1)
)



不管你使用等于或者不等于都会把空的去掉,
这种保留空但不等于某个特定值的有两种写法
方法一


条件1 and (a is null or a!=‘123’) and 条件2

注意中间的 括号是要当成一个整体,去掉括号逻辑就错了


方法二


nvl(字段名,0)!=4

其实就是把空值变成不是空的,这样就可以判断了,但是这样就用不上索引了


LINK:https://ask.csdn.net/questions/7645652?answer=53693323
SOURCE:CSDN_ASK
ASK_ID:7645657
ANSWER_ID:53693311
TITLE:sql server 写select有没有 像 oracle里的dual
ANSWER:

不需要from和后面的东西


select ‘N/A’ as SUPPNAM, ‘’ as SUPPCODE

img


LINK:https://ask.csdn.net/questions/7645657?answer=53693311
SOURCE:CSDN_ASK
ASK_ID:7645640
ANSWER_ID:53693284
TITLE:应为nunumber,但却获得char
ANSWER:

degreetype和edutype 是数字,但是 degreetype || edutype 是字符串 ,所以有两种修改方式
1.全部定义成字符串


select id, name ,case when edutype is null then to_char(degreetype)
when degreetype is null then to_char(edutype)
else degreetype || edutype end as v from evw_BIZ_REGISTER c where c.studytype=2;

2.全部定义成数字


select id, name ,case when edutype is null then degreetype
when degreetype is null then edutype
else to_number(degreetype || edutype) end as v from evw_BIZ_REGISTER c where c.studytype=2;

LINK:https://ask.csdn.net/questions/7645640?answer=53693284
SOURCE:CSDN_ASK
ASK_ID:7645338
ANSWER_ID:53693097
TITLE:mysql如何将拼接的字符串作为字段名进行查询
ANSWER:

sql中的字符串不能直接作为sql中的表名、列名、操作符等,它就只是一个值而已,
如果需要对字符串赋予其他功能,只能使用存储过程或者函数把字符串当成动态sql执行,或者使用其他语言拼接sql语句去执行。


LINK:https://ask.csdn.net/questions/7645338?answer=53693097
SOURCE:CSDN_ASK
ASK_ID:7645391
ANSWER_ID:53693084
TITLE:DB多表查询,多个表结构一样,怎么一次查回
ANSWER:

只用查询sql的话,你这个需求肯定只能用union all
如果可以用函数或者存储过程的话,倒是可以拼接动态sql来执行,但实际上拼出来的动态sql还是有这么长,只是不用自己手敲这么长了。
还有,不同数据库的写法以及支持的功能也不一样,你没说清楚是什么数据库。
另外,楼上专家的写法我是不建议的,这种写法可能不会执行谓词内推,导致是先把所有表的所有记录读到内存里,再来过滤年龄,应该要把这个过滤条件写到每个表里去,最后再union all,这样占用内存更小


LINK:https://ask.csdn.net/questions/7645391?answer=53693084
SOURCE:CSDN_ASK
ASK_ID:7645437
ANSWER_ID:53693077
TITLE:Python打包cx_Oracle模块后报错ORA-01804
ANSWER:

cx_Oracle是需要oracle的instantclient客户端的,在连接到数据库之前,会访问操作系统的环境变量,来获取oracle客户端所在路径,并加载相关的动态库文件。
如果想要让你的程序不依赖用户电脑上的oracle客户端,那么你的程序就要把oracle的客户端文件夹也一起打包好,并且在python程序启动时进行初始化,动态识别当前程序路径,将该路径下的oracle客户端路径作为临时环境变量,
需要设置的环境变量有
ORACLE_HOME 你的instantclient文件夹
TNS_ADMIN tnsnames.ora文件所在的文件夹


LINK:https://ask.csdn.net/questions/7645437?answer=53693077
SOURCE:CSDN_ASK
ASK_ID:7645470
ANSWER_ID:53693053
TITLE:之前mysql版本太低了,重装了一个新的8版本的,但是没办法正常启动
ANSWER:

建议不要使用中文目录


LINK:https://ask.csdn.net/questions/7645470?answer=53693053
SOURCE:CSDN_ASK
ASK_ID:7645523
ANSWER_ID:53693048
TITLE:Postgresql找不到服务的问题
ANSWER:

检查操作系统日志,重点排查上次能连接到不能连接之间的所有日志,看看是否有执行过卸载软件或者删除服务的指令


LINK:https://ask.csdn.net/questions/7645523?answer=53693048
SOURCE:CSDN_ASK
ASK_ID:7645527
ANSWER_ID:53693046
TITLE:oracle plsql developer执行代码后无法终止(break)
ANSWER:

查看下此会话的等待事件是什么,可能有阻塞。
正常来说,create table as的速度是很快的。
如果要停止此会话,可以使用有权限的账号执行kill session命令


LINK:https://ask.csdn.net/questions/7645527?answer=53693046
SOURCE:CSDN_ASK
ASK_ID:7645054
ANSWER_ID:53692299
TITLE:mysql 树状图数据 递归升级版问题
ANSWER:

重复问题


–测试数据
create table test_20220217
(id int,name VARCHAR(2),p_id int,money int);
insert into test_20220217 values(1,‘A’,-1,10);
insert into test_20220217 values(2,‘B’,1,15);
insert into test_20220217 values(3,‘C’,1,12);
insert into test_20220217 values(4,‘D’,2,11);
insert into test_20220217 values(5,‘E’,2,13);
insert into test_20220217 values(6,‘F’,3,14);
insert into test_20220217 values(7,‘G’,4,20);
insert into test_20220217 values(8,‘H’,4,31);
insert into test_20220217 values(9,‘I’,5,55);

–查询
WITH RECURSIVE cte as (select t.,1 lvl,cast(null as int) third_node from test_20220217 t where id=1
union all
select t.
,lvl+1,case when lvl+1=3 then t.id when lvl+1>3 then cte.id end from test_20220217 t,cte where cte.id=t.p_id
)
select third_node,sum(money) from cte where third_node is not null group by third_node

查询效果

img


LINK:https://ask.csdn.net/questions/7645054?answer=53692299
SOURCE:CSDN_ASK
ASK_ID:7645106
ANSWER_ID:53692252
TITLE:oracle怎么写函数把英文双引号转化成中文双引号?
ANSWER:

如果不要求成对的话,直接用replace就好了,英文双引号是不存在左右的,但中文双引号有左右之分


 replace(字段名,‘"’,‘“ ‘)

如果要求左右成对,可能就有点麻烦,因为不确定这个字符串中是否存在中英文双引号混用,以及是否存在多对双引号的情况,不能简单的按单数位置的双引号改成左双引号,双数位置的双引号改成右双引号,因此在不清楚数据到底有哪些可能性的情况下,这个可能都得靠机器学习来识别语义了。
但如果只有一对双引号,结合用substr结合instr,或者用正则替换都可以处理,以下sql为示意


select substr(a, 1, instr(a, ’"’, 1, 1) - 1) || ‘左’ ||
substr(a,
instr(a, ‘"’, 1, 1) + 1,
instr(a, ‘"’, 1, 2) - instr(a, ‘"’, 1, 1)-1) || ‘右’ ||
substr(a, instr(a, ‘"’, 1, 2) + 1)
from (select ‘sdasf"214fgfv"wfff’ a from dual);

img


LINK:https://ask.csdn.net/questions/7645106?answer=53692252
SOURCE:CSDN_ASK
ASK_ID:7644821
ANSWER_ID:53692018
TITLE:下载了Oracle VM virtualBox,
ANSWER:
  1. 先检查下D盘内是否存在VitualBox这个目录,没有的话先手工建一个.
  2. 尝试鼠标右键,用管理员模式打开这个软件

LINK:https://ask.csdn.net/questions/7644821?answer=53692018
SOURCE:CSDN_ASK
ASK_ID:7644897
ANSWER_ID:53692015
TITLE:oracle数据库监听程序无法识别连接描述符中请求的服务
ANSWER:

去windows的服务里启动oracle相关的服务,至少要把service和listener这两个启动了,如果启动不了,数据库就坏了,需要查看日志进行修复,对于初学者可能会比较麻烦


LINK:https://ask.csdn.net/questions/7644897?answer=53692015
SOURCE:CSDN_ASK
ASK_ID:7644288
ANSWER_ID:53691294
TITLE:sql,给一个start时间和end时间,其中有m个断点时间,要踢出这m个月的时间,最后返回m+1条数据把区间返回
ANSWER:

用的是什么数据库?




–测试数据
create table test_a_20220218 (id int,start_date datetime,end_date datetime);
insert into test_a_20220218 values (1,‘2021-01-01’,‘2021-12-15’);
insert into test_a_20220218 values (2,‘2021-01-01’,‘2021-12-15’);
insert into test_a_20220218 values (3,‘2021-01-01’,‘2021-12-15’);

create table test_b_20220218(id int,monthend_date datetime);
insert into test_b_20220218 values(1,‘2021-03-31’);
insert into test_b_20220218 values(2,‘2021-03-31’);
insert into test_b_20220218 values(2,‘2021-05-31’);

–查询sql (mysql 8.0 以上,sqlserver去掉RECURSIVE,修改日期计算函数也可以)
with RECURSIVE cte as(
select id,start_date , end_date from test_a_20220218 a
union all
select cte.id,DATE_SUB(cte.start_date,INTERVAL -1 DAY),cte.end_date from cte where DATE_SUB(cte.start_date,INTERVAL -1 DAY)<=cte.end_date
),
t as (
select cte.id,cte.start_date,
date_sub(cte.start_date, interval (rank() over(partition by id order by cte.start_date)) day) gp
from cte where not exists (select 1 from test_b_20220218 b where b.id=cte.id and month(cte.start_date)=month(b.monthend_date))
)
select id,min(start_date),max(start_date) from t group by id,gp

img


LINK:https://ask.csdn.net/questions/7644288?answer=53691294
SOURCE:CSDN_ASK
ASK_ID:7644464
ANSWER_ID:53691288
TITLE:电脑开机出现问题,按f1之后又说电脑有问题,重新启动,请问怎么解决
ANSWER:

插在第四个口的硬盘有故障


img


这里已经说得很清楚了, BAD了,要么走售后,要么自己去买一块硬盘换上去


LINK:https://ask.csdn.net/questions/7644464?answer=53691288
SOURCE:CSDN_ASK
ASK_ID:7644424
ANSWER_ID:53691272
TITLE:sql表A里有1212212表B里1对应a,2对应b如何将表A里的数据统计个数并将1和2改成a与b
ANSWER:

你的意思是你有个A表,然后里面有一个字段,这个字段只有1或者2两种值,然后想把1更新成a,2更新成b,并统计出a有多少个和b有多少个?
这不超简单的么?


–只查询,不更新
select case when 字段=‘1’ then ‘a’ when 字段=‘2’ then ‘b’ else 字段 end, a.* from a;

–更新,前提是这个字段类型是文本型
update A set 字段=case when 字段=‘1’ then ‘a’ when 字段=‘2’ then ‘b’ end where 字段 in (‘1’,‘2’);

–统计
select 字段,count(1) from a group by 字段

如果1212212是一个字符串,要更新成ababbab,用translate函数即可


select translate(‘1212212’,‘12’,‘ab’)

LINK:https://ask.csdn.net/questions/7644424?answer=53691272
SOURCE:CSDN_ASK
ASK_ID:7644448
ANSWER_ID:53691259
TITLE:sql 做连接查询,表1单条数据必须对应表2多行数据
ANSWER:
select1.poi_id , 表2.原因 , 表2.数量 ,表1.销售额 from1 right join2  on1.poi_id = 表2.poi_id
–或者
select1.poi_id , 表2.原因 , 表2.数量 ,表1.销售额 from2 left join1 on1.poi_id = 表2.poi_id

LINK:https://ask.csdn.net/questions/7644448?answer=53691259
SOURCE:CSDN_ASK
ASK_ID:7644434
ANSWER_ID:53691253
TITLE:MySQL如何使用count(left())
ANSWER:

count是用来计数的,只要不是空值,每行都会记为1,left(code,7) 返回的是code的前7位,比如 left(‘AA001-11’,7) 返回的是 ‘AA001-1’,
group by left(code,7) 这个表示,每个left(code,7) 只会显示一行,按照标准sql来说,你这个语法是错误的,因为你select了code这个字段,但是code又没放在group by 后面,由于同一个left(code,7)会有多个code,但又只能显示一个code,因此在老版本的mysql里会随机显示一个code。
我猜你是不想改变数据行数,但是要统计每一行的code前7位相同的有多少行吧?
一般在本行体现非本行的数据,要用到开窗函数,mysql版本需要在8.0版本以上,但是你这个sql既然能执行,说明大概率是用的老版本,不支持开窗函数,那么就只能写个子查询再关联了


select * from sku a join (
SELECT left(code,7) lf,count(1) num FROM sku group by left(code,7) having count(1)=2) b
on left(a.code,7)=b.lf;

如果是mysql8.0以上,可以用下面的sql


select * from 
SELECT sku.*,count(1) over(partition by left(code,7)) num FROM sku)
where num=2

LINK:https://ask.csdn.net/questions/7644434?answer=53691253
SOURCE:CSDN_ASK
ASK_ID:7644148
ANSWER_ID:53691006
TITLE:遇到一个MYSQL错误
ANSWER:

sql语法错误,请把你的完整sql贴出来


LINK:https://ask.csdn.net/questions/7644148?answer=53691006
SOURCE:CSDN_ASK
ASK_ID:7644257
ANSWER_ID:53690999
TITLE:oracle数据库表结构设计规范
ANSWER:

别信什么通用的,楼上文章里第一条全小写就不对了,oracle里更常见的是全大写,很少有用小写。
实际上,在不同的项目中,规范都可能会有不一样,比如表的命名规则,字段的命名规则,是横表还竖表等等。哪怕是oracle自家旗下的不同业务软件的表设计规范都
可能会有所区别。
多去看国外大厂软件的数据库设计,慢慢去归纳总结为什么要这么设计,再结合一些文档去分析,了解数据库的几范式,有个核心就好了,具体的设计规范要随着不同的项目去随机应变,考虑应用读写、查询报表开发、逻辑处理等方面进行综合设计


LINK:https://ask.csdn.net/questions/7644257?answer=53690999
SOURCE:CSDN_ASK
ASK_ID:7644322
ANSWER_ID:53690984
TITLE:sql请教,有点疑惑,不知道要怎么写
ANSWER:

请说明是用的什么数据库。
一般这种用开窗函数做分组排序就好了,但mysql5是不支持的


select * from (
select u.*,row_number() over(patition by login_id order by deflut desc,cratetime desc) rn from user u) as t
where rn=1

以上sql在oracle、mysql8.0、sqlserver、hive、postgresql等等数据库里都是支持的


LINK:https://ask.csdn.net/questions/7644322?answer=53690984
SOURCE:CSDN_ASK
ASK_ID:7644349
ANSWER_ID:53690980
TITLE:SQLCODE=-206, SQLSTATE=42703
ANSWER:

你把你sql里面, as 后面的列名的双引号全部去掉,然后把那个 RATE_START_DATE 改成 RATESTARTDATE 。
这个报错是因为"列名没有在FROM语句所引用的任何表中“
即 RATE_START_DATE 和 ”rateStartDate“ 不一致, rateEndDate 和"rateEndDate" 也不一致


LINK:https://ask.csdn.net/questions/7644349?answer=53690980
SOURCE:CSDN_ASK
ASK_ID:7644050
ANSWER_ID:53690435
TITLE:python相关提问
ANSWER:

必须网页本身具有PC端和移动端网页自适应的模式才行,这样只需要调整浏览器的分辨率及设备信息就行了。
但是如果网站本身就只开发了pc端,不存在移动端,那一般的开发语言都不可能有完美的通用方案自动转换成移动端网页,否则做移动网页设计的都得下岗,不仅仅是页面风格和分辨率不一样,交互方式也是大有区别的。


LINK:https://ask.csdn.net/questions/7644050?answer=53690435
SOURCE:CSDN_ASK
ASK_ID:7644060
ANSWER_ID:53690428
TITLE:VMware “用户在命令行上发出了 EULAS_AGREED=1,表示不接受许可协议。”
ANSWER:

能不能上个图看看?


LINK:https://ask.csdn.net/questions/7644060?answer=53690428
SOURCE:CSDN_ASK
ASK_ID:7644057
ANSWER_ID:53690423
TITLE:mysql查询出现查询条件影响查询字段值的诡异问题求解
ANSWER:

sql哪有你这么写的,套了十几层,不就left join 么,有必要加一个表就套一层么?
建议把基础语法学好,重写这个sql。
至于数据出现两个状态的问题,你有没有想过,可能这两条数据是同时存在的,你可以尝试把最后的where条件修改为dept_id=296,看看数据长啥样。
如果业务数据不允许同时出现两个状态的话,那么极有可能是中间的sql写错了,少关联了条件,导致了数据产生了笛卡尔积,记录翻倍。
所以,还是建议重写这个sql,其实这个sql根本就不用写得这么长


LINK:https://ask.csdn.net/questions/7644057?answer=53690423
SOURCE:CSDN_ASK
ASK_ID:7644098
ANSWER_ID:53690412
TITLE:关于#数据库#的问题,如何解决?
ANSWER:

题目没说如果不是年初第一天开始的情况,我先假设至少都是从年初第一天就开始有数据的吧。
另外,也没说数据库类型,根据这个字段类型,我就当你是在问oracle的吧。
假设要查某一个账户代码的


select sum(F_INCOME) /(trunc(sysdate)-trunc(sysdate,‘yyyy’)+1) *(to_date(to_char(sysdate,‘yyyy’)||‘1231’,‘yyyymmdd’)-trunc(sysdate,‘yyyy’)+1) from
where VC_FUNDCODE=‘xxxx’ and D_DATE>=trunc(sysdate,‘yyyy’)

假设要查所有账户代码的


select VC_FUNDCODE ,sum(F_INCOME) /(trunc(sysdate)-trunc(sysdate,‘yyyy’)+1) *(to_date(to_char(sysdate,‘yyyy’)||‘1231’,‘yyyymmdd’)-trunc(sysdate,‘yyyy’)+1) from
where D_DATE>=trunc(sysdate,‘yyyy’) group by VC_FUNDCODE

LINK:https://ask.csdn.net/questions/7644098?answer=53690412
SOURCE:CSDN_ASK
ASK_ID:7644054
ANSWER_ID:53690395
TITLE:关于#c##的问题:SqlDBA数据层_错误2为过程或函数 XWWL_UPDATE_USER_DATA_NEW指定了过多的参数 String_0
ANSWER:

你去数据库里看一下 XWWL_UPDATE_USER_DATA_NEW有几个参数,然后调试的时候打印一下参数,看看传了几个参数进去


LINK:https://ask.csdn.net/questions/7644054?answer=53690395
SOURCE:CSDN_ASK
ASK_ID:7644004
ANSWER_ID:53690225
TITLE:对于数据之间有逗号的数据应该怎么进行表连接查询(SQL)
ANSWER:

是用的什么数据库?
你这个数据处理的思路应该是,对于逗号分割的字段内容,转换成列,然后再去进行表连接。但是不同数据库的处理方式不一样




postgresql,可以用unnest结合string_to_array,将指定字符串按指定分隔符转成一列


img


然后再去join,最后再聚合就行了


select A.ID,LISTAGG(部门编码对应值,‘,’) WITHIN GROUP (ORDER BY 部门编码对应值) from 
(select id, unnest(string_to_array(部门编码,‘,’)) 部门编码 from 原始表数据 ) a
left join
(select id,部门编码对应值
from 要连接查询的表) b on a.部门编码=b.id
GROUP BY A.ID
;

img


LINK:https://ask.csdn.net/questions/7644004?answer=53690225
SOURCE:CSDN_ASK
ASK_ID:7644002
ANSWER_ID:53690220
TITLE:两条相同的数据 返回其中一条
ANSWER:
select sfzh ,dwzh fromwhere  zt in (‘01’,‘02’) group by  sfzh ,dwzh having count(distinct zt)=2;

LINK:https://ask.csdn.net/questions/7644002?answer=53690220
SOURCE:CSDN_ASK
ASK_ID:7643931
ANSWER_ID:53690131
TITLE:根据身份证号获取年龄大于60岁的人
ANSWER:

因为你标签写的是oracle,我先写了这个


select (trunc(sysdate)-to_date(substr(‘430123200010011234’,7,8),‘yyyymmdd’))/365.25 from dual;

img


实际上就是截取字符串,然后转成日期,oracle里的日期可以直接相减得到相差的天数,最后直接除以一年的天数就行了,但这里其实有个需求没有描述清楚,所谓的60岁,是指过了60岁生日之后才算60岁,还是只要当前年和出生年之间相差60年就算60岁?继续深究的话,每年的天数都不一样,这个问题会变得很复杂,所以我上面直接除了个每年天数的近似值


另外,DB2里虽然也可以to_date(substr(‘430123200010011234’,7,8),‘yyyymmdd’) 这样写,但是由于它的单位不是天,因此直接相减不等于天,需要转成day再减


select trunc(sysdate),
to_date(substr(‘430123200010011234’,7,8),‘yyyymmdd’),
(days(sysdate)-days(to_date(substr(‘430123200010011234’,7,8),‘yyyymmdd’)))/365.25 from SYSIBM.SYSDUMMY1;

img


LINK:https://ask.csdn.net/questions/7643931?answer=53690131
SOURCE:CSDN_ASK
ASK_ID:7643928
ANSWER_ID:53690115
TITLE:python 读取数据库上亿级数据如何去重呢
ANSWER:

上亿的数据量,读出来都很费时间了,不仅内存扛不住,网络带宽、磁盘io都会有压力。为什么不直接在源数据库里用sql去重呢?


LINK:https://ask.csdn.net/questions/7643928?answer=53690115
SOURCE:CSDN_ASK
ASK_ID:7643915
ANSWER_ID:53690109
TITLE:MySQL 触发器未实现功能
ANSWER:

因为你触发器监视的是update 动作,而不是insert动作,因此插入并不会触发,
before update on 应该改成 after insert on ,才会在插入之后触发


LINK:https://ask.csdn.net/questions/7643915?answer=53690109
SOURCE:CSDN_ASK
ASK_ID:7643871
ANSWER_ID:53689989
TITLE:这应该是哪里的问题呐
ANSWER:

你在那个服务那里鼠标右键查看属性,就可以看到这个服务启动程序的路径,再去找这个路径下是不是有对应的这个文件


LINK:https://ask.csdn.net/questions/7643871?answer=53689989
SOURCE:CSDN_ASK
ASK_ID:7643847
ANSWER_ID:53689985
TITLE:这是 我oracle数据库中的数据
ANSWER:

首先,纯数字不能作为字段名,我会把你的1和2,改成D1,D2
然后,这个其实很简单,思路是先把上面的字段拉到左边,作为一个二维表,然后把另一个维度再拉上去作为字段就行了


–测试数据
create table abc( id NUMBER,c varchar2(2),a varchar2(2),b varchar2(2));
insert into abc values(1,‘C1’,‘A1’,‘B1’);
insert into abc values(2,‘C2’,‘A2’,‘B2’);
COMMIT;

–查询sql
select from (
select
from abc UNPIVOT (VAL FOR COL IN (C,A,B)))
PIVOT (MAX(VAL) FOR ID IN (‘1’ D1,‘2’ D2))

img


LINK:https://ask.csdn.net/questions/7643847?answer=53689985
SOURCE:CSDN_ASK
ASK_ID:7643866
ANSWER_ID:53689966
TITLE:mysql 如何查询每个用户消费金额最大的记录?
ANSWER:

“每个用户消费金额最大的记录” 当然是指的


SELECT
user_id,
max( amount )
FROM
orders
GROUP BY
user_id

这绝对没有任何问题,但是,原问题真的是这个么?
如果原问题是,查询每一笔订单的记录,并顺便带出对应订单的用户历史所有订单中最高的一笔金额


select o.*,
max(amount ) over(partintion by user_id ) max_amount
from orders o;

不过,开窗函数在mysql里,得8.0以上版本才支持


另外,你第二个sql,查的其实是每个用户最高金额的订单id,但这样查的话,同一个用户最高金额如果有两笔订单,也会一起展现出来


LINK:https://ask.csdn.net/questions/7643866?answer=53689966
SOURCE:CSDN_ASK
ASK_ID:7643800
ANSWER_ID:53689959
TITLE:请问这道难题要怎么解,用mysql和oracle都行
ANSWER:
  1. 数据有问题,19计算机2班有两个老师都是教的同一个科目,找不到老师和考试成绩之间的唯一关系,是不是教师的最后一行应该为204?
  2. “所教授学生的整体平均分”、“该科目整体平均分(该年级该科目平均分)” ,这两个栏位需要再解释一下,前者是指通过老师找到科目找到学生,再反向求这些学生的所有科目的平均分?还是只看这个老师教的科目的平均分?那这样和"该科目整体平均分“有什么区别?从你的数据里来看,反正一个老师只会教一个年级的一个科目?一个科目也只存在于一个年级?


WITH TP AS (
select st.studentid,
st.sname,
st.schoolyear,
st.classno,
sc.exid,
sc.score,
et.subjectid,
sj.exname,
t.TEACHER,
avg(sc.score) over(partition by t.TEACHER) T_AVG,
avg(sc.score) over(partition by SCHOOLYEAR,et.subjectid) Y_AVG,
RANK() OVER(partition BY et.subjectid ORDER BY sc.score DESC) RK
from Scores sc, Students st, Examinations et, Teach t, Subjects sj
where sc.studentid = st.studentid
and sc.exid = et.exid
and t.subjectid = et.subjectid
and t.classno = st.classno
and t.subjectid = sj.subjectid
)
select TEACHER 教师,
MIN(exname) 科目,
round(MIN(T_AVG),2) 所授平均分,
round(MIN(Y_AVG),2) 科目年级平均分,
DENSE_RANK() OVER(PARTITION BY MIN(exname) ORDER BY MIN(T_AVG) DESC) 所授平均分名次,
MAX(score) 最高分,
LISTAGG(CASE
WHEN RK = 1 THEN
SNAME
END,
‘,’) within group (order by 1) 最高分姓名
from TP GROUP BY TEACHER

img


用的oracle,LISTAGG这个函数在最新的几个oracle版本里变更了好多次,上面这个sql有一点点缺陷,就是逗号多了,需要用listagg(distinct)来处理,但不清楚你的oracle的版本,所以我没加,或者直接用正则替换把两个以上的逗号替换成一个逗号,再去掉首尾的逗号也行。
如果是11g以下的版本,直接用wm_concat(distinct ) 也行,但是这个函数是官方未公开函数,从12c版本起已经没有了,不建议使用


LINK:https://ask.csdn.net/questions/7643800?answer=53689959
SOURCE:CSDN_ASK
ASK_ID:7643760
ANSWER_ID:53689824
TITLE:mysql条件查询 where条件的字段不判断默认是多少?
ANSWER:

where后面的都是布尔型,非布尔型的值都是真true,也就是恒成立


LINK:https://ask.csdn.net/questions/7643760?answer=53689824
SOURCE:CSDN_ASK
ASK_ID:7643768
ANSWER_ID:53689823
TITLE:按时间批量建表报了ORA-02264:名称已被一个现有约束条件占用
ANSWER:

oracle里面的约束在一个schema下的确不能重名,与是不是在同一张表里没关系


LINK:https://ask.csdn.net/questions/7643768?answer=53689823
SOURCE:CSDN_ASK
ASK_ID:7643820
ANSWER_ID:53689817
TITLE:为什么select语句和join出来的记录数据一样(语言-开发语言)
ANSWER:

join是把两个表左右横着放,union all是把两个表上下竖着放


LINK:https://ask.csdn.net/questions/7643820?answer=53689817
SOURCE:CSDN_ASK
ASK_ID:7643391
ANSWER_ID:53689299
TITLE:资源管理器提示内存使用率100%,如何处理
ANSWER:

如果开了虚拟化的话,你的主操作系统就和其他虚拟机环境是平级的,只能看到自己的内存使用情况,看不到其他虚拟化环境内存的使用情况


LINK:https://ask.csdn.net/questions/7643391?answer=53689299
SOURCE:CSDN_ASK
ASK_ID:7643533
ANSWER_ID:53689290
TITLE:用什么语言或者什么库可以实现解析Json文件里的$符号
ANSWER:

这玩意不能直接当成json格式用,建议直接用字符串的方式进行解析,从头开始遍历每一个字符,遇到"${"开始记录.遇到"}"保存一个元素


LINK:https://ask.csdn.net/questions/7643533?answer=53689290
SOURCE:CSDN_ASK
ASK_ID:7643406
ANSWER_ID:53689281
TITLE:数据库中一列数据中带有括号,只求括号内的内容
ANSWER:

用正则,但是得看是什么数据库,不同数据库的正则表达式有区别,比如postgresql的是


select regexp_substr(‘var(456)’, ‘(?<=()(.+?)(?=))’)

img


但同样的正则表达式在mysql和Oracle里是查不出来的,因为转义符及函数参数可能有区别。


另外,还有一种通用的思路,就是用instr函数来定位左括号和右括号出现的位置,再用substr来进行截取


select substr(a,instr(a,‘(’)+1,instr(a,‘)’)-instr(a,‘(’)-1) from 
(select ‘var(456789)’ a from dual)

img


LINK:https://ask.csdn.net/questions/7643406?answer=53689281
SOURCE:CSDN_ASK
ASK_ID:7643546
ANSWER_ID:53689268
TITLE:如何截取长度不一致的字符串?
ANSWER:

charindex的位置是从左往右数的位置,charindex(‘,’,notext) 这个返回的一直都是第一个逗号的位置,没有实际价值,因为你无法确定后面逗号出现的长度规律,既有两位数字也有一位数字。
可惜sqlserver没有instr函数,无法直接查询第n个逗号出现的位置,(可以用自定义函数实现,(参考 https://blog.csdn.net/baidu_38318159/article/details/109095160 )总逗号个数减去11,即为倒数第10个逗号的位置)。
但是,建议你还是把这个字符串按逗号分割展开成一列,取正序前十个和倒序前十个,组合到一起,只要数据格式化了,想怎么整就怎么整


LINK:https://ask.csdn.net/questions/7643546?answer=53689268
SOURCE:CSDN_ASK
ASK_ID:7640481
ANSWER_ID:53689241
TITLE:关于软件开源的一些问题
ANSWER:

其实这个要看你的开源协议是怎么写的。开源协议就相当于民事合同,什么能做什么不能做都写在里面了,如果有必要的话,还可以针对开源协议模板进行细节描述修改。


举个实际的例子,目前华为的GaussDB是闭源的,但openGauss是开源的,这两个数据库互相吸收另一个的代码,在声明中都有按照开源协议注明代码来源


LINK:https://ask.csdn.net/questions/7640481?answer=53689241
SOURCE:CSDN_ASK
ASK_ID:7643161
ANSWER_ID:53688851
TITLE:请问SQL里怎样替换字段里类似“120115-”这样6位数加横线的字符串?
ANSWER:

这典型的正则替换嘛


select regexp_replace(‘220214-ighreiughaeruh -regf322-5 gdf- 220215-’,‘(\d{2})(\d{2})(\d{2})-’,‘20\1-\2-\3’)

实测截图

img


LINK:https://ask.csdn.net/questions/7643161?answer=53688851
SOURCE:CSDN_ASK
ASK_ID:7643209
ANSWER_ID:53688819
TITLE:MySQL 中用LIMIT获取最后5条数据
ANSWER:

你这个语法其实对于标准sql来说是个错的, 如果存在group by ,那么未聚合的字段必须都接在group by 后面,
老版本的mysql没这个限制,但是查出来的数据是个随机的,比如你这个riqi,如果对于一个week,存在多条记录,那么它查出来的就是随机的一个值。
正确的语法,既然你这里没有使用到聚合函数,那么week和riqi两个字段都要放在group by 后面,但这样可能行数就不满足要求了,
如果一个week只要一个riqi,那么请使用min(riqi) 或者max(riqi)来聚合,返回指定规则的唯一值


LINK:https://ask.csdn.net/questions/7643209?answer=53688819
SOURCE:CSDN_ASK
ASK_ID:7643262
ANSWER_ID:53688810
TITLE:MYSQL能否实现将字符串转换为表达式进行计算?
ANSWER:

sql不能把字符串当成指令的,只能用存储过程,存储过程里可以把字符串当成动态sql执行,具体可以搜索一下 "mysql 动态sql" 进行了解


LINK:https://ask.csdn.net/questions/7643262?answer=53688810
SOURCE:CSDN_ASK
ASK_ID:7643323
ANSWER_ID:53688789
TITLE:Pd 里面注释变成这样了……
ANSWER:

到设置里把显示的字体改了,有些字体就是这样显示的


LINK:https://ask.csdn.net/questions/7643323?answer=53688789
SOURCE:CSDN_ASK
ASK_ID:7643008
ANSWER_ID:53688297
TITLE:除了用 STRING_SPLIT重新排序 现在学习下面的函数,但是老数据没有更新,但不知道错误出现在哪里?特此提问请教
ANSWER:

先不急着更新,尝试先select这个函数,传入某一条记录的字符串,看看查出来是什么东西


LINK:https://ask.csdn.net/questions/7643008?answer=53688297
SOURCE:CSDN_ASK
ASK_ID:7643034
ANSWER_ID:53688296
TITLE:请问爬虫里怎么自动爬取多个网页的数据汇总到一个表?
ANSWER:

只要能写一个,你就把链接做成参数,
然后把200个链接做成列表,对列表循环执行你写的那段代码


LINK:https://ask.csdn.net/questions/7643034?answer=53688296
SOURCE:CSDN_ASK
ASK_ID:7642931
ANSWER_ID:53688040
TITLE:PHP登录如何实现多个用户数据表的查询?
ANSWER:

哪里有你这么写的,如果用户数多了,难道每次登录都去把所有用户信息捞一次?
应该在sql查询的时候,直接加上where条件,限定只查这一个用户,就只会查到一条记录或者查不到记录,如果查到一条,再匹配密码是否一致就好了


LINK:https://ask.csdn.net/questions/7642931?answer=53688040
SOURCE:CSDN_ASK
ASK_ID:7642896
ANSWER_ID:53687933
TITLE:mysql数据库导入.sql文件显示乱码
ANSWER:

在cmd里,先输入chcp 65001 并回车,然后再登录mysql查询数据


LINK:https://ask.csdn.net/questions/7642896?answer=53687933
SOURCE:CSDN_ASK
ASK_ID:7642525
ANSWER_ID:53687495
TITLE:WIN10安装UltraEdit软件如何解决乱码问题?
ANSWER:

你下载错了版本,这个是繁体中文版的,字符集是big5,你这简体中文系统打开当然乱码了
要下载右边那个


img


LINK:https://ask.csdn.net/questions/7642525?answer=53687495
SOURCE:CSDN_ASK
ASK_ID:7642608
ANSWER_ID:53687454
TITLE:正则表达式问题,帮个忙
ANSWER:

你这个字符串里是没有回车的, "&#34;这个符号表示一行拆开,但实际上还是一行,看下面这个例子


import re
data=‘’‘defasdf res=124564
’‘’
<br/>‘iuguytgf’
pat=re.compile(r’res=(.+\n.+)‘)
a=re.findall(pat,data)
print(a)

img


如果是要截取指定字符串后面的所有字符


import re
data=‘defasdf res=124564 ‘<br/>‘iuguytgf’
pat=re.compile(r’res=(.+)’)
a=re.findall(pat,data)
print(a)

img


如果是要截后面的分辨率


import re
data=’’‘defasdf res=1280x800
’‘’
<br/>‘iuguytgf’
pat=re.compile(r’res=(\d+x\d+)')
a=re.findall(pat,data)
print(a)

img


LINK:https://ask.csdn.net/questions/7642608?answer=53687454
SOURCE:CSDN_ASK
ASK_ID:7642258
ANSWER_ID:53687123
TITLE:数据库排序问题,麻烦了
ANSWER:

建一个新表,有两个字段,id自增步长为2初始为2, 还有一个科目名称字段,然后


insert into 新表(科目名称)
select distinct 科目名称 from 原表;

update 原表 a,新表 b set a.科目名称=b.id where a.科目名称=b.科目名称;

这样既更新了数据,又保留了id和科目名称的对应关系,如果直接更新的话,你就不知道数字是对应哪个科目了


LINK:https://ask.csdn.net/questions/7642258?answer=53687123
SOURCE:CSDN_ASK
ASK_ID:7642259
ANSWER_ID:53687119
TITLE:关于#sql#的问题:需要在mysql数据库对表进行排序
ANSWER:

这个题其实有个矛盾点,
你是想有唯一的排序规则还是随机排序(每次顺序都不一样)?
如果是唯一排序,让每次查询结果一样,那肯定得手动定义每个学科的编号,可以用一个表来定义,或者在查询sql后面加上


order by case when a=‘语文’ then 2 when a=‘英语’ then 4 …(枚举所有) end

如果只是想随机取个序号,那就不一定语文非得是2,随便弄个序号乘以2就是了


LINK:https://ask.csdn.net/questions/7642259?answer=53687119
SOURCE:CSDN_ASK
ASK_ID:7642302
ANSWER_ID:53687071
TITLE:mid(tex1,instr(text1,“通信原理、”)+5)这个+5是什么意思
ANSWER:

instr返回的是指定字符串所在的位置,返回值是个整数,当然可以进行加减运算


LINK:https://ask.csdn.net/questions/7642302?answer=53687071
SOURCE:CSDN_ASK
ASK_ID:7642186
ANSWER_ID:53686775
TITLE:uni-app怎样实现隐藏手机号中间位数,又能成功登录?
ANSWER:

定义一个样式,隐藏中间几位数,在页面对这个标签指定使用该样式,实际值和显示值就可以不一样了,这其实和密码处理的方式很类似


LINK:https://ask.csdn.net/questions/7642186?answer=53686775
SOURCE:CSDN_ASK
ASK_ID:7642209
ANSWER_ID:53686772
TITLE:excel表格数据怎么用SQL体现出来
ANSWER:

看你使用的是什么数据库,不同数据库有不同的连接工具,当然也有通用的工具,比如navicat Premium 、dbeaver等,打开工具后,连接数据库,在数据库中建好目标表,然后选择导入功能导入数据即可。
另外,其实excel本身也可以当成数据库,如果是安装的微软的office的话,可以在excel中添加数据源,选择odbc,从excel文件添加,会弹出msquery的界面,此界面可以可视化拖拽出查询sql,也可以直接输入sql命令进行查询


LINK:https://ask.csdn.net/questions/7642209?answer=53686772
SOURCE:CSDN_ASK
ASK_ID:7641741
ANSWER_ID:53686309
TITLE:postgreSQL 报错:portal “C_93” does not exist
ANSWER:

你使用其他工具运行这个sql并导出数据会不会报错?


LINK:https://ask.csdn.net/questions/7641741?answer=53686309
SOURCE:CSDN_ASK
ASK_ID:7641691
ANSWER_ID:53685749
TITLE:mysql中case语句返回的结果不是预期结果
ANSWER:

你这个case when 的else null位置写错了,语法应该是


case 
when 条件A then 值A
when 条件B then 值B
else 值C
end

另外,你这问题说是mysql,标签又选个mssql,到底是哪个?


LINK:https://ask.csdn.net/questions/7641691?answer=53685749
SOURCE:CSDN_ASK
ASK_ID:7641660
ANSWER_ID:53685748
TITLE:SQL数据分析面试疑问?
ANSWER:
select 日期,count(distinct 用户id) 每日活跃人数 from 登录表 group by 日期

select count(distinct 用户id) 累计活跃人数 from 登录表 where 日期>=过去的某一天

select count(distinct 用户id) 未购买的人数 from 登陆表 where 日期>=过去的某一天 and not exists (select 1 from 购物表 where 登录表.用户id=购物表.用户id)

比例的话,除一下就是了


两个表不直接join的原因是,一个用户可能存在多次登陆记录,直接join会造成内存中的数据翻倍,可能会影响数据库中的其他业务,非得join的话,需要先把登陆表去个重,确保用户id唯一,再去join


LINK:https://ask.csdn.net/questions/7641660?answer=53685748
SOURCE:CSDN_ASK
ASK_ID:7641612
ANSWER_ID:53685633
TITLE:kafka消费者如何在Linux命令行后台执行
ANSWER:

用nohup
参考


LINK:https://ask.csdn.net/questions/7641612?answer=53685633
SOURCE:CSDN_ASK
ASK_ID:7641558
ANSWER_ID:53685630
TITLE:Cause: java.sql.SQLSyntaxErrorException: ORA-00907: 缺失右括号
ANSWER:

你这个写法应该是绑定变量,而不是拼字符串替换,因此需要进行参数拼接,比如


 ‘%’||参数||‘%’

LINK:https://ask.csdn.net/questions/7641558?answer=53685630
SOURCE:CSDN_ASK
ASK_ID:7641494
ANSWER_ID:53685445
TITLE:Excel如何在筛选数据源的同时实现数据透视表的同步更新?
ANSWER:

你筛选数据源这个动作是在excel里面手动点的?那这题貌似与python和sql没有任何关系了。。。
excel的筛选触发不了事件,因此需要单独用vba写个筛选功能,可以参考这个例子


在这段代码的基础上,再做个输入框及按钮,点击时,将输入框的值传入vba,来触发该事件


LINK:https://ask.csdn.net/questions/7641494?answer=53685445
SOURCE:CSDN_ASK
ASK_ID:7641347
ANSWER_ID:53685203
TITLE:excel怎么把数据单位化成亿,并且保留一位小数
ANSWER:

直接把数据除以100000000,并round保留1位小数(或者设置单元格格式为保留一位小数)
如果是亿并保留2位小数的话,可以直接设置单元格格式为


0“.”00,“亿”

LINK:https://ask.csdn.net/questions/7641347?answer=53685203
SOURCE:CSDN_ASK
ASK_ID:7641184
ANSWER_ID:53685182
TITLE:数据透视表显示报表筛选页如何只显示单个的数据
ANSWER:

这题的难点看上去与数据透视表本身没有关系,只是想达到一个根据某列数据的值,自动把数据分到不同sheet的效果,每个sheet里的那个负责人筛选没有任何意义,反正每个sheet只有一个负责人,干啥还要给个筛选?


数据透视表中的显示报表筛选页只是自动复制了多个sheet页,并且自动完成了筛选显示,实际上未筛选的数据都是一样的,但只要用户不去操作筛选,每个sheet显示的数据就已经是分开的了,这看上去也没问题呀。如果不想让用户筛选,那就对每个分出来的表再复制选择性粘贴一次呗。


其实还是写个脚本来处理更方便一些,比如用python


LINK:https://ask.csdn.net/questions/7641184?answer=53685182
SOURCE:CSDN_ASK
ASK_ID:7641307
ANSWER_ID:53685144
TITLE:数据库ORA-12514:TNS:提示监听程序当前无法识别连接描述中的请求服务
ANSWER:

先检查数据库监听是否正常开启,确认在数据库服务器上能通过sqlplus连接数据库
然后检查客户端的tnsnames配置,看端口号以及sid或者sevicename配置是否和数据库监听的配置一致


LINK:https://ask.csdn.net/questions/7641307?answer=53685144
SOURCE:CSDN_ASK
ASK_ID:7641238
ANSWER_ID:53685143
TITLE:!监听程序无法识别链接描述符中请求的服务
ANSWER:

先检查数据库监听是否正常开启,确认在数据库服务器上能通过sqlplus连接数据库
然后检查客户端的tnsnames配置,看端口号以及sid或者sevicename配置是否和数据库监听的配置一致


LINK:https://ask.csdn.net/questions/7641238?answer=53685143
SOURCE:CSDN_ASK
ASK_ID:7641078
ANSWER_ID:53685099
TITLE:Oracle使用SQLloader提示sql*loader-406.导入没成功但也没报错
ANSWER:

你把你写的loader命令和控制文件、还有表结构发出来看看


LINK:https://ask.csdn.net/questions/7641078?answer=53685099
SOURCE:CSDN_ASK
ASK_ID:7641001
ANSWER_ID:53684580
TITLE:MySql数据库查询的问题
ANSWER:

这不就是正常join关联另外一个表就好了么?


select 表a.*,表b.姓名 from 表A left join 表b on 表a.create_id=表b.create_id where ???

LINK:https://ask.csdn.net/questions/7641001?answer=53684580
SOURCE:CSDN_ASK
ASK_ID:7640925
ANSWER_ID:53684577
TITLE:怎么把这条语句改成能够获取到表中最大月份并且往前面推5个月 加上最大月份一共六个月的数据
ANSWER:
select  from xx表 
where to_date(YEAR||MONTH,‘yyyymm’)>=
(select add_months(to_date(max(YEAR||MONTH),‘yyyymm’),-5) from xx表)

或者


select  from xx表 
where YEAR||MONTH>=
(select to_char(add_months(to_date(max(YEAR||MONTH),‘yyyymm’),-5),‘yyyymm’) from xx表)

LINK:https://ask.csdn.net/questions/7640925?answer=53684577
SOURCE:CSDN_ASK
ASK_ID:7469962
ANSWER_ID:53684464
TITLE:怎么能够在ARM架构的CentOS上安装Oracle数据库?
ANSWER:

qemu能够仿真x86架构,但是,这个性能肯定比不上原生的x86


LINK:https://ask.csdn.net/questions/7469962?answer=53684464
SOURCE:CSDN_ASK
ASK_ID:7640923
ANSWER_ID:53684451
TITLE:关于#数据库#的问题:数据库附加
ANSWER:

你这是删除或者移动了数据库文件吧,先按这个提示去执行看看有些啥


LINK:https://ask.csdn.net/questions/7640923?answer=53684451
SOURCE:CSDN_ASK
ASK_ID:7640845
ANSWER_ID:53684376
TITLE:关于数据库分表的作用
ANSWER:

你这都插入数据进去了,咋还说子表不是真正存在?
单独创建一个这样的表,意义在于如果有某些场景只需要子表里的这些数据,比如前端检索条件范围控制,那么查这个子表肯定比查母表要快。
另外,你没有给出完整的子表和母表的结构,查询sql也没列,执行计划也没贴,也没说清楚触发器的完整逻辑,也没说清楚与这两个表相关的所有场景,因此暂时无法对这个做法进行综合性评价。


LINK:https://ask.csdn.net/questions/7640845?answer=53684376
SOURCE:CSDN_ASK
ASK_ID:7640838
ANSWER_ID:53684350
TITLE:使用mysql语句获取表中最大时间的值条件语句应该怎么写
ANSWER:

你这sql是oracle语法,咋问的是mysql??
如果是oracle的话,楼上 @star_zss 已经给出了答案


LINK:https://ask.csdn.net/questions/7640838?answer=53684350
SOURCE:CSDN_ASK
ASK_ID:7640717
ANSWER_ID:53684345
TITLE:行转列,需要公司近三十天的销售量(30列)
ANSWER:

在hive里,可以使用map和collect_list来实现pivot表格的效果


–测试数据
create table test_20220209(company_key int,su int,action_date varchar(8) );
insert into test_20220209 values (1,1,‘20220101’);
insert into test_20220209 values (1,2,‘20220102’);
insert into test_20220209 values (1,3,‘20220103’);
insert into test_20220209 values (1,4,‘20220104’);
insert into test_20220209 values (1,5,‘20220105’);
insert into test_20220209 values (1,6,‘20220106’);
insert into test_20220209 values (1,7,‘20220107’);
insert into test_20220209 values (1,8,‘20220108’);
insert into test_20220209 values (1,9,‘20220109’);
insert into test_20220209 values (1,10,‘20220110’);
insert into test_20220209 values (2,10,‘20220101’);
insert into test_20220209 values (2,9,‘20220102’);
insert into test_20220209 values (2,8,‘20220103’);
insert into test_20220209 values (2,7,‘20220104’);
insert into test_20220209 values (2,6,‘20220105’);
insert into test_20220209 values (2,5,‘20220106’);
insert into test_20220209 values (2,4,‘20220107’);
insert into test_20220209 values (2,3,‘20220108’);
insert into test_20220209 values (2,2,‘20220109’);
insert into test_20220209 values (2,1,‘20220110’);

–查询sql
SELECT
m.company_key,
COLLECT_LIST(g[“20220101”])[0] AS d20220101,
COLLECT_LIST(g[“20220102”])[0] AS d20220102,
COLLECT_LIST(g[“20220103”])[0] AS d20220103,
COLLECT_LIST(g[“20220104”])[0] AS d20220104,
COLLECT_LIST(g[“20220105”])[0] AS d20220105,
COLLECT_LIST(g[“20220106”])[0] AS d20220106,
COLLECT_LIST(g[“20220107”])[0] AS d20220107,
COLLECT_LIST(g[“20220108”])[0] AS d20220108,
COLLECT_LIST(g[“20220109”])[0] AS d20220109,
COLLECT_LIST(g[“20220110”])[0] AS d20220110
FROM
(
SELECT
company_key,
map(action_date,su) AS g
FROM
test_20220209
) m
GROUP BY company_key

测试效果


img


这种写法比case when还是要简洁一点


LINK:https://ask.csdn.net/questions/7640717?answer=53684345
SOURCE:CSDN_ASK
ASK_ID:7640494
ANSWER_ID:53684237
TITLE:oracle 千万级数据group by或distinct如何优化
ANSWER:
select /+parallel (t,8)/ count(distinct guid) from 流水表 t where ActivitySeq =66542;
select /+parallel (t,16)/ count(distinct guid) from 流水表 t where ActivitySeq =66542;

LINK:https://ask.csdn.net/questions/7640494?answer=53684237
SOURCE:CSDN_ASK
ASK_ID:7640420
ANSWER_ID:53683666
TITLE:你好 请问下java.sql.SQLException: 列名无效 这个怎么解决 我的字段和数据库是一样的
ANSWER:

你把你下面写的列名,全部改成大写的试试。
很多人都说oracle数据库大小写不敏感,其实事实反而恰恰相反,
对于对象及列名不加双引号时,无论你输入的是大写还是小写,统统都会在后台自动转换为大写再去执行,因此你如果你建表时字段是不加双引号的小写,这其实是按大写建的,这些字段名在数据字典里都是大写。
如果你建表的时候,这些小写字段被双引号引起来了,那么你sql里去查时也必须使用双引号把字段引起来,因为不引就是自动大写。
同理,用双引号引起来的方式,甚至可以建大小写混用的字段或者对象名


LINK:https://ask.csdn.net/questions/7640420?answer=53683666
SOURCE:CSDN_ASK
ASK_ID:7640411
ANSWER_ID:53683650
TITLE:php以表格表格形式输出数据表中的内容,其中一个字段是blob图片。echo输出图片的部分变成满屏的乱码,该怎么办
ANSWER:

这是直接把二进制数据流当成文本打开了吧,要定义一下流的格式为图片


LINK:https://ask.csdn.net/questions/7640411?answer=53683650
SOURCE:CSDN_ASK
ASK_ID:7640270
ANSWER_ID:53683314
TITLE:ORACLE SQL表数据丢失
ANSWER:

有列名说明sql正常执行了,没有数据那就是真的没有数据。
从你这个表名上来看,像是一个视图,建议查看下这个视图的代码,再看下视图里的各个表是不是都有数据,以及关联条件关联后是否还有数据,另外再看看视图的sql里有没有什么限制条件,没准是有人改了这个视图不让你查数据了


LINK:https://ask.csdn.net/questions/7640270?answer=53683314
SOURCE:CSDN_ASK
ASK_ID:7640237
ANSWER_ID:53683309
TITLE:MYSQL出现菱形问号乱码
ANSWER:

再看下代码文件本身的文本编码是ansi还是utf8,包括前端和后端


LINK:https://ask.csdn.net/questions/7640237?answer=53683309
SOURCE:CSDN_ASK
ASK_ID:7640084
ANSWER_ID:53683303
TITLE:有个Oracle 问题 这怎么调用能输出两张表
ANSWER:

你具体是想做什么?
你这只是打开了两个游标而已,并没有进行其他操作。
oracle的procedure和mysql不一样,不会有任何像select语句一样的表格显示输出,就只是相当于执行了一段程序,以及获得输出参数,你执行的这段,仅仅只是把这两个游标赋值给了table_out 和table_outnn ,如果后面不执行任何代码的话,这段就没有任何意义。
如果你在获取游标后,想看到游标里面的东西,那就得对游标进行循环,对每行的每个字段进行dbms_output.put_line


LINK:https://ask.csdn.net/questions/7640084?answer=53683303
SOURCE:CSDN_ASK
ASK_ID:7640128
ANSWER_ID:53683289
TITLE:navicat导入csv数据
ANSWER:

这肯定是因为你csv里有多的空行呀,不信你用记事本把csv文件打开看看,注意把自动换行关了


LINK:https://ask.csdn.net/questions/7640128?answer=53683289
SOURCE:CSDN_ASK
ASK_ID:7640136
ANSWER_ID:53683287
TITLE:mysql和oracle学哪个?
ANSWER:

如果在全球范围内,按使用体量的总和来看,oracle甩mysql好远,你看上去mysql多,那只是坐井观天,是由于你所处环境的局限性而产生的错觉。
在关系型数据库里,oracle一直都是标杆,其他数据库或多或少都是在学习oracle数据库来进行改进,比如mysql8.0就参考oracle做了不少内核上的改进,还有其他各大数据库都把能无缝移植oracle应用当成亮点。把oracle学好了,再去看其他数据库,你就会有站在山顶看山腰的感觉,一切尽收眼底,这种感觉不是那些只会对数据库进行增删改查的普通开发人员能理解的。
学oracle的主要目的,不一定是去用它,而是因为它包罗万象,要把其设计理念带到其他开发项目中去。目前国内严重缺少数据库方面的人才,在当前信创环境下,只培养简单的数据库增删改查使用人员是远远不够的。


LINK:https://ask.csdn.net/questions/7640136?answer=53683287
SOURCE:CSDN_ASK
ASK_ID:7640236
ANSWER_ID:53683254
TITLE:pymssql控制SQL进行中文查询
ANSWER:

大概率是字符集的问题,请确认文件编码及字符集的一致性。
另外,尝试把cp936换成cp65001,前面的是ansi(GBK),后面的是utf8


LINK:https://ask.csdn.net/questions/7640236?answer=53683254
SOURCE:CSDN_ASK
ASK_ID:7639949
ANSWER_ID:53682559
TITLE:就是像某宝的一样的购物车。
ANSWER:

如果用户不访问购物车的话,购物车里的数据不会动,这是为了节省后台服务的开销;
然后当用户访问购物车页面的时候,执行一次重新算价,不仅仅是根据商品查原价,如果有什么优惠之类的,全部都要重新计算,哪怕价格不变,优惠策略也是会变的,还有可能有的商品已经下架了,在购物车里要灰掉,这些都是在用户访问购物车页面的时候执行的;
再就是购物车提交结算的时候,再进行一次算价,以确保结算价符合此时此刻的规则。
不要想着随时都去刷新用户的购物车,触发点太多了,系统会崩了去的


LINK:https://ask.csdn.net/questions/7639949?answer=53682559
SOURCE:CSDN_ASK
ASK_ID:7639798
ANSWER_ID:53682219
TITLE:在oracle中查询kettle使用的表名
ANSWER:

如果表名有特征,比如都包含某几个字符,那么可以使用类似下面的sql来查询所有与之有关的表名或job


select * from dba_tables h where h.table_name like ‘%大写特征字符%’;
select * from dba_jobs h where upper(h.what) like ‘%大写特征字符%’;
select * from dba_scheduler_jobs where job_name like ‘%大写特征字符%’ or PROGRAM_NAME like ‘%大写特征字符%’ or upper(JOB_ACTION) like ‘%大写特征字符%’

LINK:https://ask.csdn.net/questions/7639798?answer=53682219
SOURCE:CSDN_ASK
ASK_ID:7639760
ANSWER_ID:53682073
TITLE:有的教程把数据库安装在乌班图上面是为了不占电脑内存么?
ANSWER:

不管安装在哪,都会占磁盘空间,跑起来也都会占内存。乌班图和Windows同样都是操作系统,根据你的描述来看,你说的乌班图应该是Windows下的虚拟机里的操作系统,相当于是电脑里面又虚拟了一台电脑。乌班图是linux的发行版之一,实际上目前生产环境服务器大多都是用的linux,使用linux搭建环境更贴合实际。另外,环境搭虚拟机里想删就直接删,不会对你本地的系统造成任何影响;环境搭本地,想卸载都不一定能卸干净


LINK:https://ask.csdn.net/questions/7639760?answer=53682073
SOURCE:CSDN_ASK
ASK_ID:7639337
ANSWER_ID:53681463
TITLE:Python初学者的问题
ANSWER:

你这是在学习,他当然要教你各种各样的语法,这个例子只是在教你可以在函数里可以掉用自己,来实现迭代的效果。如果是有复杂的逻辑,你自然会发现这种写法的好处,现阶段建议先把语法吃透


LINK:https://ask.csdn.net/questions/7639337?answer=53681463
SOURCE:CSDN_ASK
ASK_ID:7639419
ANSWER_ID:53681446
TITLE:vmware 虚拟机安装
ANSWER:

你这几张图都不影响安装呀,只是一个打印机无法连接而已,如果不想要弹这个提示,虚拟机设置里把打印机关掉就是了。
而且你这没必要用什么装机大师呀,直接用官方镜像装不就好了?你这第三张图是让你手动选择系统镜像,这不多此一举么


LINK:https://ask.csdn.net/questions/7639419?answer=53681446
SOURCE:CSDN_ASK
ASK_ID:7639277
ANSWER_ID:53681169
TITLE:virtualbox在Mac m1中安装说找不到硬件架构怎么解决啊?
ANSWER:

没法解决,virtualbox本就不支持arm架构,而且也没有计划去支持,
virtualbox官网关于里说得很清楚了,只针对x86架构


img


而且苹果官方论坛上也有回复


img


所以,建议使用其他虚拟机,比如Parallels Desktop


LINK:https://ask.csdn.net/questions/7639277?answer=53681169
SOURCE:CSDN_ASK
ASK_ID:7639234
ANSWER_ID:53681164
TITLE:搜索引擎–为什么要分词
ANSWER:

用完整语句去搜索,很可能会什么都搜不到,因为搜索这个动作是用的绝对匹配,必须保证两个字符串完全相等才算匹配,比如你搜一句话
"今天晚上吃什么?",但是字典里是"今天晚餐吃什么?" ,这样就搜不到了。你需要为了这一个字的不一样,创建一个新的词条。自然语言不是那么标准的东西,经常多一个字少一字或者换一个字,其实都可能是完全相同的意思,你永远都不可能把所有的完整语句收录起来,而且这个收录也是个巨大的存储量,检索效率也低
但是,如果对其进行分词,


  1. 今天=今天
  2. 吃 =吃
  3. 什么=什么

这样就能以很少的存储及较快的效率,来识别到较为准确的匹配,当然,这个肯定算不上精准,所以,就有了自然语义AI的诞生,更高阶的神经网络机器学习,能把模型训练得接近人类思维,这样匹配就更精准了,但不过每个人都会有自己的个性,AI也如此,在训练的时候还得植入性格,这往往会给人们带来不愿意看到的答案。
所以,目前还无法实现想象中的完整自然语言搜索的绝对匹配,期待做搜索的朋友未来在这个方面有所突破


LINK:https://ask.csdn.net/questions/7639234?answer=53681164
SOURCE:CSDN_ASK
ASK_ID:7639129
ANSWER_ID:53681087
TITLE:python在txt文件中寻找相应字符串
ANSWER:

用正则表达式匹配字符串


“^[a-z].(?=.{7,7})(?=.\d.\d)(?=.[A-Z].[A-Z])(?=.[a-z])(?=.[!@#%^&amp;*?\(\)].*<span class="hljs-selector-attr">[!&#64;#%^&?()]).*$”

img


LINK:https://ask.csdn.net/questions/7639129?answer=53681087
SOURCE:CSDN_ASK
ASK_ID:7639116
ANSWER_ID:53680868
TITLE:MySQL的 如何使用
ANSWER:

把报错展开看看


LINK:https://ask.csdn.net/questions/7639116?answer=53680868
SOURCE:CSDN_ASK
ASK_ID:7639047
ANSWER_ID:53680687
TITLE:如何使用域名访问局域网网站(标签-服务器)
ANSWER:

只有一台设备需要访问的话,最简单的就是在这台设备上配置host文件,将指定域名指向你要求的ip,比如windows的hosts文件路径为”C:\Windows\System32\drivers\etc\hosts,打开后在最下面添加一行


192.168.1.2 www.baidu.com

保存,这样,当你访问www.baidu.com时就会自动解析成192.168.1.2进行访问


如果是局域网内多台设备都要访问这个域名,那么就要在路由器里设置了,不同品牌的路由器设置方式不一样


LINK:https://ask.csdn.net/questions/7639047?answer=53680687
SOURCE:CSDN_ASK
ASK_ID:7638982
ANSWER_ID:53680682
TITLE:word xml格式的文件如何存入MySQL数据库
ANSWER:

XML格式没有规定行列,一般是不能自动解析成表格,把每个值对应到数据库字段的值里去的。
从你的问题里看不出你的目的,如果只是存xml的数据,你完全可以把整个文件内容以大文本或者以二进制数据存入某一行的某一列中去。
如果你是要解析xml里的数据,格式化成表格,就老老实实自己写字段映射和解析代码,用php或者sql都可以解析xml数据


LINK:https://ask.csdn.net/questions/7638982?answer=53680682
SOURCE:CSDN_ASK
ASK_ID:7638945
ANSWER_ID:53680467
TITLE:在数据库的select里面遇到了一个常见的问题
ANSWER:

你第一个查询sql用了子查询,从这一段"group by app_id_c) APP LEFT JOIN client_t C“,可以看出,”APP“已经不是指的你数据库里的”APP“表了,而是指的你前面这个子查询,而这个子查询里,没有select ”done_status_c“这个字段,当然会报这个字段不存在了


LINK:https://ask.csdn.net/questions/7638945?answer=53680467
SOURCE:CSDN_ASK
ASK_ID:7638742
ANSWER_ID:53680172
TITLE:Python pandas读取excel文件时异常报错(某一worksheet有图片)
ANSWER:

那个不是图片,excel里的sheet分很多种,有的放数据,有的放图表,不同类型的sheet对象支持不同的方法,
pd.read_excel会读取excel内的所有数据到内存,但对于chartsheet(即图表sheet)来说,这个sheet里面没有表格数据,因此此类sheet也不支持"reset_dimensions"这个方法,直接去读当然会报错。
如果只是要读取sheet的名称的话,就不要用这个方法了,如果是要读取数据,建议指定sheet读取


LINK:https://ask.csdn.net/questions/7638742?answer=53680172
SOURCE:CSDN_ASK
ASK_ID:7638729
ANSWER_ID:53680158
TITLE:windows sever2019如何搭建网盘
ANSWER:

用nextcloud吧,有windows版本的,支持多账号管理,有网站页面,支持文件版本管理,支持webdav协议,还支持手机、pc文件自动同步至网盘(需对应设备安装客户端)


LINK:https://ask.csdn.net/questions/7638729?answer=53680158
SOURCE:CSDN_ASK
ASK_ID:7638753
ANSWER_ID:53680155
TITLE:问一下这是什么加密方式,很长的一段
ANSWER:

看上去像是base64编码,至于有没有加密就不确定了


LINK:https://ask.csdn.net/questions/7638753?answer=53680155
SOURCE:CSDN_ASK
ASK_ID:7638646
ANSWER_ID:53680046
TITLE:优化代码批量查询得到结果,请专家答疑解惑
ANSWER:
 with tt as (
select mid,val,id,colname,seq,qty,‘N’ +CAST(ROW_NUMBER() OVER (PARTITION BY ID ORDER BY val) AS VARCHAR(2)) AS RID from (
select distinct MID,VAL,ID,ColName,seq,QTY,count(1) over(partition by id,QTY) AS RPNR from #tt3
) as t where RPNR>1)
select * from tt PIVOT ( MAX(QTY)
FOR RID IN (n1, n2, n3, n4, n5, n6, n7, n8, n9, n10, n11, n12)) p;

img


LINK:https://ask.csdn.net/questions/7638646?answer=53680046
SOURCE:CSDN_ASK
ASK_ID:7638680
ANSWER_ID:53680038
TITLE:如果数据库中没有某天的订单信息,则用python插入数据,否则不插入。请教该怎么写code
ANSWER:

你确定是按日期插入?有没有可能某天的订单拆成两次给了?
更合理的方式不是应该按订单号么?
以你获取到的订单数据中的订单号作为游标循环,去查数据库里是否存在该订单号,如果存在则不处理,如果不存在则插入


LINK:https://ask.csdn.net/questions/7638680?answer=53680038
SOURCE:CSDN_ASK
ASK_ID:7638338
ANSWER_ID:53679439
TITLE:docker top 命令执行结果第4列 C代表什么意思
ANSWER:

和linux命令的top里显示的cpu是一个含义


LINK:https://ask.csdn.net/questions/7638338?answer=53679439
SOURCE:CSDN_ASK
ASK_ID:7637883
ANSWER_ID:53678848
TITLE:关于从字符串集合中提取数据并且转置sql
ANSWER:

重复问题


LINK:https://ask.csdn.net/questions/7637883?answer=53678848
SOURCE:CSDN_ASK
ASK_ID:7637882
ANSWER_ID:53678847
TITLE:关于数据从集合中提取转置
ANSWER:

你这个组成明显真长这样?确定不是这样?


 {“可乐杯22oz”:“1”,“可口可乐糖浆”:“100”}

如果是json的话,可以直接用json相关的函数进行解析,如果是你题目里这种格式,就只能先转成json再读了。
而且你这组成明细是不是只有这两种?如果明细是不确定的,那就不能一步到位了,因为一个查询sql必须有确定的列数,先假定只有这两种吧


with t as (
select name, replace(replace(replace(replace(memo,‘{’,‘{"’),‘}’,‘"}’),‘:’,‘“:”’),‘;’,‘“,”’) memo from TEST_JSON)
select name ,
cast(JSON_EXTRACT(memo,.可乐杯22oz&#39;</span>) <span class="hljs-keyword">as</span> <span class="hljs-type">DECIMAL</span>) 可乐杯<span class="hljs-number">22</span>oz,<br/>cast(JSON_EXTRACT(memo,<span class="hljs-string">&#39;.可口可乐糖浆’) as DECIMAL) 可口可乐糖浆
from t

img


LINK:https://ask.csdn.net/questions/7637882?answer=53678847
SOURCE:CSDN_ASK
ASK_ID:7637817
ANSWER_ID:53678625
TITLE:SQL Server中A列对应2个或2个以上的B列值,根据C列值的大小,取最大值对应的B列值更新到D列
ANSWER:

先用开窗函数,按始发城市分组,取出货量最大的一行,得到对应的目的城市,然后用始发城市关联到原表上即可


select b.始发城市,b.目的城市,b.货量,a.目的城市 as 目的城市_修正 from 
(select 始发城市,目的城市 from
(select 始发城市,目的城市,row_number()over(partition by 始发城市 order by 货量 desc) rn from 原表 ) as a
where a.rn=1) as a1,原表 b
where a1.始发城市=b.始发城市

LINK:https://ask.csdn.net/questions/7637817?answer=53678625
SOURCE:CSDN_ASK
ASK_ID:7637627
ANSWER_ID:53678370
TITLE:处理时间线问题,将拿出时间与放回时间最匹配
ANSWER:

你这上一题还没采纳,改了个表结构又来问了?


 select mac_id,clip_id,
min(case when action_status=0 then action_time end) action_time1,
min(case when action_status=1 then action_time end) action_time2
from (
SELECT t1.*,cast((ROW_NUMBER() OVER(order by mac_id,clip_id,action_time))/2 as int) g FROM test_sql t1
) t2
group by mac_id,clip_id,g;

img


LINK:https://ask.csdn.net/questions/7637627?answer=53678370
SOURCE:CSDN_ASK
ASK_ID:7637654
ANSWER_ID:53678356
TITLE:Mysql三个表怎么全局查询一个字段
ANSWER:

麻烦把你的表结构、最终需要的格式、以及逻辑关系描述清楚


LINK:https://ask.csdn.net/questions/7637654?answer=53678356
SOURCE:CSDN_ASK
ASK_ID:7637376
ANSWER_ID:53678073
TITLE:这是什么情况,win7开机就这样了,四个进入选项(安全模式)一类的都是这样
ANSWER:

这个大概率可能是硬盘有损坏,当然还有可能是启动配置文件损坏
建议先进PE看下,如果扫描发现磁盘有损坏,而且磁盘里还有重要文件的话,马上备份重要文件。
如果发现磁盘都没问题,那就直接修复下引导


参考文章


https://jingyan.baidu.com/article/f0e83a25717e1922e4910151.html




LINK:https://ask.csdn.net/questions/7637376?answer=53678073
SOURCE:CSDN_ASK
ASK_ID:7637480
ANSWER_ID:53678063
TITLE:在Edge和chrome访问CSDN的时候提示说安全性配置已过期,但是用360安全浏览器或者微信的浏览器却没有这样的问题,然后我在CSDN里写文章也上传不了图片
ANSWER:

img


我用edge访问没问题,可能是CSDN的某个CDN节点有问题吧,刷新下DNS再试,没准就能分配到正确的节点了


LINK:https://ask.csdn.net/questions/7637480?answer=53678063
SOURCE:CSDN_ASK
ASK_ID:7637384
ANSWER_ID:53677968
TITLE:rang和rows的区别
ANSWER:

range不是指的数据记录的范围,而是字段值的范围。
而且你这个截图的语法不对吧,这种移动窗口是必须要有order by 的,否则会报错


img


加上order by 后的输出结果是这样的


img


注意结果中id为4、num1为-3的行,由于等于“current row”的值有两行,因此求和的结果为-6


另外,你既然只是取当前行,何必写个开窗函数呢?如果你是想统计多行,用 “between 1 preceding and current row”这样的写法,也要注意rows和range的区别,当用rows时,"1 preceding"表示往前一行,当用range时,“1 preceding”表示当前值减1的结果对应的所有行。我这篇文章中对此有个举例说明


LINK:https://ask.csdn.net/questions/7637384?answer=53677968
SOURCE:CSDN_ASK
ASK_ID:7637347
ANSWER_ID:53677880
TITLE:having 能调用selectz中的别名吗
ANSWER:

窗口函数只能存在于查询的字段中,不能作为数据过滤条件。
因为窗口函数是基于已经确认的查询结果条目作为窗口,再进行的统计,如果你通过where或者having 来改变输出结果的记录数,那窗口范围就变了。
因此,如果想用窗口函数计算得出的值作为条件,只能把这个sql作为子查询,外面再套一层,这个时候你就可以用where来过滤数据了


LINK:https://ask.csdn.net/questions/7637347?answer=53677880
SOURCE:CSDN_ASK
ASK_ID:7637175
ANSWER_ID:53677786
TITLE:如何获取运单表中每类货物的最新5条运单
ANSWER:

把 create table 命令发一下,另外说明一下使用的数据库版本


LINK:https://ask.csdn.net/questions/7637175?answer=53677786
SOURCE:CSDN_ASK
ASK_ID:7637296
ANSWER_ID:53677758
TITLE:SQL View 如何引用存储过程内容
ANSWER:

你这个其实就是一个拼接sql字符串,并执行的过程,“@sql”这个变量里就是放的要执行的sql,因此,如果要创建视图,只需要在这个sql前面再拼上一段" create view 视图名称 as "就好了,比如


set @sql=‘create view test_view1 as select month1 as ‘’’ +  @m1  +‘’’ ,month2 as ‘’‘ +  @m2  +’‘’ ,month3 as ‘’‘ +  @m3  +’‘’  [T - cast]'

LINK:https://ask.csdn.net/questions/7637296?answer=53677758
SOURCE:CSDN_ASK
ASK_ID:7637215
ANSWER_ID:53677749
TITLE:You have an error in your SQL syntax;
ANSWER:

两个问题,


  1. 最后一个字段后面不要接逗号
  2. 单引号包裹的是字符串,不能作为名称

修改成下面这个样子后,创建成功,注意那玩意不是单引号,是你键盘左上角数字1左边的那个点


CREATE TABLE abc
(`id` INT ,
`name` VARCHAR(30),
`password` VARCHAR(30),
`nickname` VARCHAR(30));

img


LINK:https://ask.csdn.net/questions/7637215?answer=53677749
SOURCE:CSDN_ASK
ASK_ID:7637224
ANSWER_ID:53677744
TITLE:vb.net 无法insert数据进去
ANSWER:

你说无法insert数据进去,请问具体是报什么错?
还有你这个表,不是应该用这两个字段做联合主键么?你难道是建的两个单独的主键?那不同订单里出现了相同的商品岂不是会报错?


LINK:https://ask.csdn.net/questions/7637224?answer=53677744
SOURCE:CSDN_ASK
ASK_ID:7637282
ANSWER_ID:53677738
TITLE:Mysql怎么将将分组聚合的查询结果写入另一个表
ANSWER:

通用方法一般是用case when 来处理行列转换的问题


select time,
sum(case when fruit=‘apple’ then number else 0 end ) apple,
sum(case when fruit=‘pear’ then number else 0 end ) pear,
sum(case when fruit=‘peach’ then number else 0 end ) peach,
sum(case when fruit=‘orange’ then number else 0 end ) orange,
sum(number) total
from
group by time

可惜mysql不支持pivot,否则也不用写得这么麻烦


LINK:https://ask.csdn.net/questions/7637282?answer=53677738
SOURCE:CSDN_ASK
ASK_ID:7637008
ANSWER_ID:53677275
TITLE:夹子拿出与放入都会记录一条数据,现在将数据进行合并
ANSWER:

这里主要的问题是需要一个序号,以便能每2行一组进行合并,如果是mysql8.0版本,则可以用下面的方式


—测试数据
create table test_clip_tmp0
(device_mac varchar(30),
clip_id varchar(50),
action_status tinyint,
storage_datetime datetime,
take_datetime datetime);
insert into test_clip_tmp0 values(‘A’,‘A1’,1,‘2022-01-27 10:00:00’,null);
insert into test_clip_tmp0 values(‘A’,‘A1’,0,null,‘2022-01-27 10:00:03’);
insert into test_clip_tmp0 values(‘A’,‘A2’,1,‘2022-01-27 15:00:00’,null);
insert into test_clip_tmp0 values(‘A’,‘A2’,0,null,‘2022-01-27 15:00:03’);
insert into test_clip_tmp0 values(‘B’,‘A1’,1,‘2022-01-27 10:00:01’,null);
insert into test_clip_tmp0 values(‘B’,‘A1’,0,null,‘2022-01-27 10:00:02’);

–查询sql
select device_mac,clip_id,g,max(storage_datetime) storage_datetime,max(take_datetime) take_datetime from (
SELECT T.*,cast((ROW_NUMBER() OVER(order by device_mac,clip_id,IFNULL(storage_datetime,take_datetime)))/2 as int) g
FROM test_clip_tmp0 T ORDER BY device_mac,clip_id,IFNULL(storage_datetime,take_datetime)) as tt
group by device_mac,clip_id,g

img


两个时间都在一行上了,你就可以去进行计算了


LINK:https://ask.csdn.net/questions/7637008?answer=53677275
SOURCE:CSDN_ASK
ASK_ID:7636981
ANSWER_ID:53677228
TITLE:csv文本按照特定格式转换成txt文本
ANSWER:

你把命令改成这样试试


cat test_id.csv | awk -F ‘,’ ‘{ printf $1 " (“ $2 ” txid:“ $3 ”; run:“ $4 ”)" }’

可能由于你原文本是DOS的,有回车加换行,awk只按换行识别行,结果就把回车给留下了,所以其实你也可以先把这个文本转成UNIX的再处理


LINK:https://ask.csdn.net/questions/7636981?answer=53677228
SOURCE:CSDN_ASK
ASK_ID:7636989
ANSWER_ID:53677225
TITLE:python爬虫遇到的编码问题
ANSWER:

从你的第一段内容是不可能解析出第3段的内容的.
在第一段里,只有一个双引号,很明显这个就不是个完整的json结构,并且里面还夹杂着“$75YT”这样不需要进行转换的字符,因此你很有可能是被防爬了


LINK:https://ask.csdn.net/questions/7636989?answer=53677225
SOURCE:CSDN_ASK
ASK_ID:7636990
ANSWER_ID:53677207
TITLE:请问现在win11操作系统值得升级吗?(操作系统-windows)
ANSWER:

做任何事都是要有目的的,想好你升级是为了什么?目前win10并未放弃支持,一直还在提供补丁更新。
如果你是必须要用win11中新加的功能,比如wslg,那就去升,如果没有必要用的功能,那升级就没有什么意义了


LINK:https://ask.csdn.net/questions/7636990?answer=53677207
SOURCE:CSDN_ASK
ASK_ID:7636964
ANSWER_ID:53677187
TITLE:关于#mysql#的问题:需将表2的字段C在表1字段A进行模糊匹配,并将匹配出结果的数据在表1新字段B返回表2字段D的结果
ANSWER:

举几行数据的例子看看,模糊匹配肯定是like,但是如果数据是有规则的,那么会有更高效的处理方式,
另外,是否存在模糊匹配能匹配到多条记录的情况,此时你希望如何展现数据?


LINK:https://ask.csdn.net/questions/7636964?answer=53677187
SOURCE:CSDN_ASK
ASK_ID:7636758
ANSWER_ID:53677182
TITLE:oracle老是忘记commit,有没有timeout呀
ANSWER:

建议规范开发代码,老老实实承认错误并改正错误,多写写就熟练了


LINK:https://ask.csdn.net/questions/7636758?answer=53677182
SOURCE:CSDN_ASK
ASK_ID:7636789
ANSWER_ID:53677180
TITLE:hive中row_number() 中partition过多会导致报错么
ANSWER:

OOM是个综合性的问题。就算OOM也不会是由于你这个x单方面的影响,数据量、sql复杂度等都对此有影响,甚至这个与你硬件的配置、数据库的参数都有关系


LINK:https://ask.csdn.net/questions/7636789?answer=53677180
SOURCE:CSDN_ASK
ASK_ID:7636821
ANSWER_ID:53677173
TITLE:sql的cast转换遇到null怎么办
ANSWER:

用concat_ws函数


concat_ws(‘’,‘A’,‘B’,‘C’)

第一个参数是分隔符,直接传空字符串,后面几个参数就算有部分参数为空,结果也不会为空
参考


LINK:https://ask.csdn.net/questions/7636821?answer=53677173
SOURCE:CSDN_ASK
ASK_ID:7636913
ANSWER_ID:53677163
TITLE:mysql存储过程在循环里写用字符串拼接的sql语句
ANSWER:

你拼的这段sql少了空格,导致关键词都连到一起去了,所以提示语法错误


INSERT INTO’,table_name,'SELECT 

建议在执行动态sql前,先打印出你拼接好的sql字符串,确认无误后再加上执行此动态sql的命令


LINK:https://ask.csdn.net/questions/7636913?answer=53677163
SOURCE:CSDN_ASK
ASK_ID:7636581
ANSWER_ID:53676517
TITLE:oracle null相关问题
ANSWER:

你把那个b字段,用lengthb函数看一下字节长度为多少,是不是真的为空,可能只是你看不到而已,并不代表它就是null


select t1.a, lengthb(t1.b), sum(t1.c),count(1)
from (select t.a, t.b, t.c from t where t.b is not null) t1
group by t1.a, t1.b

我这篇文章中有类似的介绍


LINK:https://ask.csdn.net/questions/7636581?answer=53676517
SOURCE:CSDN_ASK
ASK_ID:7636516
ANSWER_ID:53676378
TITLE:Oracle数据库,表里现在有七百万数据,现在再插入一万都插不进去是什么原因?
ANSWER:

查看下会话的等待事件是什么,如果存在锁表,就先解锁


LINK:https://ask.csdn.net/questions/7636516?answer=53676378
SOURCE:CSDN_ASK
ASK_ID:7636493
ANSWER_ID:53676326
TITLE:之前写的一个python去直接写入MySQL的代码,之前用着还好好的,现在就不行了,这是哪出问题了?
ANSWER:

兄弟,你说不行,至少要说个咋的不行嘛,比如报什么错之类的


LINK:https://ask.csdn.net/questions/7636493?answer=53676326
SOURCE:CSDN_ASK
ASK_ID:7636453
ANSWER_ID:53676301
TITLE:19年数据默认为0但是表里只有20年跟21年数据
ANSWER:

如果是oracle可以用递归来构造一个完整的时间列;


select to_char(add_months(date ‘2019-01-01’, level - 1), ‘yyyy-mm’) month
from dual
connect by rownum <= 36

img


或者


with cte(d) as
(select date ‘2019-01-01’ d
from dual
union all
select add_months(d, 1)
from cte
where add_months(d, 1) <= date ‘2021-12-31’)
select * from cte

img


如果是mysql8.0以下,要么建个表存所有的时间,要么用union all把所有时间做成一个子查询


select ‘2019-01’ as m
union all
select ‘2019-02’
union all
select ‘2019-03’
…(下略)

如果是mysql8.0以上,也可以使用递归来构造



with RECURSIVE cte as
(select ‘2019-01-01’ d
union all
select DATE_ADD(d, INTERVAL 1 MONTH)
from cte
where DATE_ADD(d, INTERVAL 1 MONTH) <= date ‘2021-12-31’)
select DATE_FORMAT(d,‘%Y-%m’) m from cte

img


LINK:https://ask.csdn.net/questions/7636453?answer=53676301
SOURCE:CSDN_ASK
ASK_ID:7636461
ANSWER_ID:53676277
TITLE:oracle正则表达式 清洗字符串,只留下数字
ANSWER:
select REGEXP_REPLACE(‘agj链接ug34kh79yug’,‘[^0-9]’) from dual

img


LINK:https://ask.csdn.net/questions/7636461?answer=53676277
SOURCE:CSDN_ASK
ASK_ID:7636364
ANSWER_ID:53676048
TITLE:成绩与总分数据对不上
ANSWER:

永远不要写出 "select *,sum() from"这个样子的sql!
sql中如果使用了聚合函数,那么查询的非聚合字段,都要放在group by 后面,以确保每个组都只会有唯一的一行,像这样
“select a ,b,sum© from t group by a,b”
老版本的mysql默认没做这个严格限制,是不符合sql标准的,查出来记录是随机的,这就是个错误的数据,其他数据库要按你这么查都会报错的。
看你这个sql,应该是想查每个人总分最高的时候,各科的分数分别是多少吧。
在mysql8.0以上,可以使用开窗函数


select * from (select *,row_number()over(partition by 姓名 order by 科目1分数+科目2分数+科目3分数 desc) rn ) t where t.rn=1;

如果是老版本的话,则只能先算出每人的最高分,再根据姓名和最高分两个条件去匹配原表中的数据,当然,如果出现最高分同分的情况,你还得再给个规则取某一条


LINK:https://ask.csdn.net/questions/7636364?answer=53676048
SOURCE:CSDN_ASK
ASK_ID:7635918
ANSWER_ID:53675593
TITLE:有無讓網誌寫的文章,在搜尋引擎(seo)前三頁的CSS呢?
ANSWER:

按重点关键词写SEO信息。
目前的确有些网站把一些高频关键词强行植入了页面里,但实际上页面里显示的内容与这些关键词毫不相关,让人恶心,所以不推荐这种方式。
想要搜索引擎能靠前,把你网站提交到对应搜索引擎的网站管理平台,并做好website的采集,并且把统计做进去。当然最重要的就是,把网站的内容给整好,只要有人访问,慢慢网站就会越来越靠前,就像我的网站一样


img


LINK:https://ask.csdn.net/questions/7635918?answer=53675593
SOURCE:CSDN_ASK
ASK_ID:7635994
ANSWER_ID:53675582
TITLE:bin文件转成图片格式
ANSWER:

你发一个.bin文件过来看看,我分析下它实际是什么文件,“bin”不过是个后缀而已,不具有任何含义。
或者你也可以自行去了解下怎么根据一个文件的二进制数据去识别它真正的格式。
知道这个文件真正的格式后,你就可以直接把文件名的后缀改成这个格式对应的后缀了。
这个时候再看还是否需要对格式进行转换


LINK:https://ask.csdn.net/questions/7635994?answer=53675582
SOURCE:CSDN_ASK
ASK_ID:7636070
ANSWER_ID:53675572
TITLE:MySql统计库下面所有表的数据量
ANSWER:

这个表的里的数据是静态的,不是实时的,需要执行统计信息收集后才会刷新。
统计所有表的行数所消耗的时间太长了,如果不要求精确统计,可以查你发的这个表用来快速获取相关统计信息


LINK:https://ask.csdn.net/questions/7636070?answer=53675572
SOURCE:CSDN_ASK
ASK_ID:7636045
ANSWER_ID:53675553
TITLE:java中登录界面改mysql数据
ANSWER:

如果你想自行管理id这个字段的值,那么在建表的时候,不要把这个字段设为自增,就让它是个普通字段,这样你想怎么处理就怎么处理;
至于不重复的序号,你可以再建一个sequence来获取


LINK:https://ask.csdn.net/questions/7636045?answer=53675553
SOURCE:CSDN_ASK
ASK_ID:7636072
ANSWER_ID:53675552
TITLE:Sql优化日期范围查询
ANSWER:

你查询条件怎么写的?不会是把这个字段给to_date再去查的吧?
首先,如果这张表很大,则建议对这张表按日期进行分区,比如按月分区或者按周分区(视查询场景而定)
然后查询条件应该写成


where 字段 between ‘20210101’ and ‘20210131

或者


where 字段 between to_char(:1,‘yyyymmdd’) and to_char(:2,‘yyyymmdd’) 

注意,既然查询的字段是个字符串,那么查询条件的另一边也要是字符串,不能是数字类型


当然,楼上说的建函数索引也是一种方式,但是,一个日期里的数据太多的话,一般还是建议使用分区,而非索引


LINK:https://ask.csdn.net/questions/7636072?answer=53675552
SOURCE:CSDN_ASK
ASK_ID:7636019
ANSWER_ID:53675474
TITLE:idea database 解析不了oracle 的blob 文本?
ANSWER:

BLOB是二进制数据,要转换成CLOB类型才能显示文本信息
在12c以上版本,可以使用TO_CLOB函数将blob转换成clob,但要指定字符集及解析类型,参考官方文档



Example
The following hypothetical example returns the CLOB of a BFILE column value docu in table media_tab, which uses the character set with ID 873. It sets the MIME type to text/xml for the resulting CLOB.



SELECT TO_CLOB(docu, 873, ‘text/xml’) FROM media_tab;

如果是11g及以前的版本,只能自建函数进行转换了


create or replace function blob2clob(b       blob,
charset varchar2 default ‘UTF8’)
return clob as
v_dest_offset integer := 1;
v_src_offset integer := 1;
v_lang_context integer := 0;
v_warning integer := 0;
c clob;
begin
dbms_lob.createtemporary(c, false, dbms_lob.call);
dbms_lob.converttoclob(dest_lob => c,
src_blob => b,
amount => dbms_lob.LOBMAXSIZE,
dest_offset => v_dest_offset,
src_offset => v_src_offset,
blob_csid => nls_charset_id(charset),
lang_context => v_lang_context,
warning => v_warning);
return c;
end;
/

select blob2clob(a) from blob_test;

LINK:https://ask.csdn.net/questions/7636019?answer=53675474
SOURCE:CSDN_ASK
ASK_ID:7636046
ANSWER_ID:53675465
TITLE:oracle日期位数转换问题
ANSWER:
select to_char(to_date(‘2020/1/1’,‘yyyy/mm/dd’),‘yyyy/mm/dd’) from dual

img


LINK:https://ask.csdn.net/questions/7636046?answer=53675465
SOURCE:CSDN_ASK
ASK_ID:7636000
ANSWER_ID:53675363
TITLE:oracle 12c 服务器 sql语句执行结束 但是 sql 会话一直存在
ANSWER:

你这个问题第6点就已经错了,对于第4点



会话超过30分钟业务代码提示连接超时断开连接



这个只是你应用认为超时了,主动结束连接,而且并没有把结束指令发给数据库,数据库当然还是在执行这个sql


LINK:https://ask.csdn.net/questions/7636000?answer=53675363
SOURCE:CSDN_ASK
ASK_ID:7635980
ANSWER_ID:53675357
TITLE:分组统计相同项目不同范围统计
ANSWER:

两个项目分别统计作为两个子查询,然后再用项目关联两个子查询.
由于你标签打了两个数据库的类型,我不确定你用的是哪个数据库,以oracle数据库为例


select 
nvl(a.item_code,b.item_code) item_code,
nvl(input,0) input,
nvl(output,0) output
from
(select t1.item_code,count(t1.item_code) output from t1 group by t1.item_code) a
full join
(select t2.item_code,count(t2.item_code) input from t2 group by t2.item_code) b
on a.item_code=b.item_code

这里要注意的是,可能会存在T1有但T2没有或者T2有但TI没有的项目,因此需要使用FULL JOIN ,否则你还需要另一个记录了完整项目的表作为主表,来左连接这两个子查询


LINK:https://ask.csdn.net/questions/7635980?answer=53675357
SOURCE:CSDN_ASK
ASK_ID:7635993
ANSWER_ID:53675341
TITLE:我想要读取本地所有视频
ANSWER:

有获取全盘文件访问权限么?没授权的情况下,应用的数据是不能互相访问的


LINK:https://ask.csdn.net/questions/7635993?answer=53675341
SOURCE:CSDN_ASK
ASK_ID:7635941
ANSWER_ID:53675283
TITLE:PHP 和 mysql是怎么连接的
ANSWER:

php使用mysql客户端连接mysql服务端,
比如连接时用到的mysqli_connect,就是mysql的客户端了,
或者用PDO的方式,也要安装PDO_MYSQL,这也是mysql的客户端


LINK:https://ask.csdn.net/questions/7635941?answer=53675283
SOURCE:CSDN_ASK
ASK_ID:7635669
ANSWER_ID:53675178
TITLE:oracle循环计算
ANSWER:

楼上说得真详细哈,直接把题主没说清楚的场景进行了分类讨论。
题主没有说明,这是在做一个积分功能还是在做一个实时查询的积分报表
如果是一个实时查询的积分报表,没有实时积分的话那也太不合理了,扣分扣成负数了怎么办?
如果是要做一个积分功能,那么这个东西应该要多个过程。


  1. 新用户积分初始化过程,即新增用户自动给80分
  2. 年初老用户积分初始化过程,直接更新成80分
  3. 扣分函数,传入用户及扣分值,校验当前分大于等于扣分,则扣分,否则返回失败
  4. 季度加分过程,每个季度开始的当日0点,给所有用户加5分。

如果是个报表,那么请提供你最终需要的报表格式,因为从题目上看,没有使用循环的必要


LINK:https://ask.csdn.net/questions/7635669?answer=53675178
SOURCE:CSDN_ASK
ASK_ID:7635773
ANSWER_ID:53675152
TITLE:欧盟CSE心电数据库如何购买
ANSWER:

CSE(Common Standards for Electrocardiography)数据库由欧盟建立,包含了五个数据集。数据集1和2是三通道同时采集得到,数据集3、4和5是多通道采集得到(12导联ECG + 3导联VCG)。


数据集3和4一般用于波形测量的验证,即P波、QRS波和T波特征点的测量,包含125组10秒钟的静态心电数据。在心电图机性能要求YY 0782-2010中,数据集3中的100个数据用于验证算法在模拟真实人体采集情况下的波形测量准确性。


数据集5(也称诊断数据库)一般用于软件算法诊断结论的验证,包含1220个数据,类型包含了正常、心室肥大、心肌梗死等。该数据集由人工结合临床给出诊断结论,但不对外公开,如果需要验证算法的话,需要将自己算法的结论按CSE规定的方法映射为相应的编码,由CSE进行比对最后返回算法诊断的准确率等信息。


CSE数据库需要购买获得,其中数据集3和4价格1500美元,数据集5价格3500美元,购买数据集5后,CSE可免费进行算法诊断结论判断的验证(三次内免费,超过三次600美元一次)。如果是学校或是科研院所,以上的价格有一些优惠,具体可联系咨询。


CSE数据库可联系:prubel.lyon@gmail.comPaul.Rubel@insa-lyon.fr获取相关的信息。


参考文章


LINK:https://ask.csdn.net/questions/7635773?answer=53675152
SOURCE:CSDN_ASK
ASK_ID:7635806
ANSWER_ID:53675143
TITLE:求sql developer 4.2.0.17.089.1709 32位的官方安装包
ANSWER:

SQL DEVELOPER的官方下载页面


免费注册一个账号即可下载




历史指定版本,可按照链接规则自行组装,虽然官网页面下架了,但是文件没有删



注意该链接无法直接下载,要使用迅雷等支持p2p的下载工具来进行下载


img


LINK:https://ask.csdn.net/questions/7635806?answer=53675143
SOURCE:CSDN_ASK
ASK_ID:7635839
ANSWER_ID:53675128
TITLE:只有一条简单的select * from tablea 这么一张表,但莫名报错
ANSWER:

从这个报错上来看,与sql语句没有任何关系,因为这个错不是数据库报出来的,而是在应用连接到数据库的时候就已经失败了,根本就还没向数据库发送sql指令。


LINK:https://ask.csdn.net/questions/7635839?answer=53675128
SOURCE:CSDN_ASK
ASK_ID:7635840
ANSWER_ID:53675125
TITLE:sql 多行合并为一行
ANSWER:
select a.outpatient_code, listagg(b.value) within group (order by b.value) 
from PT_OUTPATIENT_CURE a,RCD_out_RECORD_ITEM b
where a.id=b.outpatient_id
and a.outpatient_code=‘685593’
and b.element_id=‘204032’
group by a.outpatient_code

LINK:https://ask.csdn.net/questions/7635840?answer=53675125
SOURCE:CSDN_ASK
ASK_ID:7635875
ANSWER_ID:53675123
TITLE:同一列分段求最大值怎么求
ANSWER:

数据库表里面的行,其实是没有顺序的,不存在什么第1行第2行,在不加order by的时候,每次去查同一个表,顺序是有可能会变化的。
所以如果你表里面只有这两个字段的话,这题就无解了。
至少还得有个行号,然后通过开窗函数去查


LINK:https://ask.csdn.net/questions/7635875?answer=53675123
SOURCE:CSDN_ASK
ASK_ID:7635442
ANSWER_ID:53674721
TITLE:mysql中不同环境下如果复制表
ANSWER:

在同一个库里,从模式A下复制一张表的数据到模式B下,假设表名为test_table,并且模式B下已经创建好了这个表,那么在模式B下,执行


insert into test_table
select * from A.test_table;

同理,如果模式B下没有建表,也可以使用下面的sql


create table test_table as 
select * from A.test_table ;

当然前提是你登录的账号拥有这两个模式的权限


LINK:https://ask.csdn.net/questions/7635442?answer=53674721
SOURCE:CSDN_ASK
ASK_ID:7635580
ANSWER_ID:53674602
TITLE:该怎么办啊?(标签-SQL
ANSWER:

你的学生表里有外键指向Grade表,使用的字段是GradeId,也就是说,你插入学生表的时候,对于GradeId这个字段的值,必须存在于Grade表中,否则禁止添加。
在确认你插入的数据没有问题后,把缺失的GradeId先插入到Grade表里后,即可再对学生表进行插入


LINK:https://ask.csdn.net/questions/7635580?answer=53674602
SOURCE:CSDN_ASK
ASK_ID:7635492
ANSWER_ID:53674598
TITLE:postgres 数据库 中想按照时间进行行转列
ANSWER:

首先,数字开头的字符串是不能作为字段名的,而且“-”这个符号也不能包含在字段名内,因为可能会被认为是减号,因此目前无法实现你问题中要求的这个效果。
然后,假设你字段名改一下,比如 d20220101,d20220102 …这样,其实可以先用sql拼接的方式先把正确的sql拼接出来再去执行


—测试数据
CREATE TABLE exams2 (
name varchar(15),
exam date,
value int
);

insert into exams2 (name,exam,value) values (‘Bob’,‘2021-01-01’,70);
insert into exams2 (name,exam,value) values (‘Bob’,‘2021-01-02’,77);
insert into exams2 (name,exam,value) values (‘Bob’,‘2021-01-03’,71);
insert into exams2 (name,exam,value) values (‘Bob’,‘2021-01-04’,70);

insert into exams2 (name,exam,value) values (‘Sue’,‘2021-01-01’,89);
insert into exams2 (name,exam,value) values (‘Sue’,‘2021-01-02’,87);
insert into exams2 (name,exam,value) values (‘Sue’,‘2021-01-03’,88);
insert into exams2 (name,exam,value) values (‘Sue’,‘2021-01-04’,89);

—拼接sql
select ‘SELECT * FROM crosstab(’‘select name ,exam , value from exams2 order by 1,2’‘) as ct (name varchar(20),’
|| string_agg(e||’ int’,‘,’ order by e) ||‘);’ from (
select distinct ‘d’||to_char(exam,‘yyyymmdd’) e from exams2 ) t;

—执行上面的查询后,可以得到下面这个sql的字符串,复制出来再去执行即可
SELECT * FROM crosstab(‘select name ,exam , value from exams2 order by 1,2’) as ct (name varchar(20),d20210101 int,d20210102 int,d20210103 int,d20210104 int);

另外,官方文档中提供了一个crosstabN的用法,除了N为2/3/4以外,更多的列需要你自行定义一个type,在type中去定义有哪些字段以及字段类型,这样在查询的时候就不用去传那一串东西了
http://www.postgres.cn/docs/13/tablefunc.html


LINK:https://ask.csdn.net/questions/7635492?answer=53674598
SOURCE:CSDN_ASK
ASK_ID:7635511
ANSWER_ID:53674556
TITLE:MySQL对所有字段进行sum,不是sum所有字段,是每个字段分别单独sum,不想一个一个写的
ANSWER:

在sql标准中,一个select函数只能返回一列,你希望是一个函数能返回多列,这是不符合sql标准的。
另外,并不是所有字段类型都可以sum的,像字母和日期这种,sum会报错,所以更加不存在这种功能。
除非你自己新开发一个SQL引擎。
当然,也可以写个存储过程拼接动态sql,输入一个表名,返回一个完整的对每个字段进行单独sum的语法正确的sql


LINK:https://ask.csdn.net/questions/7635511?answer=53674556
SOURCE:CSDN_ASK
ASK_ID:7635474
ANSWER_ID:53674431
TITLE:Oracle连表1对多的关系 导致sql查询出来的数据 有其他列重复 如何 把重复列合并,这2个不一样数据的字段 拼在一列里呢
ANSWER:

如果oracle版本是11g,可以用wm_concat或者listagg函数进行聚合,12c以上就只能用listagg函数了,注意其他不聚合的字段都要在最后 group by
详细可参考此篇文章


LINK:https://ask.csdn.net/questions/7635474?answer=53674431
SOURCE:CSDN_ASK
ASK_ID:7635214
ANSWER_ID:53674396
TITLE:sql语句 某单位最早出现某规格的日期作为新列
ANSWER:

mysql 8.0以上支持开窗函数


first_value(ODATE) over(partition by OCUSNAME,ODGSPEC order by ODATE)  新列1,
case when first_value(ODATE) over(partition by OCUSNAME,ODGSPEC order by ODATE) > str_to_date(‘2021-05-01’,‘%Y-%m-%d’) then ‘Y’ else ‘N’ end 新列2

LINK:https://ask.csdn.net/questions/7635214?answer=53674396
SOURCE:CSDN_ASK
ASK_ID:7635275
ANSWER_ID:53674387
TITLE:这种联动的MYSQL语句怎么写?
ANSWER:

你这个不像是mysql的sql语句,sql长下面这样


select us.* from haoyou hy left join users us on hy.wo_haoyou_id=us.user_id left join  liaotian lt on hy.wo_haoyou_id=lt.add_user_id where lt.neirong like ‘%你%’

你对照着你的语法改吧


LINK:https://ask.csdn.net/questions/7635275?answer=53674387
SOURCE:CSDN_ASK
ASK_ID:7635279
ANSWER_ID:53674379
TITLE:把一个字段中的值改为其他值,并比较
ANSWER:

请把原始数据表格长啥样,以及你最终想要的表格长啥样贴出来


LINK:https://ask.csdn.net/questions/7635279?answer=53674379
SOURCE:CSDN_ASK
ASK_ID:7635291
ANSWER_ID:53674373
TITLE:怎么把文本文件里面的数据插入到数据库
ANSWER:

你现在使用什么工具连接的mysql?如果是navicat或者dbeaver这样的图形化工具的话,都是支持从文本导入数据的,而且你这数据也不多,导入很快的。


LINK:https://ask.csdn.net/questions/7635291?answer=53674373
SOURCE:CSDN_ASK
ASK_ID:7635383
ANSWER_ID:53674328
TITLE:用wpf做的一个类似管理系统,数据库内容改了,程序里的内容却没改,这是什么原因
ANSWER:

你在数据库里进行的修改操作,是不是没有commit?


LINK:https://ask.csdn.net/questions/7635383?answer=53674328
SOURCE:CSDN_ASK
ASK_ID:7635172
ANSWER_ID:53673720
TITLE:如何把 mysql合并数据 并把重复的值更新再写入
ANSWER:

你这问题太模糊了。。。
麻烦说明下,你要合并的数据是个啥,是文件还是表里面的数据?数据长啥样?想怎么判断重复?又想怎么更新?写到哪去?


LINK:https://ask.csdn.net/questions/7635172?answer=53673720
SOURCE:CSDN_ASK
ASK_ID:7635125
ANSWER_ID:53673703
TITLE:Ubuntu下安装的sqlite browser的图标显示的是齿轮,请问如何解决?
ANSWER:

因为它的图标就是长这个样子


LINK:https://ask.csdn.net/questions/7635125?answer=53673703
SOURCE:CSDN_ASK
ASK_ID:7635073
ANSWER_ID:53673702
TITLE:sql中如何多查一列出来
ANSWER:

你既然要查这个表里的多个字段,为什么不直接关联,非得写到字段的子查询里去?


select p.SYSTEMID, p.itemval, count(1)
from ln003 a, ln014 b, plat.pf45 p
where a.loancontrcode = b.loancontrcode
and p.typeid = ‘housetype’
and p.P_LEVEL = ‘2’
and p.itemid = b.housetype
group by p.SYSTEMID, p.itemval
;

当然前提是 plat.pf45这个表里的数据是全的,如果不全,改为左连接就行了


LINK:https://ask.csdn.net/questions/7635073?answer=53673702
SOURCE:CSDN_ASK
ASK_ID:7635013
ANSWER_ID:53673699
TITLE:请问现在程序员用的最多的浏览器是什么?
ANSWER:

其实,所谓的兼容性,主要是看浏览器内核,你说的EDGE和谷歌chrome这两个浏览器,其实内核都是开源的谷歌Chromium,在兼容性方面上几乎没有区别。
而且目前大多数流行的浏览器都是谷歌内核,或者谷歌IE双内核。除了firefox和opera,不过这两家也快抗不住了,毕竟谷歌内核的浏览器目前用户数遥遥领先。
在很多企业里,那些老的网页插件依旧依赖IE内核,所以,浏览器至少得需要具有IE内核及CHROMIUM内核,你可以分别使用两个不同内核的浏览器,也可以选择双核的浏览器


LINK:https://ask.csdn.net/questions/7635013?answer=53673699
SOURCE:CSDN_ASK
ASK_ID:7634986
ANSWER_ID:53673521
TITLE:mysql8.0.27(最新版)安装过程中遇到的一些错误
ANSWER:

The designated data directory D:\down\mysql8.0.27\mysql-8.0.27-winx64\data\ is unusable.
You can remove all files that the server added to it



这是说数据目录不能用,让你删文件


LINK:https://ask.csdn.net/questions/7634986?answer=53673521
SOURCE:CSDN_ASK
ASK_ID:7634987
ANSWER_ID:53673517
TITLE:把select的结果插入数据库
ANSWER:

你既然是insert报错,那么就应该把insert命令发出来呀。
使用with的时候,insert 要放到with前面去


create table test_20220123_01(a number);

insert into test_20220123_01(a)
with xx as (select 1 a from dual)
select a from xx;



你都能用sql查出数据了,为什么不直接用查询sql去插,还导出成值再插?
还有,你发的这个sql也不完整啊,指定了7个字段,那么后面的值也有接7个,并且按顺序一一对应。
你这后面括号里只有4个值,而且还是以逗号结尾,当然会报错。
正常的单行插入sql应该长这样


insert into 表名(字段1, 字段2, 字段7, 字段8 ) VALUES ( ‘字段1的值’,‘字段2的值’,‘字段7的值’,‘字段8的值’)

LINK:https://ask.csdn.net/questions/7634987?answer=53673517
SOURCE:CSDN_ASK
ASK_ID:7634916
ANSWER_ID:53673515
TITLE:用python输出的csv文件格式不统一怎么回事呀
ANSWER:

csv本身是不带格式的纯文本文件,你这个显示效果是excel打开后自动处理的


LINK:https://ask.csdn.net/questions/7634916?answer=53673515
SOURCE:CSDN_ASK
ASK_ID:7634968
ANSWER_ID:53673512
TITLE:关于计算两个日期之间的每个月天数的问题
ANSWER:

你确定是用r语言?而不是用sql??


LINK:https://ask.csdn.net/questions/7634968?answer=53673512
SOURCE:CSDN_ASK
ASK_ID:7634961
ANSWER_ID:53673503
TITLE:sql:最晚一个会议的时间(按当地时间(时区问题)推算,凌晨5:00前的最晚一个的时间,5点后算作新一天)
ANSWER:

最简单的,你直接把数据里的时间减掉5个小时,再去识别是哪一天不就好了?


然后你说的日期格式不一样,是因为你数据库里那个叫"UNIX_TIMESTAMP",转换一下就好了


select UNIX_TIMESTAMP(convert_tz(now(), ‘+08:00’, ‘+00:00’))*1000

如果是要把UNIX_TIMESTAMP转回成日期时间,用下面这个


select from_unixtime(1459338786)

注意位数,一般有10位数和13位数两种,你原数据是13位数就先除以1000再用 from_unixtime


LINK:https://ask.csdn.net/questions/7634961?answer=53673503
SOURCE:CSDN_ASK
ASK_ID:7634921
ANSWER_ID:53673450
TITLE:使用mysql命令导表失败
ANSWER:

你第一张图,导出来那个东西,其实是告诉你这个命令调用的语法不对


mysql -uroot -p -e “select * from u1” mysql >test.txt

注意参数赋值这里不是用的等号,而是个空格

img


LINK:https://ask.csdn.net/questions/7634921?answer=53673450
SOURCE:CSDN_ASK
ASK_ID:7634911
ANSWER_ID:53673444
TITLE:MySQL 时间条件筛选-今天之前7个月
ANSWER:
SELECT  FROM 表名 WHERE date(时间字段) between DATE_SUB(CURDATE(), INTERVAL 7 MONTH) and  CURDATE()

或者


SELECT  FROM 表名 WHERE date(时间字段) >= DATE_SUB(CURDATE(), INTERVAL 7 MONTH) and date(时间字段)<= CURDATE()

LINK:https://ask.csdn.net/questions/7634911?answer=53673444
SOURCE:CSDN_ASK
ASK_ID:7634840
ANSWER_ID:53673366
TITLE:安装MongoDB出现问题
ANSWER:

在安装程序上鼠标右键,以管理员方式运行


LINK:https://ask.csdn.net/questions/7634840?answer=53673366
SOURCE:CSDN_ASK
ASK_ID:7634848
ANSWER_ID:53673365
TITLE:安装navicat 时出现以下截图问题
ANSWER:

你这是打补丁,它提示你打了但又没完全打,先去用用程序,看看补丁是不是已经打上了,如果没打上,再来看看是不是哪个东西没改,对照教程再打一次


LINK:https://ask.csdn.net/questions/7634848?answer=53673365
SOURCE:CSDN_ASK
ASK_ID:7634600
ANSWER_ID:53673079
TITLE:sql怎么改成中文啊
ANSWER:

软件设置里是不能修改语言的。如果你是下载的所谓中文版,那么你下载的页面里一般会有教程教你怎么替换语言文件。


LINK:https://ask.csdn.net/questions/7634600?answer=53673079
SOURCE:CSDN_ASK
ASK_ID:7634529
ANSWER_ID:53672972
TITLE:mysql 分区表,添加数据报错,99娃子吧
ANSWER:

你看一下你分区表的定义, list columns 里面限定了哪些值放到哪个分区,然后你新插入的数据中对应字段的值,如果不在这个分区定义里面,就会报这个错


LINK:https://ask.csdn.net/questions/7634529?answer=53672972
SOURCE:CSDN_ASK
ASK_ID:7634523
ANSWER_ID:53672956
TITLE:Navicat for Oracle 字段前后插入问题
ANSWER:

这个其实与工具没有关系。
ORACLE数据库,直接对表添加字段时,是无法进行字段顺序的指定的,如果你想修改字段顺序,需要后台直接修改数据字典sys.col$ 。
懒得敲代码了,参考这篇文章中的方法二


LINK:https://ask.csdn.net/questions/7634523?answer=53672956
SOURCE:CSDN_ASK
ASK_ID:7634344
ANSWER_ID:53672951
TITLE:如何取得工作管理員中處理程序的每支程式的CPU%值
ANSWER:

图一中的应该是对一个程序的多个process进行的聚合,比如"LINE",图一左边显示有箭头,展开后,你会发现有多个Process,对应的就是你图二中的多条记录,需要对其进行求和。
比如主process的pid为1924时,假设下面只有一层子进程,那么对应的数据范围sql应该为


select * from Win32_PerfFormattedData_PerfProc_Process where IDProcess=1924 or CreatingProcessID=1924

但是如果有多层子进程的话,这个会比较麻烦,需要用到递归,比如查到CreatingProcessID=1924 的所有进程,假设有123和456两个IDProcess,则需要继续向下查CreatingProcessID in (123,456),就这么一直查下去,直到查不出数据,再对前面所有查到的进程进行统计。


另外,这篇问答中有关于CPU核心数及线程数的讨论


LINK:https://ask.csdn.net/questions/7634344?answer=53672951
SOURCE:CSDN_ASK
ASK_ID:7634298
ANSWER_ID:53672865
TITLE:MySQL中的日期运算问题
ANSWER:

情况一和情况二不一样的原因是,你没有把这几个或者条件用括号括起来,导致了它每一个条件都和and前面的变成了并列条件,正确的sql应该长这样


where A=B AND (C=1 OR C=2 OR C=3)

上下结果不一致,是因为你符号本就写得不一样,上面是大于1997年(不含1997年),下面是大于或者等于1997年


LINK:https://ask.csdn.net/questions/7634298?answer=53672865
SOURCE:CSDN_ASK
ASK_ID:7634391
ANSWER_ID:53672855
TITLE:安装Oracle12c的时候出现了这个错误怎么解决
ANSWER:

ORA-12514:TNS:监听程序当前无法识别连接描述符中请求的服务



你这是监听没配置好


LINK:https://ask.csdn.net/questions/7634391?answer=53672855
SOURCE:CSDN_ASK
ASK_ID:7634387
ANSWER_ID:53672851
TITLE:oracle数据库亿级数据量中查询
ANSWER:

只在查询上加速的话,目前看上去只能加个并行试试了


select /+ parallel(t,8)/ * from 表名 t where t.身份证号=‘43000000000000000000’

还有,可以让对方刷新一下这个表的统计信息。
另外,如果能把这个表同步到另一个数据库,那么就可以建立索引了。
而且看你这个表结构的设计,看上去应该不是一个表,主键看上去是在子账号上,同一个身份证号应该可能对应多条数据,所以这可能是一个视图,速度慢应该是由于视图内sql逻辑比较复杂或者关联了多个表,并且身份证号应该是在账号表后面的一个属性字段,你用子账号去查可能会比用身份证号去查要快


LINK:https://ask.csdn.net/questions/7634387?answer=53672851
SOURCE:CSDN_ASK
ASK_ID:7634353
ANSWER_ID:53672844
TITLE:在工厂内使用无线通讯模块,能否确保数据传输安全性、稳定性?
ANSWER:

无线通讯肯定不如有线通讯稳定,但是就算用有线,同样也可能存在掉包的情况。
因此在网络传输不稳定的情况下,需要靠应用程序来解决这个不稳定的问题,必须让通讯的两端都得知对方已正常处理才算完成一个任务,否则任务就必须留在队列里标记为未处理


LINK:https://ask.csdn.net/questions/7634353?answer=53672844
SOURCE:CSDN_ASK
ASK_ID:7634075
ANSWER_ID:53672323
TITLE:ora-02000 缺失always关键字怎么解决
ANSWER:

你oracle是什么版本?你这个建表语句,我在21c上测试没有报错


img


21c官方文档


11g官方文档


LINK:https://ask.csdn.net/questions/7634075?answer=53672323
SOURCE:CSDN_ASK
ASK_ID:7634021
ANSWER_ID:53672201
TITLE:各位靓仔我遇到一个问题,很困扰,茶饭不思,终日惶惶不得,难受难受
ANSWER:

这么大个报错没看到么?



ERROR 1054 (42S22): Unknown column 'A002' in 'field list'



由于触发器执行失败,你这个事务都是执行不成功的,相当于你啥都没执行。
就算你把这个报错的位置改正确,你这里的after和before也不会有区别,因为你根本就没在触发器里再去查表里面的数据,也没对new进行赋值,全部都只是查old和new的变量,这两个值是多少不会受after和before的影响


LINK:https://ask.csdn.net/questions/7634021?answer=53672201
SOURCE:CSDN_ASK
ASK_ID:7633999
ANSWER_ID:53672179
TITLE:SQL中如何根据相同条件求和数量,并把数量更新到新列
ANSWER:

先说是什么数据库?以及数据库的版本?如果是支持开窗函数的数据库的话,这个就很好写


select 供应商,
采购订单号,
收货城市,
发货日期,
收货数,
物料号,
重量,
体积,
sum(重量) over (partition by 日期, 供应商, 收货城市) 合并重量,
sum(体积) over (partition by 日期, 供应商, 收货城市) 合并体积,
max(concat(日期, ‘-’, 供应商, ‘-’, 收货城市)) over (partition by 日期, 供应商, 收货城市) 合并单号
from

LINK:https://ask.csdn.net/questions/7633999?answer=53672179
SOURCE:CSDN_ASK
ASK_ID:7633985
ANSWER_ID:53672143
TITLE:ORACLE 截取函数,从右侧开始,往左侧截取如何写?
ANSWER:

substr的第三个参数都是从第二个参数的位置从左往右数,因此你这个需求应该进行转化,截取的逻辑应该为从左起第一位,截到倒数第3位,即字符串总长度减2的长度


substr(‘00D51E31’,1,length(‘00D51E31’)-2)

img


LINK:https://ask.csdn.net/questions/7633985?answer=53672143
SOURCE:CSDN_ASK
ASK_ID:7633977
ANSWER_ID:53672130
TITLE:orcal 存储过程 怎么用变量表示列值和判断
ANSWER:

最简单的方式是用动态sql,把sql的字符串拼出来,再用execute immediate去执行这个SQL字符串。
如果不用动态sql的话,其实就是在where条件中,对判断规则进行解析


where  (case 
when pdgz =‘>’ and zdm>pdz then 1
when pdgz =‘<’ and zdm<pdz then 1
when pdgz =‘<=’ and zdm<=pdz then 1
when pdgz =‘>=’ and zdm>=pdz then 1
end )
=1


LINK:https://ask.csdn.net/questions/7633977?answer=53672130
SOURCE:CSDN_ASK
ASK_ID:7633930
ANSWER_ID:53672057
TITLE:如何让执行结果里不出现重复的数,请专家答疑解惑
ANSWER:

整个查询结果中的所有数字,都不允许重复?
那么在数据填充阶段,需要将每次填充进去的值,保存到一个列表中,然后填充前的查询的时候,查询条件加上不存在于此列表中


LINK:https://ask.csdn.net/questions/7633930?answer=53672057
SOURCE:CSDN_ASK
ASK_ID:7633907
ANSWER_ID:53672046
TITLE:如何使用分组聚合函数统计数据
ANSWER:

你这逻辑明显不对嘛,你查的数据是dept_id为2和3的行(限定了长度等于3),但又想要统计其他行的数据。
首先,你得先说明节点个数,是只有两个节点或者说只查特定节点?如果节点是固定的话,最简单的方法是自表关联


select a.dept_name,count(1) 
from sys_dept a,sys_dept b
where a.dept_id=b.parent_id
and a.parent_id =1
group by a.dept_name

如果是节点随机,那就得用递归sql(with RECURSIVE as )来处理了,但递归sql只有8.0版本以上才支持


LINK:https://ask.csdn.net/questions/7633907?answer=53672046
SOURCE:CSDN_ASK
ASK_ID:7633808
ANSWER_ID:53672008
TITLE:PostgreSql的PROCEDURE在Java中如何调用?(问的是PROCEDURE而不是function,PostgreSql使用的是12)
ANSWER:

java里调用postgresql的procedure这个问题,在以前的确有人讨论过,当时给出的解决方式是,把数据库里的这个procedure对象改成function对象,并在function的最后随便返回一个值就行了。
早期的postgresql只有function,没有procedure,因此老版本的jdbc驱动只会去检查function。
然后我在检索相关文档的时候,找到一篇这样的文章


此文章中的方法的确可以正常调用procedure,但是他之前的报错和你的不一样,你的是提示没有找到该函数,他的报错提示这是一个过程。
如果确定jdbc的版本及调用命令没问题的话,那你就得检查一下参数类型了。postgresql识别函数或者过程不仅仅是靠的名称,还依赖于传入传出的参数类型。


LINK:https://ask.csdn.net/questions/7633808?answer=53672008
SOURCE:CSDN_ASK
ASK_ID:7633825
ANSWER_ID:53671979
TITLE:Navicat for Oracle 如何快速回退回滚
ANSWER:

这个需要专业的DBA操作,不懂的建议不要在生产项目中尝试


LINK:https://ask.csdn.net/questions/7633825?answer=53671979
SOURCE:CSDN_ASK
ASK_ID:7633850
ANSWER_ID:53671975
TITLE:pyhton操作数据库无法往表中插入数据
ANSWER:

b"Invalid column name '\xc1\xe3\xbb\xf9\xb4\xa1\xd1\xa7Py'



这句翻译就是 ,无效的字段名 "零基础学py"。


在SQL里,双引号中间的代表字段名、表名等,单引号中间的代表字符串。
所以,你得把插入的这几个值的双引号改成单引号。


LINK:https://ask.csdn.net/questions/7633850?answer=53671975
SOURCE:CSDN_ASK
ASK_ID:7633895
ANSWER_ID:53671962
TITLE:sql对词进行重复统计
ANSWER:

试试这样


select 
SUM(case when 来源名称 like ‘%精油%’ then 访客数 else 0 end )as 精油访客数,
SUM(case when 来源名称 like ‘%小o%’ then 访客数 else 0 end )as 小o访客数,
SUM(case when 来源名称 like ‘%护发素%’ then 访客数 else 0 end )as 护发素访客数
from dbo.Sheet1$

LINK:https://ask.csdn.net/questions/7633895?answer=53671962
SOURCE:CSDN_ASK
ASK_ID:7633747
ANSWER_ID:53671764
TITLE:请问mysql查询多表时一个表没有对应数据怎么办
ANSWER:

改动最小的




select * from user u left join score s on u.sid=s.id
where u.name='a' and ifnull(s.date,'2021-01')='2021-01'


 


LINK:https://ask.csdn.net/questions/7633747?answer=53671764
SOURCE:CSDN_ASK
ASK_ID:7633077
ANSWER_ID:53671550
TITLE:SQL SERVER 用多条件如何进行批量查询?请专家答疑解惑
ANSWER:

没那么复杂,多个字段把它变成一个字段就是了


select * from t4 where 
concat(m1,‘-’,m2,‘-’,m3) in (select concat(m1,‘-’,m2,‘-’,m3) from t1) or
concat(m1,‘-’,m2,‘-’,m3,‘-’,m4) in (select concat(m1,‘-’,m2,‘-’,m3,‘-’,m4) from t2) or
concat(m1,‘-’,m2,‘-’,m3,‘-’,m4,‘-’,m5,‘-’,m6,‘-’,m7,‘-’,m8,‘-’,m9) in (select concat(m1,‘-’,m2,‘-’,m3,‘-’,m4,‘-’,m5,‘-’,m6,‘-’,m7,‘-’,m8,‘-’,m9) from t3)



等下,我好像看漏了,你这查询条件是可以乱序的?想随机满足任意字段都行?这问题这太离谱了吧。。。究竟是怎样的程序需要这样来设计数据库呀?我太好奇了。。。


LINK:https://ask.csdn.net/questions/7633077?answer=53671550
SOURCE:CSDN_ASK
ASK_ID:7633609
ANSWER_ID:53671442
TITLE:Python连接SQLSever
ANSWER:

pymysql只能连mysql数据库,不能连接sqlserver数据库


LINK:https://ask.csdn.net/questions/7633609?answer=53671442
SOURCE:CSDN_ASK
ASK_ID:7633601
ANSWER_ID:53671441
TITLE:mysql插入不重复的记录
ANSWER:

from DUAL是oracle的,mysql里不需要接这个东西,只需要select 对应的字段即可 。然后"NOT EXISTS"这个写法是标准sql,基本所有的关系型数据库都支持。
另外,存在条件里限制1行,这个完全没必要,数据库会在找到任意一条后马上返回的,不会全表扫


LINK:https://ask.csdn.net/questions/7633601?answer=53671441
SOURCE:CSDN_ASK
ASK_ID:7633519
ANSWER_ID:53671394
TITLE:数据库多表联合查询时,一次sql join连接查询和多次单表查询哪个性能更高?
ANSWER:

你知道分两次查询再组合时,发生了一些什么吗?
应用把sql通过网络发到数据库,数据库解析sql,把整个表的数据从数据库的磁盘读出来到数据库的内存,然后通过网络把整个表传输到应用端的内存,两个表都是这样,然后在应用内存里排序再进行组合。而且这些动作还必须在每一次查询时发生,因为表里面的数据会变!当数据量一大,无论是磁盘读写、网络带宽、内存占用都是爆炸式上升,你应用速度能快才怪。为了查这么一条数据,你把几百万乃至上千万的数据搬过来搬过去,是为了啥?
反观在数据库里把最终需要的数据获取出来,通过网络传输的就只有你要的那一条记录,大大节省了各环节的开销


LINK:https://ask.csdn.net/questions/7633519?answer=53671394
SOURCE:CSDN_ASK
ASK_ID:7633472
ANSWER_ID:53671258
TITLE:sql对查询出来的结果进行隐藏处理
ANSWER:

最直白的方法当然就是上面说的用substr截,再拼星号。但这看上去不是太优雅哈,我给个正则的方式吧


select regexp_replace(‘15834567890’,‘(\d{3})\d{4}(\d{4})’,‘<span class=“hljs-number”>1****<span class=“hljs-number”>2’) from dual;

img


LINK:https://ask.csdn.net/questions/7633472?answer=53671258
SOURCE:CSDN_ASK
ASK_ID:7633439
ANSWER_ID:53671171
TITLE:sql数据库,查询每个学生数学成绩时间最新的那一笔记录,求帮助!
ANSWER:

SQL Server 2012 起,开始支持开窗函数,


select * from (
select sa.*,
row_number() over (partition by StudentID,Subiject order by Time desc) rn
from Students_Achievement as sa ) as a
where a.rn =1

但sqlserver2008不支持开窗函数,所以这个写起来会比较麻烦


select * from Students_Achievement where (StudentID,Subiject ,Time ) 
in (select StudentID,Subiject ,max(Time) from Students_Achievement
group by StudentID,Subiject );

LINK:https://ask.csdn.net/questions/7633439?answer=53671171
SOURCE:CSDN_ASK
ASK_ID:7633389
ANSWER_ID:53671148
TITLE:创建表空间size和maxsize一样的值,又设置了自动增长
ANSWER:

这里的maxsize是限制自动增长最多能增长到多少。像你这初始大小和最大大小一样了,那它当然不会再自动增长了。如果不手动调整大小的话,到了满了的时候就会报表空间不足了


LINK:https://ask.csdn.net/questions/7633389?answer=53671148
SOURCE:CSDN_ASK
ASK_ID:7633388
ANSWER_ID:53671113
TITLE:编写程序查询Oracle数据库每个月最后一天的数据
ANSWER:

如果你能够确保每个月末都有数据的话,用这个


select * fromwhere stat_date=last_day(stat_date);

如果是要按照数据里,按月分组取最后一条数据,比如10月最后一条是28号,没有31号的数据,用这个


select * fromwhere stat_date in (
select max(stat_date) d fromgroup by last_day(stat_date) )

或者


select * from  
(select max(stat_date) over (partition by last_day(stat_date)) md,a.* from 表)
where md=stat_date

LINK:https://ask.csdn.net/questions/7633388?answer=53671113
SOURCE:CSDN_ASK
ASK_ID:7633393
ANSWER_ID:53671053
TITLE:使用dapper,在mysql调用存储过程时,提示在数据库中找不到存储过程或函数
ANSWER:

看下是不是用的同一个用户连接的同一个数据库


LINK:https://ask.csdn.net/questions/7633393?answer=53671053
SOURCE:CSDN_ASK
ASK_ID:7633361
ANSWER_ID:53671016
TITLE:命令批量执行drop table
ANSWER:

可以在存储过程里执行动态sql,以oracle数据库为例


begin
for rec in (select ‘drop table ‘||table_name||’;’ str from cat where table_type=‘TABLE’) loop
execute immediate rec.str;
end loop;
end;
/

其他数据库也有类似的动态sql执行方式


LINK:https://ask.csdn.net/questions/7633361?answer=53671016
SOURCE:CSDN_ASK
ASK_ID:7633140
ANSWER_ID:53670939
TITLE:SQL SERVER,两个表关联,在第一个条件关联不上的,就用第二个条件关联
ANSWER:
select * from a,b where a.a1=b.b1 or a.a2=b.b2

LINK:https://ask.csdn.net/questions/7633140?answer=53670939
SOURCE:CSDN_ASK
ASK_ID:7633256
ANSWER_ID:53670932
TITLE:权限控制,每笔数据里面保存当前用户的ID,条件搜索只显示当前用户的数据
ANSWER:

查询的sql里多加一个where条件,让表里面记录了用户ID的字段等于当前登录的用户ID


LINK:https://ask.csdn.net/questions/7633256?answer=53670932
SOURCE:CSDN_ASK
ASK_ID:7632962
ANSWER_ID:53670409
TITLE:什么是大数据索引技术?
ANSWER:

给你个关键词 "Elasticsearch",去了解它是个啥,然后怎么用,怎么优化,还要去了解它的同类


LINK:https://ask.csdn.net/questions/7632962?answer=53670409
SOURCE:CSDN_ASK
ASK_ID:7632991
ANSWER_ID:53670383
TITLE:ORACLE条件判断相关问题
ANSWER:

按你这个思路,会涉及到一个分摊问题,把问题搞复杂了,因为你这个表里面没有唯一键,无法排序,不能确定哪一行发生在前哪一行发生在后;就算有个时间排序,假设第三行和第四行数据一样,都可以作为临界线,这样随便挑一行出来都能作为超标,那样强行按顺序分摊没有任何意义。
这个题的最终目的,应该只是想揪出哪些id有违规,并且算出他总计应该支付多少、总计实际支付了多少、以及购买数量,这样也可以得出他总计违规了多少金额,至于要查明细,得到违规的id后再去查原表就是了。
给你一个简单易懂的sql


—模拟数据
create table test_20210119_13
(id number,
item varchar2(200),
unit_price number,
sell_num number);

insert into test_20210119_13 VALUES (1,‘A’,100,2);
insert into test_20210119_13 VALUES (1,‘A’,60,1);
insert into test_20210119_13 VALUES (1,‘A’,40,3);
insert into test_20210119_13 VALUES (1,‘A’,40,1);

----查询sql
select ID,
ITEM,
SUM(UNIT_PRICE * SELL_NUM) 实付总计,
SUM(SELL_NUM) 数量总计,
CASE
WHEN SUM(SELL_NUM) = 1 THEN
100
WHEN SUM(SELL_NUM) = 2 THEN
100 + 100 * 0.6
WHEN SUM(SELL_NUM) = 3 THEN
100 + 100 * 0.6 + 100 * 0.6 * 0.6
WHEN SUM(SELL_NUM) > 3 THEN
100 + 100 * 0.6 + 100 * 0.6 * 0.6 + (SUM(SELL_NUM) - 3) * 100
END 应付总计
from test_20210119_13
GROUP BY ID, ITEM

LINK:https://ask.csdn.net/questions/7632991?answer=53670383
SOURCE:CSDN_ASK
ASK_ID:7632945
ANSWER_ID:53670335
TITLE:触发器里的update偶尔不成功
ANSWER:

一、监视不了有很多种方式可以绕过去。


  1. 使用dbms_output.put_line(:new.house );打印
  2. 前面声明个变量,然后把:new.house 赋值到这个变量上去,然后你就可以监视这个变量的值了

二、查问题的话,从你这个sql里看,如果INVT这个表里本就没有记录,当然更新是更新不到的;还有如果where条件里的6个值,有任何一个值为空,也是查不到的,再就是你更新的值,如果有某个值为空,做四则运算的结果也是会为空。
还有,要注意并发的情况,如果是两个会话同时执行这个表的插入,你前面又没判断锁,是有可能出现某条更新的结果被覆盖的情况。


三、另外,如果数据很难跟踪的话,你完全可以再加个日志表,每插一笔,就把用到的这些值都记录到日志表里去,当你发现数据对不上的时候,回头去查日志表,是不是有数据为空的情况。


LINK:https://ask.csdn.net/questions/7632945?answer=53670335
SOURCE:CSDN_ASK
ASK_ID:7632939
ANSWER_ID:53670325
TITLE:有个sql语句想分子分母相除的结果,请教下如何写呢?
ANSWER:

楼上这个答案有点敷衍。。。
简单来说,题主是想实现,在一个表里面,满足某个条件的记录数占总记录数的百分比,其实count里就可以直接用case when 来过滤数据


select count(case when col=yes then 1 end )/count(1) from table ;
–或
select sum(case when col=yes then 1 eles 0 end )/count(1) from table ;

LINK:https://ask.csdn.net/questions/7632939?answer=53670325
SOURCE:CSDN_ASK
ASK_ID:7632775
ANSWER_ID:53670128
TITLE:企业微信后台怎么查看配置了回调域名呢??
ANSWER:

应用管理,点击你的自建应用,设置可信域名


img


LINK:https://ask.csdn.net/questions/7632775?answer=53670128
SOURCE:CSDN_ASK
ASK_ID:7632800
ANSWER_ID:53670046
TITLE:SSRS 水晶报表项目如何实现以下效果,存储过程为两条数据,在报表上只体现为一行。
ANSWER:

这个在sql查询层面上就可以解决呀,用case when或者用pivot都行




select 
case when payway=‘现金’ then paybanlence else 0 end as 现金,
case when payway=‘刷卡’ then paybanlence else 0 end as 刷卡
from

LINK:https://ask.csdn.net/questions/7632800?answer=53670046
SOURCE:CSDN_ASK
ASK_ID:7632802
ANSWER_ID:53670043
TITLE:数据库运行时候出现代码后闪退
ANSWER:

参考



ORA-24550 错误表示您应该 查看应用程序代码是否导致错误。如果您运行的是 Oracle 11g,这可能是错误 7308054,请检查 MOS 以确定。
文档在 ORA-24550 错误中记录了这一点:
"ORA-24550: 收到未处理的信号#number。字符串
原因:严重错误:收到信号
操作:参考平台特定的信号代码,查看应用代码是否导致错误。否则,记录所有错误状态并通知 Oracle 支持服务。”



LINK:https://ask.csdn.net/questions/7632802?answer=53670043
SOURCE:CSDN_ASK
ASK_ID:7632756
ANSWER_ID:53670039
TITLE:【SQL】怎么在对已分组数据进行总合计并在列中展示
ANSWER:

这典型的要用开窗函数呀


select 
s 等级,
count(id) 总计,
count(id)/sum(count(id)) over() 占比
from test_table group by s

LINK:https://ask.csdn.net/questions/7632756?answer=53670039
SOURCE:CSDN_ASK
ASK_ID:7632714
ANSWER_ID:53670028
TITLE:关于行列转置,求一个简单的方法,sql或者excel都行
ANSWER:

首先,日期不能作为字段名,我假设你1号是A1,2号是A2,以此类推。
然后你这个要用unpivot,但要看你是什么数据库,不是所有数据库都支持。
下面这个sql是按照你这个格式虚拟的测试数据及查询sql


—测试数据
create table test_20220119 (name VARCHAR2(100),A1 VARCHAR2(100),A2 VARCHAR2(100),A3 VARCHAR2(100),A4 VARCHAR2(100),A5 VARCHAR2(100),A6 VARCHAR2(100),A7 VARCHAR2(100),A8 VARCHAR2(100),A9 VARCHAR2(100),A10 VARCHAR2(100),A11 VARCHAR2(100),A12 VARCHAR2(100),A13 VARCHAR2(100),A14 VARCHAR2(100),A15 VARCHAR2(100),A16 VARCHAR2(100),A17 VARCHAR2(100),A18 VARCHAR2(100),A19 VARCHAR2(100),A20 VARCHAR2(100),A21 VARCHAR2(100),A22 VARCHAR2(100),A23 VARCHAR2(100),A24 VARCHAR2(100),A25 VARCHAR2(100),A26 VARCHAR2(100),A27 VARCHAR2(100),A28 VARCHAR2(100),A29 VARCHAR2(100),A30 VARCHAR2(100));

INSERT INTO test_20220119 VALUES (‘ZS’,‘A’,‘B’,‘C’,‘A’,‘B’,‘C’,‘A’,‘B’,‘C’,‘A’,‘B’,‘C’,‘A’,‘B’,‘C’,‘A’,‘B’,‘C’,‘A’,‘B’,‘C’,‘A’,‘B’,‘C’,‘A’,‘B’,‘C’,‘A’,‘B’,‘C’);
INSERT INTO test_20220119 VALUES (‘LS’,‘A’,‘B’,‘C’,‘A’,‘B’,‘C’,‘A’,‘B’,‘C’,‘A’,‘B’,‘C’,‘A’,‘B’,‘C’,‘A’,‘B’,‘C’,‘A’,‘B’,‘C’,‘A’,‘B’,‘C’,‘A’,‘B’,‘C’,‘A’,‘B’,‘C’);
—查询sql
select name 姓名,substr(日期,2) 日期, 班次 from test_20220119 UNPIVOT (班次 FOR 日期 in (A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,A16,A17,A18,A19,A20,A21,A22,A23,A24,A25,A26,A27,A28,A29,A30));

实测截图

img


LINK:https://ask.csdn.net/questions/7632714?answer=53670028
SOURCE:CSDN_ASK
ASK_ID:7632566
ANSWER_ID:53669999
TITLE:case when 语句 为什么第一句无论正确与否 都会跟随第二语句判断
ANSWER:

这sql让人血压升高。。。case when 哪有你这样用的,我按你这个逻辑改了下


select mon,
case
when Country = ‘China’ and mon = 8 and total>10000 then ‘合格’
when kh.Country = ‘China’ and mon = 9 and total>12000 then ‘合格’
else ‘不合格’ end 中国业绩情况,
case
when Country = ‘England’ and mon = 8 and total>10000 then ‘合格’
when Country = ‘England’ and mon = 9 and total>12000 then ‘合格’
else ‘不合格’ end 英国业绩情况
from (
select month(xl.zTime) mon,kh.Country,sum(cp.pricexl.SALE_AMOUNT) total
from 产品明细 cp,销量明细 xl,客户明细 kh
where xl.pid = cp.pid
and xl.customId = kh.customId
and month(xl.zTime) in (8,9)
and Country in (‘England’,‘China’)
group by month(xl.zTime),kh.Country
);

你可以先把中间这个子查询弄出来,看看有没有数据




稍微改了下,以后测试数据请提供建表sql及insert语句,要不然回答问题的人还得替你去造数据测试sql


select mon,
max(case
when kh.Country = ‘China’ and mon = 8 and total>10000 then ‘合格’
when kh.Country = ‘China’ and mon = 9 and total>12000 then ‘合格’
when kh.Country = ‘China’ and mon in (8, 9) then ‘不合格’
end) 中国业绩情况,
max(case
when kh.Country = ‘England’ and mon = 8 and total>10000 then ‘合格’
when kh.Country = ‘England’ and mon = 9 and total>12000 then ‘合格’
when kh.Country = ‘England’ and mon in (8, 9) then ‘不合格’
end) 英国业绩情况
from (
select month(xl.zTime) mon,kh.Country,sum(cp.price
xl.SALE_AMOUNT) total
from 产品明细 cp,销量明细 xl,客户明细 kh
where xl.pid = cp.pid
and xl.customId = kh.customId
and month(xl.zTime) in (8,9)
and Country in (‘England’,‘China’)
group by month(xl.zTime),kh.Country
) group by mon;

LINK:https://ask.csdn.net/questions/7632566?answer=53669999
SOURCE:CSDN_ASK
ASK_ID:7632666
ANSWER_ID:53669969
TITLE:oracle sum()over()问题
ANSWER:

这个问题其实很简单,在你分析函数中的order by 后面,再接一个每一行都有不同值的列就是了,比如员工id,甚至直接用个rownum也行,


select deptno,
ename,
sal,
sum(sal) over(partition by deptno order by deptno desc, sal desc ,rownum) dept_sum
from emp;

你这个是想对分组窗口的每一行,累计从第一行到当前行的值,但是你这个排序却没有进行绝对的排序,只根据deptno 和sal排序 ,可能每次排序的结果都会不一样。


另外,其实还有更加精准的统计分组窗口的第一行到当前行的方式


sum(salary ) over (partition by deptno order by salary desc rows between 1 preceding and current row)

sum(salary ) over (partition by deptno order by salary desc groups between 1 preceding and current row)

sum(salary ) over (partition by deptno order by salary desc range between 1 preceding and current row)

参考


LINK:https://ask.csdn.net/questions/7632666?answer=53669969
SOURCE:CSDN_ASK
ASK_ID:7632670
ANSWER_ID:53669932
TITLE:mysql utf8中文排序
ANSWER:

mysql8.0支持函数索引


LINK:https://ask.csdn.net/questions/7632670?answer=53669932
SOURCE:CSDN_ASK
ASK_ID:7632730
ANSWER_ID:53669921
TITLE:python读写大型csv速度太慢应该如何解决?
ANSWER:

建议导入到数据库中再进行处理


LINK:https://ask.csdn.net/questions/7632730?answer=53669921
SOURCE:CSDN_ASK
ASK_ID:7632479
ANSWER_ID:53669458
TITLE:关于#c##的问题:在运行下面这一串代码时,不管row[0]中的数据和combobox1里的数据相等还是不相等,j1都是为false
ANSWER:

你有没有尝试过,在这段代码里面,把 row2[0].ToString().Trim() 和comboBox1.Text.ToString().Trim() 打印出来,看看实际取到的值是个啥?


LINK:https://ask.csdn.net/questions/7632479?answer=53669458
SOURCE:CSDN_ASK
ASK_ID:7632450
ANSWER_ID:53669448
TITLE:SQL server语句went
ANSWER:

返回的那个值表示受影响的行数,你插入一列当然是影响一行,返回的是1
参考官方文档


LINK:https://ask.csdn.net/questions/7632450?answer=53669448
SOURCE:CSDN_ASK
ASK_ID:7632437
ANSWER_ID:53669446
TITLE:spark sql数据如何求交集?
ANSWER:

spark sql中可以使用except来获得两组数据的交集


SELECT * FROM student_1 
EXCEPT
SELECT * FROM student_2;

你如果是某一行中的某一列是个数组,把它展开成多行后再用上面这个方法一样可以得出交集,即explode +except +collect_list


当然,也可以直接用数组函数得到交集


img


参考


LINK:https://ask.csdn.net/questions/7632437?answer=53669446
SOURCE:CSDN_ASK
ASK_ID:7632420
ANSWER_ID:53669438
TITLE:SQL server语句问题
ANSWER:

基本概念要搞清楚,对于某一行记录中的某些字段进行变更,那叫更新,不叫插入,插入都是指的插入行。



selet * from 表 where bookid=? and id=?;

更新


update 表 set returntime=? ,returnphoto=? where  bookid=? and id=?;

LINK:https://ask.csdn.net/questions/7632420?answer=53669438
SOURCE:CSDN_ASK
ASK_ID:7632414
ANSWER_ID:53669437
TITLE:oracle left join子查询外加group by报错
ANSWER:

INFO_T 和PARAM_T 是表还是视图?这两个东西单独查会不会报错?
从你贴的这个sql上来看,是绝对没有语法问题的。
你执行报错,要么你原sql和贴出来的这个不一样,要么就是INFO_T 和PARAM_T这两个玩意中某一个是视图,而视图里sql的聚合group by 有问题


LINK:https://ask.csdn.net/questions/7632414?answer=53669437
SOURCE:CSDN_ASK
ASK_ID:7632401
ANSWER_ID:53669435
TITLE:请问是什么问题 为什么附加不了 之前还可以
ANSWER:

你确定这个路径下有mdf文件?


LINK:https://ask.csdn.net/questions/7632401?answer=53669435
SOURCE:CSDN_ASK
ASK_ID:7632389
ANSWER_ID:53669433
TITLE:安装MySQL时在lnitializing database出错。
ANSWER:

这个日志说,你可能碰到了个bug



This could be because you hit a bug



让你按照这个页面的指示进行问题排查


LINK:https://ask.csdn.net/questions/7632389?answer=53669433
SOURCE:CSDN_ASK
ASK_ID:7632360
ANSWER_ID:53669429
TITLE:关于数据库编码的提问
ANSWER:

从前端到后端到数据库,要求全部统一字符集,要么全gbk,要么全utf8


LINK:https://ask.csdn.net/questions/7632360?answer=53669429
SOURCE:CSDN_ASK
ASK_ID:7632336
ANSWER_ID:53669427
TITLE:通过设置变量实现将表中每个身份证号及身份证号重复数罗列出来,你有更好的办法吗?
ANSWER:

为什么要用变量?直接count不就出来了?


select sfzh,count(sfzh) sfzcf
FROM hccl.s_2022q_xj
group by sfzh

如果要去掉没重复的


select sfzh,count(sfzh) sfzcf
FROM hccl.s_2022q_xj
group by sfzh
having count(sfzh) >1

LINK:https://ask.csdn.net/questions/7632336?answer=53669427
SOURCE:CSDN_ASK
ASK_ID:7632313
ANSWER_ID:53669421
TITLE:navicate15无法打开postgresql中表的对象信息,且经常报错unknown function:pg_get_ruledef()是什么原因呢
ANSWER:

pg_get_ruledef这个函数是postgresql中都自带的一个函数,用于获取



重构针对规则的创建命令。(这是一个反编译的重构,而不是命令的原始文本。)



参考 http://postgres.cn/docs/14/functions-info.html


很明显,navicat针对postgresql来查看ddl时,调用了这个函数。


而你点击ddl,却报了错,这说明navicat没找到这个函数,请尝试切换管理员用户再试,另外请检查数据库安装的完整性,
还有,这个函数在目前官方文档的8.0到14版本都可以找得到,之前有没有就不清楚了。


LINK:https://ask.csdn.net/questions/7632313?answer=53669421
SOURCE:CSDN_ASK
ASK_ID:7632236
ANSWER_ID:53669204
TITLE:sql中用max取温度字段的最大值和最小值,结果发现最大值9度,而最小值10度
ANSWER:

按字符串比较的话,是从左至右去比较,9当然比1大。
如果你想用数字大小去比较,那么就得先把它转换成数字,这就要看你的数据库是哪种类型了,不同数据库转换方式有区别,但大多数数据库支持使用cast来进行转换。
比如


max(cast(temperature as decimal))

上面专家说的int类型肯定是不行的,温度当然会有小数。
另外,如果你这个温度里除了数字,还有其他符号或者文字的话,比如"℃",那么在转换类型前,还得把这些玩意去掉,比如


max(cast(replace(temperature,‘℃’) as decimal))

LINK:https://ask.csdn.net/questions/7632236?answer=53669204
SOURCE:CSDN_ASK
ASK_ID:7632220
ANSWER_ID:53669196
TITLE:像计算累加占比前80%的产品 应该怎么添加语句
ANSWER:

MYSQL8.0以上版本,使用开窗函数中的CUME_DIST,返回累计占比


select * from (
select cp.pid,
cume_dist() over( order by sum(cp.pricexl.sale_amount) desc) 累计占比
from 产品明细 cp left join 销量明细 xl
on xl.pid=cp.pid
group by cp.pid)
where 累计占比<=0.8

而且你这题和上一题都犯了个毛病,明明查询结果中不需要客户信息,产品明细和销量明细也不需要通过客户信息关联,为什么非得把客户明细带上去啊




为什么要加到你那个语句里去啊?你不是要查累计占比前80%的产品么,这个sql查出来就是了,如果你要同时显示单个占比,多查一个字段就好了


select * from (
select cp.pid,
sum(cp.price
xl.sale_amount) 销售金额,
sum(cp.pricexl.sale_amount) /(sum(sum(cp.pricexl.sale_amount)) over() ) 占比,
cume_dist() over( order by sum(cp.price*xl.sale_amount) desc) 累计占比
from 产品明细 cp left join 销量明细 xl
on xl.pid=cp.pid
group by cp.pid)
where 累计占比<=0.8

LINK:https://ask.csdn.net/questions/7632220?answer=53669196
SOURCE:CSDN_ASK
ASK_ID:7632196
ANSWER_ID:53669045
TITLE:java解析excel
ANSWER:

130是指的字符个数,不是字节个数,一个汉字在GBK字符集里占两个字节,在UTF8字符集里占三个字节,因此你这个字符串的总长度会超过字符个数,你只能去把这个字段加长了


img


根据我这个测试,你这字符集是GBK吧


LINK:https://ask.csdn.net/questions/7632196?answer=53669045
SOURCE:CSDN_ASK
ASK_ID:7632057
ANSWER_ID:53668965
TITLE:请教,帮我看看为什么sql在分组的时候会报错
ANSWER:

你先把totalmoney这一个列注释掉试试,
因为你这个里面使用了嵌套聚合,即聚合函数里套聚合函数,那么在两个聚合函数之间,如果有使用非聚合字段,比如你这个sql里的"total_money",则会提示不是group by 表达式 。你试试看把total_money也加到group by 后面,它就不会报错了,但是明显这不是你想要的结果。
所以,你要么使用开窗函数去取MIN( a.TYPE )及MAX(a.TYPE),要么就嵌套一个子查询,反正别聚合函数套聚合函数


LINK:https://ask.csdn.net/questions/7632057?answer=53668965
SOURCE:CSDN_ASK
ASK_ID:7632100
ANSWER_ID:53668930
TITLE:请问一下 我想求取单个金额占比总额大于10%的产品名称,该怎么写SQL呢
ANSWER:

是什么类型的数据库?数据库版本是多少?并请提供表结构,你这SQL明显有问题,没有group by ,也没使用开窗函数,也没使用子查询,这样是算不了占比的。占比先要算出个单独的汇总值




—只显示有销售的产品
select a.pid,a.x/b.x 占比 from
(select cp.pid,sum(cp.pricexl.sale_amount) x
from 销量明细 xl,产品明细 cp
where xl.pid=cp.pid
group by cp.pid) a,
(select sum(cp.price
xl.sale_amount) x
from 销量明细 xl,产品明细 cp
where xl.pid=cp.pid) b;

—所有产品都要显示
select a.pid,a.x/b.x 占比 from
(select cp.pid,sum(cp.pricexl.sale_amount) x
from 产品明细 cp left join 销量明细 xl
on xl.pid=cp.pid
group by cp.pid) a,
(select sum(cp.price
xl.sale_amount) x
from 销量明细 xl,产品明细 cp
where xl.pid=cp.pid) b;

—mysql8以上,先聚合再用开窗
select a.pid,x/sum(x) over() 占比 from
(select cp.pid,sum(cp.pricexl.sale_amount) x
from 产品明细 cp left join 销量明细 xl
on xl.pid=cp.pid
group by cp.pid) a;

—mysql8以上,聚合和开窗一起用
select cp.pid,sum(cp.price
xl.sale_amount) /
sum(sum(cp.price*xl.sale_amount) ) over() 占比
from 产品明细 cp left join 销量明细 xl
on xl.pid=cp.pid
group by cp.pid

至于要过滤出10%的,再包一层写个where条件就行了


LINK:https://ask.csdn.net/questions/7632100?answer=53668930
SOURCE:CSDN_ASK
ASK_ID:7631793
ANSWER_ID:53668503
TITLE:sql语句怎么将求和查询结果横向连接
ANSWER:

楼上专家的right join 有问题,这些月份中,并不能确定哪个月份的类型是全的,所以应该使用full join


select COALESCE(a.分类,b.分类) 分类,“10月”,“11月” from 
(select 分类,sum(访客数) as “10月” from search.搜索源
WHERE 来源名称 = “aaa”
and 日期 BETWEEN “2021-10-01” AND “2021-10-31”
group by 分类 ) a
full join
(select 分类,sum(访客数) as “11月” from search.搜索源
WHERE 来源名称 = “bbb”
and 日期 BETWEEN “2021-11-01” AND “2021-11-30”
group by 分类) b
on a.分类=b.分类;



mysql 的话,可以通过 left join …union … right join 来实现full join 的效果。
或者,如果你有一个完整的分类表的话,建议以那个完整的分类表做主表,去left join 另外这两个月份的数据


LINK:https://ask.csdn.net/questions/7631793?answer=53668503
SOURCE:CSDN_ASK
ASK_ID:7631851
ANSWER_ID:53668499
TITLE:mysql根据出生日期计算年龄并且插入到已有记录中
ANSWER:

这种数据库的插入一般都是指的插入行,就算只指定一个字段,它也是插入一整行,没有指定的字段就全为空。
对已有的行进行修改,这个叫更新,要用update命令。
楼上这专家的sql我咋没看明白,从同一行的一个字段更新到另一个字段,咋还用上子查询了呢?


update info_feedback f set fd_age=ROUND(DATEDIFF(CURDATE(), fd_birthday)/365.2422);

LINK:https://ask.csdn.net/questions/7631851?answer=53668499
SOURCE:CSDN_ASK
ASK_ID:7631861
ANSWER_ID:53668496
TITLE:SQL sever 多条件计数问题?
ANSWER:

问这种sql问题时,请提供建表sql及测试数据sql,方便回答者进行测试,要不然就会像上面专家那样写了个语法都不对的sql(中间少了where)


update 名单 as m set 迟到次数=(select count(1) from 考勤表 as k where  k.姓名=m.姓名  and k.是否迟到=‘迟到’)
where exists (select 1 from 考勤 as k where k.姓名=m.姓名 and k.是否迟到=‘迟到’)

LINK:https://ask.csdn.net/questions/7631861?answer=53668496
SOURCE:CSDN_ASK
ASK_ID:7631901
ANSWER_ID:53668494
TITLE:执行systemctl enable mysqld报错:Failed to enable unit: Unit file mysqld.service does not exist.
ANSWER:

mysql没安装或者没装好,启动当然会提示不存在了


LINK:https://ask.csdn.net/questions/7631901?answer=53668494
SOURCE:CSDN_ASK
ASK_ID:7631911
ANSWER_ID:53668493
TITLE:mysql赋值报错,可以解释一下吗
ANSWER:

你是不是在哪里复制了不完整的代码


grant all privileges on . to root@‘%’ identified by ‘123456’ with grant option;

LINK:https://ask.csdn.net/questions/7631911?answer=53668493
SOURCE:CSDN_ASK
ASK_ID:7631567
ANSWER_ID:53668361
TITLE:mac m1 怎么安装red hat8
ANSWER:

你下载系统镜像文件的时候,注意选择带"ARM"(或者"aarch")标识的版本进行下载,不要下带"x86"的


LINK:https://ask.csdn.net/questions/7631567?answer=53668361
SOURCE:CSDN_ASK
ASK_ID:7631455
ANSWER_ID:53668152
TITLE:Oracle 存储过程如何实现对表的更新
ANSWER:

用基于日志的物化视图就好了,可以实现针对变化数据的快速刷新。
如果是较新的版本,还可以使用实时物化视图




如果原表上没有可以用于增量识别的字段,比如单进程产生的序号、单进程产生的时间戳等(存在多进程同时更新数据时,无法准确捕获增量),光用存储过程是无法识别到数据变化的情况的。必须在变更表数据的时候有所记录。而且创建物化视图,你也可以让他不自动更新,而是让存储过程去执行刷新。何必非纠结于用什么方式呢?其实创建触发器记录日志,然后使用存储过程去读取日志来进行更新处理,这也是个方法。反正一点,无论使用什么方式,重点就是看有没有增量标识。


LINK:https://ask.csdn.net/questions/7631455?answer=53668152
SOURCE:CSDN_ASK
ASK_ID:7631476
ANSWER_ID:53668142
TITLE:mysql中不建立放假时间表的情况下使用sql查询两个日期之间的小时数并剔除其中的周六周日
ANSWER:

这个可以实现的,而且不是很复杂,用递归sql生成传入两个日期间的每一天,然后对星期六和星期日的天数进行统计,并从总天数里减去这个数,最后再乘以24小时即可。
mysql8.0版本以上可以使用递归sql


with RECURSIVE cte as (select cast(“2021-01-01” as datetime) d
union all
select date_add(d, interval 1 day) from cte where d<cast(“2021-01-31” as datetime))
select count(d)*24 hours from cte where dayofweek(d) not in (6,7)

img


LINK:https://ask.csdn.net/questions/7631476?answer=53668142
SOURCE:CSDN_ASK
ASK_ID:7631498
ANSWER_ID:53668123
TITLE:什么是触发器。入库,和出库操作是不是用到了触发器功能,如果没有用的话,请问用什么方式可以实现。
ANSWER:

触发器是当你执行某个命令时,系统自动连带执行的另一个或一组命令所构成的一个程序过程。触发器只是为了让程序代码更简单的一种方式,不用触发器一样可以实现同样的逻辑,就是相同的代码要写得到处都是了。
你说的入库出库,与触发器没有任何关系,直接写对应入库和出库的业务逻辑代码就是了


LINK:https://ask.csdn.net/questions/7631498?answer=53668123
SOURCE:CSDN_ASK
ASK_ID:7631491
ANSWER_ID:53668097
TITLE:oracle数据库修改某列值值中部分值前缀语句
ANSWER:

你这个不就是个简单的字符串拼接么?直接管道符拼一下就完事了,没看明白你问题难点在哪


update bd_custome set name=‘XD’||name where PK_ORG=‘0001A91000000000214E’;

LINK:https://ask.csdn.net/questions/7631491?answer=53668097
SOURCE:CSDN_ASK
ASK_ID:7631165
ANSWER_ID:53667583
TITLE:mysql非等值连接,为什么所有结果重复出现了一遍
ANSWER:

麻烦你把你的建表sql、数据生成sql,以及你执行的查询sql发出来,你就这么一张图,没人能查问题的


LINK:https://ask.csdn.net/questions/7631165?answer=53667583
SOURCE:CSDN_ASK
ASK_ID:7631284
ANSWER_ID:53667580
TITLE:Ubuntu下的Navicat
ANSWER:

因为你系统里少了对应的组件,安装一下就行了


sudo apt-get install libcurl4-openssl-dev

LINK:https://ask.csdn.net/questions/7631284?answer=53667580
SOURCE:CSDN_ASK
ASK_ID:7631224
ANSWER_ID:53667578
TITLE:mysql无法插入数据 mac
ANSWER:

你这是改了字符集是吧?
你把你第65行的那个操作,对gender这个字段也执行一次


LINK:https://ask.csdn.net/questions/7631224?answer=53667578
SOURCE:CSDN_ASK
ASK_ID:7631278
ANSWER_ID:53667574
TITLE:关于#mysql#的问题,如何解决?
ANSWER:

“每天的入住状态”、“指定期间内”
根据这题目描述,应该至少有个表里有个日期字段啊,你确定原题就只有这两个表而且还没日期字段?
不是每个房间在accommadation里都有记录,所以应该是room left join accommadation ,然后用accommadation中不为空的count数去除以count(1)
假设你这个数据已经是指定期间的汇总了,两个表的room_no都是唯一键,那么这个查询sql应该是


SELECT R.room_type,count(a.room_no)/count(r.room_no) 入住率
FROM room R left join accommodation A
on R.room_no = A.room_no
GROUP BY room_type

LINK:https://ask.csdn.net/questions/7631278?answer=53667574
SOURCE:CSDN_ASK
ASK_ID:7631377
ANSWER_ID:53667563
TITLE:如果实现 部分行标签 转置为列名
ANSWER:

最简单的方式,你最后这个sql稍微改下


select s.s_id,
sum(case when c_id =‘01’ then tmp.s_score end ) as chinese,
sum(case when c_id =‘02’ then tmp.s_score end ) as math,
sum(case when c_id =‘03’ then tmp.s_score end ) as english,
max(avg_score) as avg_score
from score s
group by s.s_id;

LINK:https://ask.csdn.net/questions/7631377?answer=53667563
SOURCE:CSDN_ASK
ASK_ID:7631245
ANSWER_ID:53667429
TITLE:汇总不同工作簿中的数据列表
ANSWER:

请提供相关截图及代码,你这问题描述完全看不懂你在用什么工具操作什么东西


LINK:https://ask.csdn.net/questions/7631245?answer=53667429
SOURCE:CSDN_ASK
ASK_ID:7631186
ANSWER_ID:53667356
TITLE:sql查询能否固定行数,无结果显示空
ANSWER:

你没说数据库类型和版本,我以oracle举例


select a.a,b.b
from (select a., 1 od
from test_table_a a
union all
select a.
, 2 od
from test_table_a a) a
left join (select b.*, row_number() over(partition by b.a order by b.b) od
from test_table_b b) b
on a.a = b.a
and a.od = b.od
;

img


这个开窗函数,有一部分数据库是不支持的。
其实关键点在于,你想得到的记录数是A表的翻倍,但翻倍后,关联条件就不是唯一的,因此要构造一个虚拟的列,让它能和a字段一起定位唯一行。同理,在B表里也要有一个与之相匹配的列,在这里用到了开窗函数产生一个序号


LINK:https://ask.csdn.net/questions/7631186?answer=53667356
SOURCE:CSDN_ASK
ASK_ID:7631164
ANSWER_ID:53667330
TITLE:这行代码换成for循环是怎么实现的呀
ANSWER:

直接换成for循环应该是这样的,


n = 5
nums=[]
for i in range(n):
nums.append([0] * n)
print(nums)

可以和你之前的代码对应 ,"[0] * n"是每次循环里要执行的,"for i in range(n)"是表示要循环执行多少次


LINK:https://ask.csdn.net/questions/7631164?answer=53667330
SOURCE:CSDN_ASK
ASK_ID:7631166
ANSWER_ID:53667324
TITLE:Python用的vscode,但是一直提示找不到文件
ANSWER:

你这个截图里没有任何报错呀,这个py也正常执行了,打印了5


LINK:https://ask.csdn.net/questions/7631166?answer=53667324
SOURCE:CSDN_ASK
ASK_ID:7631132
ANSWER_ID:53667319
TITLE:不知道如何理解该问题,请解答
ANSWER:

这个题目描述已经很清晰了,
其实就是一个表有两个字段,一个用户id,一个学科购买列表 ,列表的格式是 学科1,日期1,学科1,日期2,学科2,日期3…
也就是说一个学科会有多个不同日期的课程。
你就要写个sql,先把这个列表展开,得到一个三个字段的查询结果,即 用户id,学科,日期,然后再根据这个数据去做下面的3个题目。
但是第2题有点小问题,为什么他要把不同的课程合成一条记录来计数?如果购买英语的是200,购买思维的是201,是分别显示两条还是一条合并为200个再多一条思维1个呢?他如果没有这个括号里的"比如",那就好理解了,加了"比如"还不好理解


LINK:https://ask.csdn.net/questions/7631132?answer=53667319
SOURCE:CSDN_ASK
ASK_ID:7631119
ANSWER_ID:53667262
TITLE:springboot + JDBC 我想从数据库拿到我想要的值。我已经可以拿到全部值了,但是我只想获得其中的userpwd
ANSWER:

你直接登录进去数据库去查,会发现密码就是这个东西。
因为密码是已经加密了的啊,现在谁还会明文去存密码?


LINK:https://ask.csdn.net/questions/7631119?answer=53667262
SOURCE:CSDN_ASK
ASK_ID:7631106
ANSWER_ID:53667261
TITLE:Oracle数据库中怎么赋予一个用户创建另一个用户下表的权限
ANSWER:

oracle没有提供这种授权方式,但是有两个方法可以实现类似的效果,假设是A用户要在B用户下建表


  1. B用户创建一个存储过程,传入参数为一个sql文本,然后在过程里执行这个sql文本,注意过程要声明为AUTHID DEFINER,再授权这个过程给A用户执行权限,这样A就可以通过调用这个过程来在B用户下创建表了
  2. 授权A用户CREATE ANY TABLE 权限,然后创建一个DDL的触发器,识别到A用户创建的表不是A或者B用户下的对象时,报错

以上方案参考


LINK:https://ask.csdn.net/questions/7631106?answer=53667261
SOURCE:CSDN_ASK
ASK_ID:7630960
ANSWER_ID:53667031
TITLE:按照执行顺序聚合函数和窗口函数都在group by 后面为什么 不能在 GROUP BY子句中使用窗口函数可以使用聚合函数
ANSWER:

这与sql解析执行顺序有关,
"窗口函数"之所以叫窗口函数,是因为它产生了一个窗口,在窗口函数开始计算前,这个窗口中当前已经有除了窗口函数以外的所有字段值,group by 也已经执行完了,而且这个窗口的数据条数和你最终输出的条数是一致的,它基于这个窗口内的数据去进行各种计算,然后直接在这个窗口上将窗口函数计算的值放到对应的窗口函数字段,形成最终的输出数据,到此这个sql就已经执行完了(不含distinct 的情况下),因此无法再次group by


LINK:https://ask.csdn.net/questions/7630960?answer=53667031
SOURCE:CSDN_ASK
ASK_ID:7630938
ANSWER_ID:53667021
TITLE:python字典中关于键和值?
ANSWER:

你取这个列表的第一个值就好了


print(dep[‘kitch’][0])

img


LINK:https://ask.csdn.net/questions/7630938?answer=53667021
SOURCE:CSDN_ASK
ASK_ID:7630941
ANSWER_ID:53667017
TITLE:centos7 为什么进不到安装文件目录(语言-python)
ANSWER:

由于文件目录带空格,linux会以为后面的是参数,请使用英文的双引号把整个路径引起来


cd “/run/media/root/CentOS 7 x86_64”

LINK:https://ask.csdn.net/questions/7630941?answer=53667017
SOURCE:CSDN_ASK
ASK_ID:7630942
ANSWER_ID:53667008
TITLE:为什么x=(y=z+1)是非法语句?
ANSWER:

哪有这么写的。。。
就算按你想的y=z+1算好了,按照这个格式,x也不会等于y,你这个x是等于一个"y=z+1"的操作,不是任何值或者对象,它当然会报错了


LINK:https://ask.csdn.net/questions/7630942?answer=53667008
SOURCE:CSDN_ASK
ASK_ID:7630946
ANSWER_ID:53667004
TITLE:Kali和vmware tools
ANSWER:

这个报错已经告诉你要怎么做了


img


“请使用超级管理员重新运行”


其实就是在root下运行,或者前面加sudo运行


LINK:https://ask.csdn.net/questions/7630946?answer=53667004
SOURCE:CSDN_ASK
ASK_ID:7630921
ANSWER_ID:53666975
TITLE:python把图片中的字符转换成可编译的文件
ANSWER:

在图片中识别字符的这项技术叫OCR,支持这项技术的有很多软件,而且还有不少API服务支持解析。
但目前还没有能100%识别的OCR。
像python这种严格要求缩进的代码,少了一个空格都会报错,怎么可能直接转成可编译的文件


LINK:https://ask.csdn.net/questions/7630921?answer=53666975
SOURCE:CSDN_ASK
ASK_ID:7630934
ANSWER_ID:53666966
TITLE:复杂代码至Python
ANSWER:

外面复制好,到idle里鼠标右键粘贴


LINK:https://ask.csdn.net/questions/7630934?answer=53666966
SOURCE:CSDN_ASK
ASK_ID:7630897
ANSWER_ID:53666958
TITLE:VBA 使用”adodb“在SQL数据库中查询数据问题
ANSWER:

你可以取这个数据的行数,然后去判断这个行数是否等于0,如果等于0,则弹窗确认,确认里直接退出正在运行的代码


LINK:https://ask.csdn.net/questions/7630897?answer=53666958
SOURCE:CSDN_ASK
ASK_ID:7630788
ANSWER_ID:53666921
TITLE:可以讲一下这个怎么解决吗?
ANSWER:

你点报错提示的这个链接进去,他会告诉你有两个方案,而且网页下面有具体要怎么操作


img


  1. 更新你的vmware workstatition 的版本到15.5.6或以上(新版本添加了hyper-v的兼容)
  2. 关闭操作系统中的hyper-v功能。

img


推荐使用方案一


LINK:https://ask.csdn.net/questions/7630788?answer=53666921
SOURCE:CSDN_ASK
ASK_ID:7630791
ANSWER_ID:53666917
TITLE:vmware15 启动虚拟机电脑自动重启
ANSWER:

这说明你电脑已经有问题了,但目前无法确定是硬件问题还是操作系统的问题,得分析电脑的日志


LINK:https://ask.csdn.net/questions/7630791?answer=53666917
SOURCE:CSDN_ASK
ASK_ID:7630828
ANSWER_ID:53666916
TITLE:docker进入mongo容器报错
ANSWER:

此容器当前处于restarting(重启中),当然不能进去,下面这句英文已经告诉你原因了,让你等到容器处于running(运行)状态。
如果你这个容器很久都重启不起来,先尝试关闭容器,关闭不了就直接重启docker服务,但可能会有数据丢失的风险


LINK:https://ask.csdn.net/questions/7630828?answer=53666916
SOURCE:CSDN_ASK
ASK_ID:7630780
ANSWER_ID:53666842
TITLE:sql语句在sqlserver执行1秒,在应用程序执行慢几十秒
ANSWER:

你说在应用程序里需要10秒,是怎么计的时?从查询到数据展示到页面上?
这个时间可不仅仅是查询时间哦,建议在程序里每一步都打印日志记录执行开始时间和完成时间,再来单独看程序里这个sql查询执行了多久


LINK:https://ask.csdn.net/questions/7630780?answer=53666842
SOURCE:CSDN_ASK
ASK_ID:7630723
ANSWER_ID:53666836
TITLE:hive sql 填充数据的问题
ANSWER:

建议在excel里提前处理好。处理方法为


  1. 全选单元格
  2. ctrl+g 定位空值,此时会跳到左上角第一个空值
  3. 输入=上一个单元格,按ctrl+enter,此时数据即可自动填充完成
  4. 最后再复制选择性粘贴去掉公式即可

不在HIVE里做的原因是,你这个表里面没有排序id,无法定位上一行和下一行,如果有id的话,倒是可以通过开窗函数中的lag来查询上一个值


LINK:https://ask.csdn.net/questions/7630723?answer=53666836
SOURCE:CSDN_ASK
ASK_ID:7630658
ANSWER_ID:53666701
TITLE:dbeaver查看视图
ANSWER:

你想怎么编辑视图?navicat里也没有可视化的编辑视图的方式,点设计视图进去就一个创建视图的sql而已。在dbeaver里一样也是鼠标右键视图

img


LINK:https://ask.csdn.net/questions/7630658?answer=53666701
SOURCE:CSDN_ASK
ASK_ID:7630604
ANSWER_ID:53666687
TITLE:虚拟机Hadoop出现了问题打开不了了
ANSWER:

中间那句英文的意思是 请你尝试重装virtualbox


LINK:https://ask.csdn.net/questions/7630604?answer=53666687
SOURCE:CSDN_ASK
ASK_ID:7630628
ANSWER_ID:53666681
TITLE:未安装oracle数据库的Linux服务器运行Python程序,远程连接另一台服务器上的oracle库,出现cx_Oracle.DatabaseError: DPI-1047,如何解决
ANSWER:

你用cx_Oracle,必须要配置oracle客户端环境(注意这不是数据库环境),去官网下载一个吧,这个包不大


LINK:https://ask.csdn.net/questions/7630628?answer=53666681
SOURCE:CSDN_ASK
ASK_ID:7630667
ANSWER_ID:53666670
TITLE:hive sql 行列转置问题
ANSWER:

右边的6个列每2个列一组,加一个静态的职位字段,一共三个列,用union all拼接起来,再用字符串聚合把职位拼起来。这个方法应该是可用的。
至于用lateral view explode进行行列转换的方法,我晚上回去再研究下




弄出来了


—测试表
CREATE TABLE TEST_TABLE2 (gs varchar(1),
zybh int,zyxm varchar(10),
zgbh int,zgxm varchar(10),
jlbh int,jlxm varchar(10));
—测试数据
insert into TEST_TABLE2 (GS, ZYBH, ZYXM, ZGBH, ZGXM, JLBH, JLXM)
values (‘A’, 1, ‘张三’, 1, ‘张三’, 2, ‘李四’);
insert into TEST_TABLE2 (GS, ZYBH, ZYXM, ZGBH, ZGXM, JLBH, JLXM)
values (‘A’, 3, ‘王五’, 4, ‘赵六’, 3, ‘王五’);

—查询sql
select gs ,xcode ,rcode ,concat_ws(‘,’,collect_set(substr(rname,1,2))) as zw
from (
select gs, map(“ZYBH”, ZYBH
, “ZGBH”, ZGBH
, “JLBH”, JLBH) as rybh,map(“ZYXM”, ZYXM
, “ZGXM”, ZGXM
, “JLXM”, JLXM) as ryxm
from TEST_TABLE2 ) x
lateral view explode(rybh) exptbl1 as rname, rcode
lateral view explode(ryxm) exptbl1 as xname, xcode
where substr(rname,1,2)=substr(xname,1,2)
group by gs,xcode,rcode

实测截图


img


LINK:https://ask.csdn.net/questions/7630667?answer=53666670
SOURCE:CSDN_ASK
ASK_ID:7630683
ANSWER_ID:53666662
TITLE:非数据库字段随数据一起导出
ANSWER:

什么数据库?什么开发语言?你排序是用的什么方式?这些都不说怎么回答?既然要序号,直接sql查询里写个序号字段不就好了?


LINK:https://ask.csdn.net/questions/7630683?answer=53666662
SOURCE:CSDN_ASK
ASK_ID:7630685
ANSWER_ID:53666661
TITLE:将两个金额相除取百分比报错
ANSWER:

建议你把完整的sql打印出来,不一定就是这一段的问题


LINK:https://ask.csdn.net/questions/7630685?answer=53666661
SOURCE:CSDN_ASK
ASK_ID:7630295
ANSWER_ID:53666431
TITLE:这个代码到底哪里不对啊
ANSWER:

sql没截全,大概率是这里表关联条件写少了




你这4个表,才两个where条件,相当于分成了两组毫不相关的查询,sc和tc一组,course和room一组,其中一组关联的结果有5行,另一组一行,5乘以1得你最后输出的就是5行。至少要有第3个关联条件把你分开关联的这两组表关联起来


LINK:https://ask.csdn.net/questions/7630295?answer=53666431
SOURCE:CSDN_ASK
ASK_ID:7630279
ANSWER_ID:53666363
TITLE:Oracle如何实现字段加密后长度小于或等于原始数据长度?
ANSWER:

你原始数据长度为多少?如果原始数据很长的话,可以使用utl_compress压缩一次,然后用DBMS_CRYPTO加密,再转base64。
如果原始数据太短,这个方式就会导致加密后的数据变得更长了。
你问题中说涉及到纯数字、字符和汉字,这个并不是问题,因为汉字可以转unicode码变成符号和字母,解密的时候再转回去就是了。而且如果你把整个内容当成一个二进制数据的话,也无所谓里面的内容到底是字母还是汉字了。
原始数据短且又要求加密后的长度要变小,还有一点,汉字加密后得存raw或者blob了,不能再存varchar2或clob了


LINK:https://ask.csdn.net/questions/7630279?answer=53666363
SOURCE:CSDN_ASK
ASK_ID:7630247
ANSWER_ID:53666156
TITLE:求一个php中pdo连接数据库中charset的问题
ANSWER:

我想你在找的应该是这篇文章里的内容吧


既然你是作为客户端来连接,那么影响的字符集自然就有客户端和连接的字符集了


LINK:https://ask.csdn.net/questions/7630247?answer=53666156
SOURCE:CSDN_ASK
ASK_ID:7630246
ANSWER_ID:53666144
TITLE:excel怎么批量计算不同名称很多公式的和
ANSWER:

贴个样表吧,你这问题描述不是很清楚


LINK:https://ask.csdn.net/questions/7630246?answer=53666144
SOURCE:CSDN_ASK
ASK_ID:7629909
ANSWER_ID:53666131
TITLE:mysql导入几亿数据磁盘IO读写过大?
ANSWER:

把主键索引删了再导。
另外,直接用insert导大量数据本来就会慢


LINK:https://ask.csdn.net/questions/7629909?answer=53666131
SOURCE:CSDN_ASK
ASK_ID:7629936
ANSWER_ID:53666126
TITLE:请问一下ORACLE如果A列的值是相同的,但B列的值是不同的数据行中,怎么优先取B列指定的值
ANSWER:

题主这ABC只是举例,实际应该存在不同值,且无法直接用最大或者最小排序。
如果按照排序思路,其实可以这样写


order by case when 字段=‘A’ THEN 1 WHEN 字段=‘B’ THEN 2 ELSE 3 END ;

或者


order by decode( 字段,‘A’ , 1 ,‘B’ , 2 , 3 ) ;

然后使用fetch first 1 row only 取第一行即可,如果是12c以下的版本,就用开窗函数来排序再取排序为第一的


同理,使用decode或者case when 以后,就可以使用max/min来获取对应的值了,只是还得转换回去


LINK:https://ask.csdn.net/questions/7629936?answer=53666126
SOURCE:CSDN_ASK
ASK_ID:7629977
ANSWER_ID:53666111
TITLE:sqlldr新增首列默认值
ANSWER:

ctl文件里定义的字段顺序,是解析你数据文件的顺序,不是数据库中字段的顺序。你数据文件里没这个字段,当然这个字段就不能放在ctl文件的最前面,只能放在最后面


LINK:https://ask.csdn.net/questions/7629977?answer=53666111
SOURCE:CSDN_ASK
ASK_ID:7629993
ANSWER_ID:53666107
TITLE:your MySQL server version for the right syntax to use near 'where) from 表 where 条件
ANSWER:

根据上面的讨论,看上去其实你也不知道完整的sql是什么,因为你是用工具自动产生的sql去查的,建议跟踪数据库日志,看看完整的sql到底是啥样的,然后去排查工具的使用方法有什么问题


LINK:https://ask.csdn.net/questions/7629993?answer=53666107
SOURCE:CSDN_ASK
ASK_ID:7630085
ANSWER_ID:53666086
TITLE:Oracle 想问一下这种情况正则表达式应该如何编写
ANSWER:

你题目没有提供关键信息,两个"以下"的下面都没有东西,请补充完整


LINK:https://ask.csdn.net/questions/7630085?answer=53666086
SOURCE:CSDN_ASK
ASK_ID:7630102
ANSWER_ID:53666081
TITLE:SQL触发器中insert触发器查询到数据,写入变成了’0’
ANSWER:

你去找找执行insert im_stock_serial这个表的程序,看看当时插入的到底是什么。因为不排除它是先插入的0,再去更新成非0的情况。你触发器只监视了insert ,没有管update


LINK:https://ask.csdn.net/questions/7630102?answer=53666081
SOURCE:CSDN_ASK
ASK_ID:7630160
ANSWER_ID:53666075
TITLE:数据合并,在进行数据透视
ANSWER:

你得举个数据的例子,处理前后的数据分别长什么样,并说明使用的数据库类型、数据库版本,可以使用的相关工具等等,要不然这题没法答。
数据合并这就是最基本的操作了,数据透视在excel里也是一步操作,用sql的话就使用pivot,但有些数据库不支持


LINK:https://ask.csdn.net/questions/7630160?answer=53666075
SOURCE:CSDN_ASK
ASK_ID:7630166
ANSWER_ID:53666057
TITLE:关于#SQL#的问题,按年龄分开统计有什么好的方法?
ANSWER:

你最终要的输出数据格式长啥样?
如果是每一个年龄一行,那么像上面的,group by 这个年龄字段就好了,这是最基本的聚合函数使用方法。
但你如果是要年龄段统计,比如0-3岁一行,4-6岁一行,那么就要使用case when了


LINK:https://ask.csdn.net/questions/7630166?answer=53666057
SOURCE:CSDN_ASK
ASK_ID:7630019
ANSWER_ID:53666051
TITLE:oracle12c存入的表数据存在乱码情况,各项编码配置都已是utf-8,请问是什么情况?
ANSWER:

不是改UTF8就解决乱码了,重要的是字符集环境和数据要匹配,你先试下查询的时候转码,看看能不能解析出来,看看这个数据的字符集到底是个啥


select CONVERT(字段名, ‘ZHS16GBK’, ‘AL32UTF8’) from;
select CONVERT(字段名, ‘AL32UTF8’, ‘ZHS16GBK’) from;



查一下这个,把其中一行的数据发出来,我分析下看看是什么字符集


select utl_raw.cast_to_raw(字段名) from 表名

LINK:https://ask.csdn.net/questions/7630019?answer=53666051
SOURCE:CSDN_ASK
ASK_ID:751537
ANSWER_ID:53666043
TITLE:大数据量Mysql查询后经过循环使用python分片
ANSWER:

三年前的问题。。。
看上去是一个数据分页的同时还要过滤的问题。
一般来说,数据量比较大的话,不建议查到应用内存里再进行过滤,应该在sql层面就直接把数据过滤掉,如果一个sql去过滤速度慢,那就分多个sql来过滤,必要时可以借用临时表。


LINK:https://ask.csdn.net/questions/751537?answer=53666043
SOURCE:CSDN_ASK
ASK_ID:7629867
ANSWER_ID:53665423
TITLE:sql sever查询按时就餐率
ANSWER:

把你建表sql和测试数据的sql发出来,并说明你查询结果长什么样,查询结果中每个字段的计算公式


LINK:https://ask.csdn.net/questions/7629867?answer=53665423
SOURCE:CSDN_ASK
ASK_ID:7629685
ANSWER_ID:53665387
TITLE:在触发器中用游标执行存储过程,发生重复执行的情况
ANSWER:

如果我没看错的话,你这个触发器里写了两次


FETCH NEXT FROM id_list INTO @dhid

LINK:https://ask.csdn.net/questions/7629685?answer=53665387
SOURCE:CSDN_ASK
ASK_ID:7629807
ANSWER_ID:53665379
TITLE:如何判断Sqlite数据库某一列中是否含有特定的内容
ANSWER:

你这个问题是想问数据库什么查还是问C#代码怎么写?


由于你选的是大数据频道问答区,所以只能给出以下建议。
写sql查


select count(1) from 表名 where date=‘20211111’

查出来后,判断这个值是否大于0.


至于c#怎么查数据库以及怎么赋值,这个随便搜搜都有例子


LINK:https://ask.csdn.net/questions/7629807?answer=53665379
SOURCE:CSDN_ASK
ASK_ID:7629746
ANSWER_ID:53665373
TITLE:access怎么用得到这个呀
ANSWER:

楼上说得对,这玩意要用VBA编程,
你在access里设计一个窗体,加一个框框和一个按钮进去,把代码放到这个按钮的事件里去就是这玩意


LINK:https://ask.csdn.net/questions/7629746?answer=53665373
SOURCE:CSDN_ASK
ASK_ID:7629383
ANSWER_ID:53665166
TITLE:dbms_output.put_line只能在存储过程中使用吗?
ANSWER:

dbms_output.put_line本身就是个procedure,不带return,所以不能在sql中使用,只能在plsql块中使用


LINK:https://ask.csdn.net/questions/7629383?answer=53665166
SOURCE:CSDN_ASK
ASK_ID:7629483
ANSWER_ID:53665155
TITLE:关于mysql触发器问题
ANSWER:

表上控制了你这个字段不能为空,那为啥你硬是要塞个空值进去呢?这不违背逻辑了么?不是应该去看这里为什么会传空值进来么?
如果这个字段为空不影响程序和业务逻辑,那你把表改了不就好了?


LINK:https://ask.csdn.net/questions/7629483?answer=53665155
SOURCE:CSDN_ASK
ASK_ID:7629492
ANSWER_ID:53665152
TITLE:来看看我的问题些,哎。
ANSWER:

你这是面试题吧,如果不会的话,一条一条网上搜呀,都是些基础知识,又不是什么疑难问题。如果这些都不会,那就回炉重造吧


LINK:https://ask.csdn.net/questions/7629492?answer=53665152
SOURCE:CSDN_ASK
ASK_ID:7629544
ANSWER_ID:53665149
TITLE:给出多个区间,sql怎么判断字段值是否满足参数列表的其中之一?
ANSWER:

最简单通用的方法还是动态拼接条件。
当然,直接把这个参数传给数据库,让数据库去判断也是可以的,不过要写个返回类型为布尔型的函数,这个函数传入字段值和你的参数列表,在函数里去判断对应的字段值是否符合你列表中的任意一个区间,有符合的返回真,没有符合的返回假


select * fromwhere 函数名称(字段,参数列表)

LINK:https://ask.csdn.net/questions/7629544?answer=53665149
SOURCE:CSDN_ASK
ASK_ID:7629613
ANSWER_ID:53665133
TITLE:如何设置触发器删除或修改某个字段
ANSWER:

楼上"不太完美的程序猿"已给出正确代码


LINK:https://ask.csdn.net/questions/7629613?answer=53665133
SOURCE:CSDN_ASK
ASK_ID:7629611
ANSWER_ID:53665130
TITLE:You can’t specify target table ‘表’ for update in FROM clause
ANSWER:

mysql不能在查自己的时候同时更新自己,再包一层就好了,修改后的sql,楼上"倚竹醉酒剑轻吟 "已经给了,我就不贴了


LINK:https://ask.csdn.net/questions/7629611?answer=53665130
SOURCE:CSDN_ASK
ASK_ID:7629627
ANSWER_ID:53665120
TITLE:怎么找出读库被限制查询速度的证据哇?
ANSWER:

生产库对应的实时读库本来就不会有很高的性能,慢当然不是问题。
但除了硬件配置以外,的确还有一些手段可以让查询速度变慢,比如调低并行数,这样你带并行的sql就可能会变得很慢了。
运行慢这个证据其实很容易拿到,就是同一个sql,在生产库和读库分别运行,比较查询出结果的时间,如果读库慢,让IT部门给出慢的解释


LINK:https://ask.csdn.net/questions/7629627?answer=53665120
SOURCE:CSDN_ASK
ASK_ID:7629387
ANSWER_ID:53665109
TITLE:mysql数据库配置环境完成还是不能初始化
ANSWER:

对照下这篇,看哪步不一样


LINK:https://ask.csdn.net/questions/7629387?answer=53665109
SOURCE:CSDN_ASK
ASK_ID:7629314
ANSWER_ID:53664441
TITLE:windows环境,跑200G不到的数据,如何实现高效运作?
ANSWER:

数据初始化的时候,表上先不要加索引,等数据导完再加索引。
另外,不要逐行insert,直接用mysql的load data。
你看到磁盘占用100%,那不一定是写入占用,可能是查询占用


LINK:https://ask.csdn.net/questions/7629314?answer=53664441
SOURCE:CSDN_ASK
ASK_ID:7629287
ANSWER_ID:53664439
TITLE:Sql,需要取a表中每天作品的pv数据,jion联合查找主要是为了区分作品制作平台,不知道哪里出了问题,哪位有时间可以帮我看下么~
ANSWER:

你先说遇到什么问题了呀?


LINK:https://ask.csdn.net/questions/7629287?answer=53664439
SOURCE:CSDN_ASK
ASK_ID:7628969
ANSWER_ID:53664266
TITLE:决策报表中两个报表快的联动
ANSWER:

用的啥工具都不说。建议去翻下你所使用的工具的官方教程


LINK:https://ask.csdn.net/questions/7628969?answer=53664266
SOURCE:CSDN_ASK
ASK_ID:7629046
ANSWER_ID:53664265
TITLE:友友们,这种情况应该怎么处理。
ANSWER:

这报错不是已经告诉你哪里有问题了么?


img


LINK:https://ask.csdn.net/questions/7629046?answer=53664265
SOURCE:CSDN_ASK
ASK_ID:7629048
ANSWER_ID:53664264
TITLE:用PyODBC连接excel数据库使用sum over partition by的语法报错
ANSWER:

excel数据库怎么可能支持这种高级函数,就连mysql也是到8.0才开始支持的。excel数据库只能用最原始最基本的sql语法,像这分组求和只能先求和作为子查询再去关联了


LINK:https://ask.csdn.net/questions/7629048?answer=53664264
SOURCE:CSDN_ASK
ASK_ID:7629080
ANSWER_ID:53664261
TITLE:excel中特殊字符导入数据库不识别
ANSWER:

楼上是不是搞错了,UTF-8也是支持法语的,中文字符集应该是GBK。
所以第一步,先检查你数据库的字符集是不是UTF-8,如果是,那么存进去应该是不会乱码的,如果乱码,说明你导入的工具没有设置好字符集。
如果你数据库是GBK的字符集,那么你就只能把这个字符在外面转成unicode编码存入数据库了,取出来的时候再转回来


LINK:https://ask.csdn.net/questions/7629080?answer=53664261
SOURCE:CSDN_ASK
ASK_ID:7628956
ANSWER_ID:53664008
TITLE:sql语句根据编码规则查出统一级别层级的数据
ANSWER:

你最后要查出来的数据格式是啥样的?请举例说明
然后请说明你的数据库类型及版本


LINK:https://ask.csdn.net/questions/7628956?answer=53664008
SOURCE:CSDN_ASK
ASK_ID:7628966
ANSWER_ID:53664005
TITLE:一年内连续三天过户的车辆怎么求
ANSWER:

请说明数据库类型和版本。
这明显要用递归sql或者写过程循环,因为这是要求任意连续三天,也就是说开始日期并不确定,需要把这一年的每一天作为开始时间全部遍历一次。
另外,你这个问题其实和下面这个问题其实差不多,我已经给出了sqlserver版本的sql


LINK:https://ask.csdn.net/questions/7628966?answer=53664005
SOURCE:CSDN_ASK
ASK_ID:7628604
ANSWER_ID:53663814
TITLE:查询学生成绩表中700分一下总分最高的学生,怎么用嵌套查询查出
ANSWER:

楼上这个专家的sql错的地方太多了。
最直白的写法,先用having限制数据范围,然后取max得到检索条件,再去查原表就行了


select a., b.
from 学生信息表 a, 班级信息表 b
where a.bjid = b.bjid
and a.stid in
(select stid
from 考试成绩表
group by stid
having sum(chengji) = (select max(sum(chengji))
from 考试成绩表
group by stid
having sum(chengji) < 700));

但特么谁这么写我就跟谁急。
如果使用开窗函数,可以让这个变得简单,由于不清楚你的oracle版本,我只能写个老版本能用的,如果是新版本会更简单,新版本里可以多重聚合


select *
from (select a.stid,
a.stname,
a.stsex,
a.stage,
b.bname,
rank() over(order by chengji desc) rk
from (select stid, sum(chengji) chengji
from 考试成绩表
group by stid
having sum(chengji) < 700) c)
where rk = 1;

然后,在12c以上,甚至都不需要使用嵌套


select a.stid,
max(a.stname) stname,
max(a.stsex) stsex,
max(a.stage) stage,
max(b.bname) bname,
sum(c.chengji) cj
from 学生信息表 a, 班级信息表 b, 考试成绩表 c
where a.bjid = b.bjid
and a.stid = c.stid
group by a.stid
having sum(c.chengji) < 700
order by 6 desc
fetch first 1 row only;

LINK:https://ask.csdn.net/questions/7628604?answer=53663814
SOURCE:CSDN_ASK
ASK_ID:7628609
ANSWER_ID:53663796
TITLE:Endnote 12031错误怎么解决?
ANSWER:

服务器连接被重置,
这个一般是网络问题,请检查网络连接设置以及防火墙配置


LINK:https://ask.csdn.net/questions/7628609?answer=53663796
SOURCE:CSDN_ASK
ASK_ID:7628636
ANSWER_ID:53663793
TITLE:MySQL的中间表、临时表、虚拟表都是什么意思?
ANSWER:

这些名词其实是约定俗成的几个非标准说法,在不同的场景下其实有不同的含义,无法给定一个完整的标准定义。
在数据库的标准名词定义里,有"临时表"这个对象,但是实际上,在开发过程中,也有临时使用的非"临时表",也被叫做"临时表"。
像中间表,顾名思义既不是开始表也不是结束表,是处理过程中产生的数据所存放的表,但某些场景下,中间表也可以使用"临时表"。
在简单描述程序逻辑时,可以用这几个词,但是讨论实际代码开发时,应该尽量避免有歧义的说法。
因此,与其过分去追求其标准定义,不如实际上手,在开发中去理解。


LINK:https://ask.csdn.net/questions/7628636?answer=53663793
SOURCE:CSDN_ASK
ASK_ID:7628649
ANSWER_ID:53663785
TITLE:MySQL8.0.26安装
ANSWER:

使用管理员方式打开cmd,粘贴下列命令并回车确定


reg delete “HKCU\SOFTWARE\Classes\Wow6432Node\CLSID{B54F3741-5B07-11CF-A4B0-00AA004A55E8}” /f

然后继续在cmd窗口中输入下列命令并回车确定


regsvr32 vbscript.dll

接下来再尝试安装mysql


本方案来自


LINK:https://ask.csdn.net/questions/7628649?answer=53663785
SOURCE:CSDN_ASK
ASK_ID:7628673
ANSWER_ID:53663781
TITLE:Sql server 2019 数据库的累计大小将超出每 数据库 为 10240 MB 的许可限制值
ANSWER:

把许可协议修改成专业版或者开发版。
另外,有个网友的这个方案也可以参考一下


LINK:https://ask.csdn.net/questions/7628673?answer=53663781
SOURCE:CSDN_ASK
ASK_ID:7628756
ANSWER_ID:53663777
TITLE:sql里如何统计一段文章中输入了多少个汉字、英文单词、字母、数字和符号。
ANSWER:

先说数据库类型,以及用什么工具。
用sql识别单个字符还能理解,直接判断对应字符的unicode编码就行了。
但你这还要识别英文单词个数?单纯从数据库里,谁知道那串字母是英文单词还是汉语拼音?这得上AI了


LINK:https://ask.csdn.net/questions/7628756?answer=53663777
SOURCE:CSDN_ASK
ASK_ID:7628765
ANSWER_ID:53663774
TITLE:正则表达式:oracle数据库中表名统计,存在备份末尾为下划线加数字的表名,例:(_01),如何去掉?
ANSWER:

oracle里使用正则表达式请使用对应的正则函数


select * from dba_tables h where  not  regexp_like(table_name,‘_[0-9]+’);

LINK:https://ask.csdn.net/questions/7628765?answer=53663774
SOURCE:CSDN_ASK
ASK_ID:7628573
ANSWER_ID:53663321
TITLE:学海无涯如何从中调用学过的知识
ANSWER:

多思考、多用。
知识必须要经常用,并且经常思考、归纳总结各项知识的联系,才能越用越顺


LINK:https://ask.csdn.net/questions/7628573?answer=53663321
SOURCE:CSDN_ASK
ASK_ID:7628506
ANSWER_ID:53663260
TITLE:利用cmd无法退出mysql
ANSWER:

退出mysql, 请输入


<span class=“hljs-selector-tag”>q

可以输入help;查看帮助


img


LINK:https://ask.csdn.net/questions/7628506?answer=53663260
SOURCE:CSDN_ASK
ASK_ID:7628133
ANSWER_ID:53663169
TITLE:全量和增量时间点关联
ANSWER:

你这明显要改跑批的程序啊,内部没开发人员么?软件服务提供商呢?


LINK:https://ask.csdn.net/questions/7628133?answer=53663169
SOURCE:CSDN_ASK
ASK_ID:7628149
ANSWER_ID:53663165
TITLE:外网 ip 和 localhost 连接本服务器数据库 速度一样吗
ANSWER:

你这个指的是同一台机,在连接本地数据库的时候,使用这个数据库的外网ip和localhost的速度区别吧?
这个问题不一定就是外网的会慢,主要是看两者之间的网络经过了几个节点。
如果你的外网ip是直接暴露的本机,而非端口转发或者路由映射,那么你使用本机的外网ip和localhost没有任何区别。
如果是局域网内路由转发,然后局域网带宽高的话,两者区别也不大,因为虽然你用外网ip,但它实际上没出外网就找到你的设备了。
但是,如果需要走到外网服务才能再指向回来的话,那速度就与你的外网带宽有关了


LINK:https://ask.csdn.net/questions/7628149?answer=53663165
SOURCE:CSDN_ASK
ASK_ID:7628152
ANSWER_ID:53663152
TITLE:为什么数据库日期格式格式化之后少了一天?
ANSWER:

时区不一样,你上面是东八区,下面是默认时区


LINK:https://ask.csdn.net/questions/7628152?answer=53663152
SOURCE:CSDN_ASK
ASK_ID:7628170
ANSWER_ID:53663151
TITLE:MySQL跳过密码登录失效
ANSWER:

img


这个不是报错了么,找不到数据目录,数据目录初始化失败


LINK:https://ask.csdn.net/questions/7628170?answer=53663151
SOURCE:CSDN_ASK
ASK_ID:7628298
ANSWER_ID:53663137
TITLE:MySQL 查询加引号问题
ANSWER:

你数据库版本是多少?我用最新版mariadb测试没有复现你这个场景


img


如果是老版本的mysql,会有精度丢失的问题


img


LINK:https://ask.csdn.net/questions/7628298?answer=53663137
SOURCE:CSDN_ASK
ASK_ID:7628311
ANSWER_ID:53663123
TITLE:求一个sql中查询一段时间内缺失的哪些天
ANSWER:

什么类型的数据库?数据库版本是多少?
你这个要使用到递归sql生成一个完整的日期,但不同的数据库递归sql语法有点不一样,而且有的老数据库版本还不支持


with cte as(select CONVERT(datetime, ‘2021-12-01’, 120) d
union all
select d+1 from cte where d<=CONVERT(datetime, ‘2022-01-01’, 120))
select d from cte

img


然后再去判断你的数据是否exists于这个日期中就行了


LINK:https://ask.csdn.net/questions/7628311?answer=53663123
SOURCE:CSDN_ASK
ASK_ID:7628362
ANSWER_ID:53663102
TITLE:请问这个SQL怎么写
ANSWER:
select a.planNumber,a.totalqty,c.qty,
case when c.qty=0 then ‘未下单’
when qty<totalqty then ‘部分下单’
when qty=totalqty then ‘全部下单’
else ‘未知’ end
from a
left join
(select b.planNumber,sum(b.qty) qty from sale_order b where b.planNumber <> ‘’ GROUP BY b.planNumber) c
on a.planNumber=c.planNumber

LINK:https://ask.csdn.net/questions/7628362?answer=53663102
SOURCE:CSDN_ASK
ASK_ID:7627882
ANSWER_ID:53662298
TITLE:提问,mysql workbanch连接遇到这个问题怎么解决?
ANSWER:

你配置登录信息的那个地方,把ssl改成不用就行了


img


这里改设置

img


LINK:https://ask.csdn.net/questions/7627882?answer=53662298
SOURCE:CSDN_ASK
ASK_ID:7627847
ANSWER_ID:53662251
TITLE:用CMD加密文件夹失败
ANSWER:

“MD E:\JM…” 这个命令不是创建文件,而是创建一个名称叫"JM…"的文件夹,
文件夹是不能直接执行的,你如果要进入这个目录,应该输入


cd “E:\JM…”

我刚刚测试了一把,这个漏洞在win10上已经没有了,执行 “MD E:\JM…“生成的文件夹实际上是"JM”,没有”…"了,达不到你想要的加密效果,如果你要进入这个文件夹,直接cd JM就行了


LINK:https://ask.csdn.net/questions/7627847?answer=53662251
SOURCE:CSDN_ASK
ASK_ID:7627802
ANSWER_ID:53662249
TITLE:java怎么获取当前年份的前两个月前日期(年份保持不变)
ANSWER:

用greatest函数取你取出来的这个日期和当前的一月一日之间的最大值即可


SELECT
TO_CHAR(greatest( TRUNC( ADD_MONTHS( TO_DATE( ‘2022-01-10’, ‘yyyy-MM-dd’ ), - 2 ), ‘mm’ ),trunc(date‘2022-01-10’,‘yyyy’)), ‘yyyy-MM-dd’ )
FROM
dual

LINK:https://ask.csdn.net/questions/7627802?answer=53662249
SOURCE:CSDN_ASK
ASK_ID:7627823
ANSWER_ID:53662246
TITLE:引发类型为System.OutOfMemoryException的异常
ANSWER:

OutOfMemory就是内存不够,溢出了,请检查你机器的内存大小,以及程序中是否有占用大量内存未回收的情况


LINK:https://ask.csdn.net/questions/7627823?answer=53662246
SOURCE:CSDN_ASK
ASK_ID:7627837
ANSWER_ID:53662245
TITLE:sql链接oracle.错误7303,敢问谁能解惑!
ANSWER:

这个报错已经很明显了



ORA-12154:TNS:无法解析指定的连接标识符。



请检查你的tns名称是否配置正确


LINK:https://ask.csdn.net/questions/7627837?answer=53662245
SOURCE:CSDN_ASK
ASK_ID:7627710
ANSWER_ID:53662243
TITLE:sql server数据库,在一个月中,相同的ID,连续三天数据。这个要怎么写?
ANSWER:

先用递归sql准备个完整的日期列,然后取出机器和日期去重,外关联,再用开窗函数,按照完整日期列排序,根据机器分组,以当前行的上一行到下一行作为移动窗口,统计移动窗口内的非空值个数,然后取出统计值为3的记录,以此作为查询条件再去查源数据


–测试表
CREATE TABLE test_table
([MachineID] INT, [CrtorDT] datetime,[Qty] int)
;
–测试数据
INSERT INTO test_table
([MachineID], [CrtorDT],[Qty])
VALUES
(8, CONVERT(datetime, ‘2021-12-14 14:28:31’, 20),87),
(8, CONVERT(datetime,‘2021-12-14 13:28:31’, 20),87),
(8, CONVERT(datetime,‘2021-12-15 13:28:31’, 20),87),
(8, CONVERT(datetime,‘2021-12-16 13:28:31’, 20),87),
(10,CONVERT(datetime, ‘2021-12-14 13:28:31’, 20),122)
;

–查询sql
with cte as(select CONVERT(datetime, ‘2021-12-01’, 120) d
union all
select d+1 from cte where d<=CONVERT(datetime, ‘2022-01-01’, 120)),
c as ( select d d from cte)
, t as (
select distinct MachineID,
convert(datetime,convert(varchar(100),CrtorDT,112),20) CrtorDT,
Qty from test_table )
,
ct as (
select c.,t.,count(t.CrtorDT) over(partition by MachineID order by c.d rows between 1 preceding and 1 following ) x from c left join t on c.d=t.CrtorDT)
select distinct tt.* from ct , test_table tt where x=3 and ct.MachineID=tt.MachineID and tt.CrtorDT >=ct.CrtorDT-1 and tt.CrtorDT<ct.CrtorDT+2

以下为实测截图

img


LINK:https://ask.csdn.net/questions/7627710?answer=53662243
SOURCE:CSDN_ASK
ASK_ID:7627803
ANSWER_ID:53662162
TITLE:mimiciv数据库根据相同ID提取不同表格中的数据
ANSWER:

字段前面要加上表名或者表的别名,否则你两个表有同名字段时,它不知道你是想用哪个


select * from a, b where a.id=b.id and a.id=1;

select * from table_1 a,table_2 b where a.id=b.id and a.id=1;

LINK:https://ask.csdn.net/questions/7627803?answer=53662162
SOURCE:CSDN_ASK
ASK_ID:7627778
ANSWER_ID:53662153
TITLE:换了手机,现在要将旧手机的资料传到新手机上
ANSWER:

各大手机品牌基本都有对应的换机app,只要在老手机里安装好,启动,连接上新手机,就会自动传数据到新手机了。如果是同品牌手机,甚至连你的桌面图标排列和系统设置都能传过去


LINK:https://ask.csdn.net/questions/7627778?answer=53662153
SOURCE:CSDN_ASK
ASK_ID:7627736
ANSWER_ID:53662071
TITLE:oracle inner join 链接 多对多 效率优化
ANSWER:

这哪里多对多了?你的prod里,难道prod_id不是主键?会有重复值?
在oracle里,极少使用join去关联表,因为oracle的CBO会进行自动优化,除非是要做full join。
像你这个例子,在oracle中的常规sql写法应该为


select a.prod_id,a.prod_name,b.price,b.data_date from prod a , prod_price b where a.prod_id = b.prod_id;

如果这个sql效率慢,那就说明你这两个表上的索引没建或者建得不对,另外,还要查看下prod_price是否存在高水位的情况


LINK:https://ask.csdn.net/questions/7627736?answer=53662071
SOURCE:CSDN_ASK
ASK_ID:7627653
ANSWER_ID:53661852
TITLE:各位专家,想问一个问题,我的navicat premium 创建数据库设置utf8字符集之后默认给我改成utf8mb3了,怎么改都是utf8mb3
ANSWER:

mysql中的utf8,就是最大3字节的unicode字符,也就是mysql中的utf8mb3,显示utf8mb3才是真正表示以前的utf8,新的utf8会显示成utf8mb4,只显示utf8会引起歧义,现在在mysql里面不会有"utf8"这个字符集了,取而代之的是"utf8mb3"和"utf8mb4"


LINK:https://ask.csdn.net/questions/7627653?answer=53661852
SOURCE:CSDN_ASK
ASK_ID:7627627
ANSWER_ID:53661848
TITLE:PostgreSQL连接不上数据库?
ANSWER:

你这安装的路径和命令的路径不一样啊,文件浏览器里的中间有个program files,但是cmd里面没有


LINK:https://ask.csdn.net/questions/7627627?answer=53661848
SOURCE:CSDN_ASK
ASK_ID:7627607
ANSWER_ID:53661846
TITLE:mysql 安装出现红叉,求解决
ANSWER:

本来这个安装包会自动帮你安装相关依赖,但看上去是安装失败了,所以你得手动安装vc++2019


LINK:https://ask.csdn.net/questions/7627607?answer=53661846
SOURCE:CSDN_ASK
ASK_ID:7627535
ANSWER_ID:53661841
TITLE:请问这个意思是只支持sql server数据库吗?
ANSWER:

那个只是针对sql server提供了SDE而已,另外,这个ARCGIS是收费的,可以尝试使用开源的postgis,这个对postgresql的兼容性更好,因为它就是基于postgresql的扩展


LINK:https://ask.csdn.net/questions/7627535?answer=53661841
SOURCE:CSDN_ASK
ASK_ID:7627500
ANSWER_ID:53661824
TITLE:PL/SQL连接oracle数据库后,数据正常显示,但是查看字段注释乱码
ANSWER:

查下字段注释的静态视图


 select * from all_col_comments h where h.table_name=‘表名’;

如果你这里也显示问号,那么有两种可能:
一是你这个注释当时写入的字符集和数据库当前不一致;
二是当时创建注释的时候就已经是问号了


LINK:https://ask.csdn.net/questions/7627500?answer=53661824
SOURCE:CSDN_ASK
ASK_ID:7627465
ANSWER_ID:53661809
TITLE:大数据如何进行数据阶段的验证
ANSWER:

对于源端和目标端,分别对所有行列的数据用同一种hash算法得出一个值,比如计算md5,再比较这个值是否一致,这是在验证阶段最减少数据输出的方式了


LINK:https://ask.csdn.net/questions/7627465?answer=53661809
SOURCE:CSDN_ASK
ASK_ID:7627461
ANSWER_ID:53661804
TITLE:MySQL有一条空记录
ANSWER:

你建个空表去查,也是这样的效果,无法根据截图所示来判断是空行还是无数据。建议你把这个sql改成count,看看是1行还是0行


LINK:https://ask.csdn.net/questions/7627461?answer=53661804
SOURCE:CSDN_ASK
ASK_ID:7627365
ANSWER_ID:53661286
TITLE:关于#华为#的问题,请各位专家解答!
ANSWER:

你想问啥,麻烦说明问题,这图就一个简单的网络拓扑图而已


LINK:https://ask.csdn.net/questions/7627365?answer=53661286
SOURCE:CSDN_ASK
ASK_ID:7627371
ANSWER_ID:53661285
TITLE:这个是什么问题? 该怎么操作啊
ANSWER:

不能将字符串转换成浮点数。从这个报错上看,是有个值为空值’',经测试,空值的确不能转换成浮点


img


你可以把z1到z5都打印出来看看哪个为空了


LINK:https://ask.csdn.net/questions/7627371?answer=53661285
SOURCE:CSDN_ASK
ASK_ID:7627366
ANSWER_ID:53661283
TITLE:下术编码中eval ( plt [ i ]. split ('😂[1])不理解
ANSWER:

你这代码都乱掉了,请把代码放到代码块里


img


LINK:https://ask.csdn.net/questions/7627366?answer=53661283
SOURCE:CSDN_ASK
ASK_ID:7627369
ANSWER_ID:53661275
TITLE:eclipse 上安装weblogic插件,无法正确使用如图:
ANSWER:

这个在官网上有说明



However, you must delete and recreate the supplied Eclipse IDE server instance to get past the following error message.



img


LINK:https://ask.csdn.net/questions/7627369?answer=53661275
SOURCE:CSDN_ASK
ASK_ID:7627294
ANSWER_ID:53661264
TITLE:请问安装git出现如下错误什么原因,如何解决?
ANSWER:

尝试鼠标右键,用管理员身份运行
参考


LINK:https://ask.csdn.net/questions/7627294?answer=53661264
SOURCE:CSDN_ASK
ASK_ID:7627350
ANSWER_ID:53661245
TITLE:对列表使用pop()函数,列表里面有10个字符串内容,用for循环只能打印5个结果,代码如图,问题在哪里
ANSWER:

你在循环里,把i打印出来看看就知道了。
你这个循环,是以friends里的元素从头开始循环,但是到第5次完成的时候,你pop已经干掉后面5个了,此时friends里已经没有第6个元素可以循环了。
如果你是想以friends一开始的元素个数进行循环,而不是里面的值,那么你的for 就不是 in元素,而是应该in 1到10


friends = [‘hu’, ‘pan’, ‘hou’, ‘yao’, ‘qi’, ‘lu’, ‘jiang’, ‘jun’, ‘lpan’, ‘liu’]
message = ‘i am sorry that …’
for i in range(len(friends)):
miss_friend = friends.pop()
print(f"hello Mr.{miss_friend}, {message}")

LINK:https://ask.csdn.net/questions/7627350?answer=53661245
SOURCE:CSDN_ASK
ASK_ID:7627347
ANSWER_ID:53661238
TITLE:无法连接PostgreSQL数据库?
ANSWER:

你先确认一下你的PostgreSQL安装在哪个路径下了,找到psql.exe这个文件在哪。
你上面输入的这条命令其实就是去这个路径启动psql.exe这个程序。


LINK:https://ask.csdn.net/questions/7627347?answer=53661238
SOURCE:CSDN_ASK
ASK_ID:7627295
ANSWER_ID:53661235
TITLE:根据表中2个字段的值判断表中其余2个字段的值
ANSWER:

问题说得有点绕,但看上去就是以A表做主表去关联另外两个表而已,只是A表的关联字段可能为空,由于不清楚你数据的主键关系,以及是否存在重复的情况,你可以先这样试试


select * from A 
full join B
on A.a=B.a and A.c=B.b
full join C
on A.b=C.a and A.d=C.b

另外,如果A表中的a,b两个字段的值不会出现重复的话,完全可以把这个两个字段合成一个字段来处理,这样就可以只用A表来left join另外两个表了。
同理,假设存在一样的值,也可以拼个字符让它不一样,比如a字段拼个"a",b字段拼个"b",此时关联条件的另一边也要拼上相同的字符,只是这样查询效率肯定会变低,因为走不到索引了


LINK:https://ask.csdn.net/questions/7627295?answer=53661235
SOURCE:CSDN_ASK
ASK_ID:7627276
ANSWER_ID:53661227
TITLE:PLSQL导入数据后,感觉数据量不对。
ANSWER:

这与导入本身没关系,是因为你的excel表本身下面就一堆空行,你要先在excel里删掉这些空行,保存,再导入。而且,你保存完后,会发现文件神奇的变小了好多。。。


LINK:https://ask.csdn.net/questions/7627276?answer=53661227
SOURCE:CSDN_ASK
ASK_ID:7627238
ANSWER_ID:53661150
TITLE:MYSQL 在做批量更新的时候需要多个函数,怎么做
ANSWER:

先上一张图

img


然后嵌套函数更新,没有报错

img


查询结果,已经被正常更新

img


所以,请提供你的报错信息看看,应该不是嵌套函数的问题


LINK:https://ask.csdn.net/questions/7627238?answer=53661150
SOURCE:CSDN_ASK
ASK_ID:7627219
ANSWER_ID:53661144
TITLE:数值模拟,如何获取2021年国外洪灾数据?
ANSWER:

你用洪灾数据的英语在国外搜索引擎搜一下就能看到很多了,比如earthdata.nasa之类的,不过要注册
https://earthdata.nasa.gov/earth-observation-data/near-real-time/hazards-and-disasters/floods


下面这个链接是漂亮国公开的数据
https://www.fema.gov/openfema-data-page/fema-web-declaration-areas-v1


LINK:https://ask.csdn.net/questions/7627219?answer=53661144
SOURCE:CSDN_ASK
ASK_ID:7627227
ANSWER_ID:53661132
TITLE:sql安装 出现服务器运行失败错误
ANSWER:

打开你电脑的windows update 服务再试


LINK:https://ask.csdn.net/questions/7627227?answer=53661132
SOURCE:CSDN_ASK
ASK_ID:7627222
ANSWER_ID:53661127
TITLE:想问一下各位程序员,C语言能写浏览器吗?
ANSWER:

当然可以,Windows操作系统的大部分内核都是用C语言写的,而且现在很多开发语言的底层都是基于C语言


LINK:https://ask.csdn.net/questions/7627222?answer=53661127
SOURCE:CSDN_ASK
ASK_ID:7626300
ANSWER_ID:53661126
TITLE:从第三方API获取信息,获取成功扣除余额1,实际执行余额扣除混乱
ANSWER:

你把数据交互想得太简单了,楼上已经有很多方法了。
其实归纳起来,就是需要一个唯一识别标识,用来防止重复以及并发加锁控制。至于这个东西放哪里,后端、中间件、数据库各有各的实现方式


LINK:https://ask.csdn.net/questions/7626300?answer=53661126
SOURCE:CSDN_ASK
ASK_ID:7626958
ANSWER_ID:53661124
TITLE:请问pgsql可以存储要素类吗?具体怎么创建才能存储呀?
ANSWER:

你说的是不是ArcGis?
如果是,可以参考一下这篇文章


其实官网上有教程的,可惜被GFW了


img


LINK:https://ask.csdn.net/questions/7626958?answer=53661124
SOURCE:CSDN_ASK
ASK_ID:7627106
ANSWER_ID:53661072
TITLE:PLSQL可以导入xls文件,但无法选择xlsx文件。
ANSWER:
  1. odbc有32位和64位版本,请根据你的程序进行选择
  2. 在odbc中添加xlsx的数据源,需要安装高版本的microsoft office(或者去找单独的office的odbc驱动包),如果你本机没安装的话,建议保存成文本类型,比如csv,再使用plsqldeveloper选择从文本导入
  3. plsqldeveloper已经出到14了,但这个功能的确没有改进,仍然只能通过文本或者odbc两种方式导入

LINK:https://ask.csdn.net/questions/7627106?answer=53661072
SOURCE:CSDN_ASK
ASK_ID:7627156
ANSWER_ID:53661055
TITLE:mysql如何查找某值在未来30天内是否重复
ANSWER:

这题问法有问题,搞得好像是要用机器学习算法预测未来一样。。。
我猜题主是想问,如何查询历史的两次维修间隔在30天以内的车。
楼上专家这解法只能针对固定的日期段,而题主的开始时间是不确定的。
如果是使用mysql8.0版本,可以使用开窗函数,把移动窗口的范围限定在30天,统计窗口内的记录数是否大于1就好了。
还可以使用开窗函数的lead或者lag来取上一个值或者下一个值来判断是否间隔小于30天。
然后8.0版本使用with as的递归sql也能实现。
但是,如果是8版本以下,那就麻烦了,可能还得写个过程,需要用循环,去模拟30天范围的移动窗口,比如
第一次查20210101-20210130,
第二次查20210102-20210131,
第三次查20210103-20210201


LINK:https://ask.csdn.net/questions/7627156?answer=53661055
SOURCE:CSDN_ASK
ASK_ID:7627161
ANSWER_ID:53661049
TITLE:mysql 某字段内容 为另一个表的 select 结果,怎么弄?
ANSWER:

你多个商品是想分行显示还是在一行显示?
如果是分多行显示,两个表直接关联就好了


select table1.客户ID,table2.购买商品 客户已购买商品 from table1 
left join table2 on table1.客户ID=table2.客户id
where table1.客户ID=查询条件

如果是要求一个客户只显示一行,那么你需要确定下怎么显示多个商品,是直接逗号分隔还是用jsonlist,另外你还要说明一下你的数据库版本。
假设是用逗号分隔多个商品,用group_concat函数


select table1.客户ID, group_concat(table2.购买商品) 客户已购买商品 from table1 
left join table2 on table1.客户ID=table2.客户id
where table1.客户ID=查询条件
group by table1.客户ID

LINK:https://ask.csdn.net/questions/7627161?answer=53661049
SOURCE:CSDN_ASK
ASK_ID:7627069
ANSWER_ID:53660996
TITLE:navicat设计视图报错 1191-unknown system variable ‘datadir’
ANSWER:

上操作步骤截图,这是你哪里填错了


LINK:https://ask.csdn.net/questions/7627069?answer=53660996
SOURCE:CSDN_ASK
ASK_ID:7627086
ANSWER_ID:53660995
TITLE:数据可视化(power bl)
ANSWER:

定位不一样,其实你自己的问题里已经对这几种工具做了区分。
比如有用户不愿意交互,只是想随时随地手机打开页面直接就能看到根据最新数据生成的可视化图表,很明显这种用ECharts提前把网页做好就行了,而power bi太重,不适合做这种。
虽然最终生成的可视化图表只是一个结果,但是生成它的过程、生成它的人、生成它的机制、看它的人、看它的设备等等,都是不一样的,要根据不同的场景选择不同的工具


LINK:https://ask.csdn.net/questions/7627086?answer=53660995
SOURCE:CSDN_ASK
ASK_ID:7626713
ANSWER_ID:53660571
TITLE:m1安装Oracle
ANSWER:

我缺一台m1 的电脑,所以没办法测试能不能装。
oracle11g已经太老了,十多年了,如果还想使用的话,建议用docker版本。
而且你为啥本机要安装数据库呀,如果是测试用,用虚拟机版本或者docker版本更好


LINK:https://ask.csdn.net/questions/7626713?answer=53660571
SOURCE:CSDN_ASK
ASK_ID:7626716
ANSWER_ID:53660567
TITLE:Mac m1芯片安装Oracle11g
ANSWER:

oracle11g已经太老了,十多年了,如果还想使用的话,建议用docker版本,干净又卫生


LINK:https://ask.csdn.net/questions/7626716?answer=53660567
SOURCE:CSDN_ASK
ASK_ID:7626744
ANSWER_ID:53660564
TITLE:怎么解决golang中的未配置sql方言
ANSWER:

你这个截图都已经提供给你两个操作选项了,点一点不就好了么


LINK:https://ask.csdn.net/questions/7626744?answer=53660564
SOURCE:CSDN_ASK
ASK_ID:7626765
ANSWER_ID:53660563
TITLE:有关使用JdbcTemplate查询的问题:sql语句直接运行可正常查出,但用代码查就出现不同结果
ANSWER:

主要代码不是在这里,而是应该在你的emp这个class里,你去瞅瞅是不是对应错了


LINK:https://ask.csdn.net/questions/7626765?answer=53660563
SOURCE:CSDN_ASK
ASK_ID:7626784
ANSWER_ID:53660558
TITLE:数据库的基本设计,如何设计规范的表
ANSWER:

在大数据时代之前,传统的关系型数据库设计会尽可能的减少重复冗余数据的存储,像你这么设计表,要浪费不少磁盘空间。并且,还可能会出现在你的班级表里,同一个课程id会对应多个课程名,除非程序设计得特别完善,课程名自动强制从课程表里联动获取且禁止直接修改班级表里的课程名,写这些代码又要浪费多少脑力。
然后现在已经是大数据时代了,很多大数据工具比如hadoop,在做表关联时是很吃力的,所以往往会用单表记录尽可能多的信息,哪怕有重复也无所谓,以空间换时间。而且大部分作为数据分析使用的大数据仓,它的数据其实还是来自于关系型数据库的抽取整合清洗。
所以,在当下,数据库该怎么设计这个问题,应该视实际场景而来,而不是一味地照本宣科


LINK:https://ask.csdn.net/questions/7626784?answer=53660558
SOURCE:CSDN_ASK
ASK_ID:7626797
ANSWER_ID:53660544
TITLE:postgrepsql如何保留小数点后面的0
ANSWER:
select to_char(7,‘fm999999999999990.00’);

官方文档里有


LINK:https://ask.csdn.net/questions/7626797?answer=53660544
SOURCE:CSDN_ASK
ASK_ID:7626272
ANSWER_ID:53660315
TITLE:postgrep要求数字最后一位补0怎么处理
ANSWER:

乍一看以为是精度问题,但细看,这不对呀,这问题描述是不是有问题?
123456.0这不是7位了么?而且你12345是咋变成的123456.0呀?这个转换规则到底是怎样的?




其实吧,对于数字而言,小数点后面末尾的0没有任何意义,你现在要求的是显示成你想要的格式,那么这个时候,它其实是按照你要求显示的字符串了,应该用to_char去格式化它


  select to_char(123456,‘fm999999999999990.0000000000’);

img


像这个sql,小数点后面接多少个0,它就会保留小数点后多少位进行显示。
但你这个需求明显有问题,如果数据库里存个1,然后用户传个10,你难道给他显示1.000000000?这有什么意义?而且你问题里,数据库存12345,传4,显示1234,这数字大小都变了啊,这不是个错的么?


LINK:https://ask.csdn.net/questions/7626272?answer=53660315
SOURCE:CSDN_ASK
ASK_ID:7626283
ANSWER_ID:53660309
TITLE:spark数据查询前6个字符相同的字段的个数并从多到少排序
ANSWER:

你这自己不是已经用文字描述了逻辑了么?截取前6位,聚合计数


select substr(DapipId,1,6) D,count(1) C fromgroup by substr(DapipId,1,6) order by C DESC

LINK:https://ask.csdn.net/questions/7626283?answer=53660309
SOURCE:CSDN_ASK
ASK_ID:7626600
ANSWER_ID:53660298
TITLE:如何在SQL语句中修改,实现数据中间添加小数点
ANSWER:

你意思是314048变成314.048?
这直接把那个经度字段直接除以1000,纬度字段除以100就好了


LINK:https://ask.csdn.net/questions/7626600?answer=53660298
SOURCE:CSDN_ASK
ASK_ID:7626443
ANSWER_ID:53660293
TITLE:Oracle 查询时报无效号码
ANSWER:

麻烦报错信息截个图,从来没有听说过有"无效号码"这个报错,接近一点的只有"无效数字"
如果是无效数字,常见于格式转换中格式不匹配的问题,你首先得说明一下T_RFL1_DATA.create_time的字段类型是什么,如果是varchar2类型,请把文本格式贴出来。
而且你这sql,本来就是字符串了,干嘛搞这么多转成date又转回去,这字符串本身直接就可以做查询条件呀,还有你最后的trunc是在干什么这是trunc了个寂寞,这玩意出来是个字符串,你在后面加个数字?这里肯定会报错呀


LINK:https://ask.csdn.net/questions/7626443?answer=53660293
SOURCE:CSDN_ASK
ASK_ID:7626499
ANSWER_ID:53660286
TITLE:with as性能调优
ANSWER:

with as 只能放在最前面,你这条sql要求和的话,没必要再套一层


WITH HH
AS
(SELECT ID FROM DEPT WHERE NAME LIKE ‘苏州%’
)
select SUM(求和列) from proj where dept in (select * from HH)

LINK:https://ask.csdn.net/questions/7626499?answer=53660286
SOURCE:CSDN_ASK
ASK_ID:7626183
ANSWER_ID:53659717
TITLE:为什么DBeaver不能导出excel哇?
ANSWER:

连mysql官方的免费工具workbench都不支持导出excel,你有没有想过是不是免费的工具都不支持导出成xlsx?
如果你非得用程序直接导出excel文件,我建议用其他开发语言写个脚本就好了,比如用python


LINK:https://ask.csdn.net/questions/7626183?answer=53659717
SOURCE:CSDN_ASK
ASK_ID:7625973
ANSWER_ID:53659692
TITLE:SqlServer判断两个日期时间是否有交叉
ANSWER:

楼上神仙漏了场景,这个只判断了查询点是否都在数据区间内,实际要求的应该是任意一秒有重叠就算满足
首先,这个日期加时间的思路是没问题的,但是要注意字段格式,最终都要转换成datetime类型以方便做判断
然后, 归纳可能性,假设有一个时间数轴,
A.两个查询点都在数据开始点的左侧,或者都在数据结束点的右侧,此时不满足条件
B.至少其中一个查询点落在了数据开始点和数据结束点之间,此时满足条件
C.查询开始点在数据开始点左侧且查询结束点在数据结束点右侧,此时也满足条件
因此,把B和C用OR连起来做条件就行了,或者直接NOT A条件


LINK:https://ask.csdn.net/questions/7625973?answer=53659692
SOURCE:CSDN_ASK
ASK_ID:7626123
ANSWER_ID:53659675
TITLE:postgrep怎么支持 日期在前的格式
ANSWER:

日期数据本身是没有格式的,日期的显示格式是由客户端环境变量控制的,你这日期转字符串再转日期没有任何意义,就下面这样就行了


SELECT to_char(DATE ‘2014-04-01’, ‘DD/MM/YYYY’)

img


LINK:https://ask.csdn.net/questions/7626123?answer=53659675
SOURCE:CSDN_ASK
ASK_ID:7625986
ANSWER_ID:53659549
TITLE:请问如何获取数据库文件的密码?
ANSWER:

mdb的密码是可以直接破解的呀,我十年前用soft_VAP这个软件破解过mdb的密码


LINK:https://ask.csdn.net/questions/7625986?answer=53659549
SOURCE:CSDN_ASK
ASK_ID:7626033
ANSWER_ID:53659524
TITLE:明细数据不全时如何取舍
ANSWER:

一般对于时间跨度比较长的数据分析,最低时间分析维度也就是按天,这样业务系统也不用做过度的开发,而且占用存储空间也不大。
如果是要做精确审计,要求每一次修改都要记录,那就要在程序上做开发,或者数据库开启审计功能,但这样肯定会让系统性能变差,而且存储空间使用暴增,这些都是money啊,只对几个不怎么变动的表来做的话问题倒不大。
另外,我不清楚你是不是在说想查任意历史数据时,相关资料档案应该也是在对应当时的那个时间段的状态,而不是查最新资料?这个问题其实也是一样,只要钱堆得多,都能做,但不一定值得


LINK:https://ask.csdn.net/questions/7626033?answer=53659524
SOURCE:CSDN_ASK
ASK_ID:7626012
ANSWER_ID:53659463
TITLE:sql server 将一列n行数据转换成一行n列 怎么转化呢?
ANSWER:

你新表的abcd是哪里来的?
如果是table1里有个字段id的值是abcd的话
那么就用pivot


select * from pivot (max(name) for id in (‘a’,‘b’,‘c’,‘d’))

LINK:https://ask.csdn.net/questions/7626012?answer=53659463
SOURCE:CSDN_ASK
ASK_ID:7625843
ANSWER_ID:53659271
TITLE:关于Linux shell处理两个文件实现两个文件按照要求合并
ANSWER:

一定要用linux么?这玩意放数据库里分分钟搞定。。。
用linux的话,也就是遍历每一行,拿到匹配字符串,去找另一个文件,定位到某一行,然后输出到新文件


LINK:https://ask.csdn.net/questions/7625843?answer=53659271
SOURCE:CSDN_ASK
ASK_ID:7625924
ANSWER_ID:53659255
TITLE:springboot操作Oracle
ANSWER:

你设置的这个自动提交只是会话级的,只表示你当前窗口自动提交。建议代码里显式commit,这样比较安全。或者连接池每个会话启动后都自动运行一次自动提交


LINK:https://ask.csdn.net/questions/7625924?answer=53659255
SOURCE:CSDN_ASK
ASK_ID:7625554
ANSWER_ID:53659229
TITLE:SQL-請問我這個程式碼要怎麼改
ANSWER:

说一下你想要的数据结果有哪些字段,每个字段的取值规则。
根据你要的字段,看需要哪些表进行关联,关联好后,select你要的字段,看你的统计口径是查看每个顾客购买的商品明细还是商品个数或者是商品种数,来选择是否聚合和聚合的方式


LINK:https://ask.csdn.net/questions/7625554?answer=53659229
SOURCE:CSDN_ASK
ASK_ID:7625868
ANSWER_ID:53659194
TITLE:Pgsql: ERROR: cache lookup failed for operator family 0
ANSWER:

st_intersects是postgis组件的一个函数,
官方有用法


LINK:https://ask.csdn.net/questions/7625868?answer=53659194
SOURCE:CSDN_ASK
ASK_ID:7625401
ANSWER_ID:53658230
TITLE:python 如何处理一列数据以一定的步长滚动累加
ANSWER:

你是想用python还是sql?
如果是sql,用开窗函数一次性就能查出来;
如果是python,初始化14行的记录,弄个循环,每次从前面减掉一行,并在后面加一行。或者直接循环取第N行到第N+13行,N=N+1递增,直到查完


LINK:https://ask.csdn.net/questions/7625401?answer=53658230
SOURCE:CSDN_ASK
ASK_ID:7625306
ANSWER_ID:53658221
TITLE:查询选课门数等于课程总数的学生学号
ANSWER:

没必要再套一层


select sno from sc
group by sno
having count(sno)=(select count(cno) from course)

LINK:https://ask.csdn.net/questions/7625306?answer=53658221
SOURCE:CSDN_ASK
ASK_ID:7625366
ANSWER_ID:53658213
TITLE:oracle数据库金额抵扣问题
ANSWER:

经典的批次分摊哈,在分摊时,关键点在于已分摊金额,这个金额需要累加,并且每次分摊前还要判断是否有剩余的金额进行分摊。我之前是把这个临时分摊金额保存到了表里。至于顺序,游标的sql里写order by就好了


LINK:https://ask.csdn.net/questions/7625366?answer=53658213
SOURCE:CSDN_ASK
ASK_ID:7625351
ANSWER_ID:53658203
TITLE:superset 链接oracle数据库报错
ANSWER:

你去看一下oracle客户端文件夹里有没有这个文件libclntsh.so,如果没有,把这个文件名带数字的那个文件复制一个出来,命令为libclntsh.so,或者直接使用最新的21版本客户端


LINK:https://ask.csdn.net/questions/7625351?answer=53658203
SOURCE:CSDN_ASK
ASK_ID:7625300
ANSWER_ID:53658020
TITLE:MySql如何将时间差00:10:36 转换为分钟
ANSWER:
select substr(a,1,2)*60+substr(a,4,2) from (
select00:10:36’ as a
union all
select01:10:00’) t

img


LINK:https://ask.csdn.net/questions/7625300?answer=53658020
SOURCE:CSDN_ASK
ASK_ID:7625289
ANSWER_ID:53658001
TITLE:sql语句判断字符串长度为64
ANSWER:

这是要查表结构还是表里面的数据?
不同数据库的表结构查询方式不一样,请明确数据库类型及版本。
如果是查表里面的数据,判断一个字符串字段是否为字符串已经没有意义了,如果要识别该数据的长度,用length函数即可


LINK:https://ask.csdn.net/questions/7625289?answer=53658001
SOURCE:CSDN_ASK
ASK_ID:7624801
ANSWER_ID:53657992
TITLE:将下面的语句转为hive能运行的
ANSWER:

index改成instr


LINK:https://ask.csdn.net/questions/7624801?answer=53657992
SOURCE:CSDN_ASK
ASK_ID:7625015
ANSWER_ID:53657990
TITLE:数据库主键一直重复,导致新的数据插入不进去
ANSWER:

这个其实与懂不懂数据库没有关系,你得搞清楚以下几个问题,
为什么会有主键重复的数据要插入?
导入这个数据的目的到底是什么?
这个导入每次都是新增?还是说会对现有数据存在修改?
需要导入的数据中Master_id是怎么来的?用户自己编的?还是有程序控制生成的?




如果每次都是新增,那么就要找数据提供方,告诉他数据有问题。
如果数据提供方告诉你发现Master_id已存在就以最新记录为准,那么你就得写个脚本,发现有重复记录,先删再插,或者update除主键以外的所有字段为最新记录


LINK:https://ask.csdn.net/questions/7625015?answer=53657990
SOURCE:CSDN_ASK
ASK_ID:7625143
ANSWER_ID:53657969
TITLE:数据库求第N高薪水left join问题
ANSWER:

用分析函数


select salary
from (select distinct dense_rank(salary) over(order by salary desc nulls last) nn,
salary
from employee)
where nn = n

LINK:https://ask.csdn.net/questions/7625143?answer=53657969
SOURCE:CSDN_ASK
ASK_ID:7625220
ANSWER_ID:53657946
TITLE:SQL怎么实现这个要求?
ANSWER:
  1. 先出一个去重表,只有两列,user_id和category_id,有记录的表示该用户有购买过该产品,不论次数,假设表名为 a
  2. 自表关联笛卡尔积,取产品相同用户不同的记录
    select a1.user_id userA,a2.user_id userB,a1.category_id from a a1,a a2 where a1.category_id=a2.category_id and a1.user_id<>a2.user_id;

  3. 对上面的结果,以userA和userB进行group by ,对category_id进行字符串拼接的聚合,这个聚合函数就得看是用的什么数据库了,不同数据库不一样,比如oracle中可以使用listagg,其他数据库字符串聚合方案如下

img


截图来自https://modern-sql.com/feature/listagg


LINK:https://ask.csdn.net/questions/7625220?answer=53657946
SOURCE:CSDN_ASK
ASK_ID:7625013
ANSWER_ID:53657912
TITLE:统计相同流水号下的某类数据
ANSWER:

没必要套子查询,无非就是查no去重有多少个


select count(distinct no) from a where flag=1;

LINK:https://ask.csdn.net/questions/7625013?answer=53657912
SOURCE:CSDN_ASK
ASK_ID:7624798
ANSWER_ID:53657136
TITLE:mysql数据库插入的数据中文部分出现问号,怎么办
ANSWER:

为什么非得用GBK呢?你有没有考虑过,现在大部分数据传输都用utf-8了,gbk里少了很多字符,未来出现一串文字里有个别几个字无法保存怎么办?全部都统一用UTF-8才是正解.
如果你非得用GBK,也不是不可以
给你一篇十年前的文章,这个里面把这几个变量是怎么变的说得很清楚了


LINK:https://ask.csdn.net/questions/7624798?answer=53657136
SOURCE:CSDN_ASK
ASK_ID:7624825
ANSWER_ID:53657127
TITLE:mysql安装失败,命令安装时无法成功创建date文件夹,安照网上的方法修改了my.ini文件也不行
ANSWER:

不要使用包含有中文的文件夹


LINK:https://ask.csdn.net/questions/7624825?answer=53657127
SOURCE:CSDN_ASK
ASK_ID:7624740
ANSWER_ID:53657039
TITLE:!!navicat for mysql 5.7
ANSWER:

你自己新建一个连接,填好要连的数据库信息就好了


LINK:https://ask.csdn.net/questions/7624740?answer=53657039
SOURCE:CSDN_ASK
ASK_ID:7624449
ANSWER_ID:53657032
TITLE:Mysql并发操作同一个表同一个字段问题
ANSWER:

很多情况下,程序代码去锁数据,不仅仅是为了不让别的会话修改,更多情况下是一种判断,判断这个数据是否正在被别的会话修改,这种操作一般放在一个事务操作的比较靠前的位置,根据加锁是否成功这个步骤,来决定是否需要继续向下执行正常逻辑还是去执行异常逻辑或者等待。
举例,有时候更新数据,会根据数据当前的值来计算,即先查询再修改,如果它查询的数据其他会话正在修改,等它查完后,其他会话把事务提交了,那么它根据之前数据计算出来的值再更新到这个表就会出现问题,所以它不能先查数据,而是应该先判断有没有人在改数据。
至于lock table,那是因为insert不会锁(除非有唯一键),要防止记录出现重复。
实际应用中,应该根据不同的业务逻辑场景,去选择不同的加锁机制,不能一概而论,这个东西不能只看数据库机制层面,还应该去看业务场景及程序代码控制


LINK:https://ask.csdn.net/questions/7624449?answer=53657032
SOURCE:CSDN_ASK
ASK_ID:7624542
ANSWER_ID:53657022
TITLE:两表一对多查询多字段展示
ANSWER:

是mysql还是oracle?数据库版本?数据要求的及时性有多高?每次只查一个还是查全部?
如果查一个还慢,那就是索引没建。
如果是查全部,
我建议,如果要查询快,得把药品信息这个表横过来,如果是新版的oracle就好办了,有实时物化视图;就算是老版的oracle也有基于日志的物化视图,把刷新频率调快点,能既保证查询效率,又不影响原有的数据结构。
如果是mysql,也可以用存储过程模拟增量变化逻辑,生成一个准实时的横表,不过这要求程序在对这个表里的记录进行增删改的时候,也要打上可供识别的增量标记。
其实重点就是你这个药品信息表的记录量太大,而且每个药品的属性个数和属性类型都有不一样的情况,oracle直接join或写子查询问题都不大,是mysql就会疯了去


LINK:https://ask.csdn.net/questions/7624542?answer=53657022
SOURCE:CSDN_ASK
ASK_ID:7624590
ANSWER_ID:53657004
TITLE:PLSQL 上写的存储过程可以正常使用,但是转到oracle sql develper上就报错
ANSWER:

能不能跑存储过程,与是plsql developer还是oracle sql developer无关,要么都不能跑,要么都能跑。当然如果你存储过程里要是做了什么ddl操作导致执行一次后过程就失效,那就是另一说了




建议重新下载一个完整版的oracle sql developer(内置jdk的那个包)和最新版的ORACLE客户端,我怀疑是你这个oracle sql developer丢了文件或者环境有问题


LINK:https://ask.csdn.net/questions/7624590?answer=53657004
SOURCE:CSDN_ASK
ASK_ID:7624708
ANSWER_ID:53656984
TITLE:数据库sql语句,请问这个什么问题,怎么解决,球
ANSWER:

你那个sum变量为啥要限制decimal(4,1)?直接一个int不就好了,你count还能count出小数来?
另外,clon字段是啥类型?传入参数@classno声明的类型应该要和clon的类型一致


LINK:https://ask.csdn.net/questions/7624708?answer=53656984
SOURCE:CSDN_ASK
ASK_ID:7624389
ANSWER_ID:53656550
TITLE:mysql查询sql语句实现
ANSWER:
select st.*
from Student st
where not exists (select 1
from SC, Course c, Teacher t
where st.s = sc.s
and sc.c = c.c
and t.t = c.T#
and t.T = ‘01’);

LINK:https://ask.csdn.net/questions/7624389?answer=53656550
SOURCE:CSDN_ASK
ASK_ID:7624371
ANSWER_ID:53656543
TITLE:sql中如何使用union将三行字符型的数据整合放在一行上?
ANSWER:
select max(x),max(y),max(z) from 表;

LINK:https://ask.csdn.net/questions/7624371?answer=53656543
SOURCE:CSDN_ASK
ASK_ID:7624193
ANSWER_ID:53656537
TITLE:sql中如何将下列三行合并成一行?
ANSWER:
select max(x),max(y),max(z) from 表;

在确定只有一个值非空的时候,用max聚合就能取到那个值了


LINK:https://ask.csdn.net/questions/7624193?answer=53656537
SOURCE:CSDN_ASK
ASK_ID:7624187
ANSWER_ID:53656535
TITLE:Oracle转postgreSQL update语句中怎么用row_number() over()
ANSWER:

这个表有没有主键?如果有的话,建议用row_number() over()取到前50行的主键后,再in这些主键去update


LINK:https://ask.csdn.net/questions/7624187?answer=53656535
SOURCE:CSDN_ASK
ASK_ID:7623882
ANSWER_ID:53655856
TITLE:新华三“1+x”大数据运维中级证书去哪里查
ANSWER:


点中间的获取与验证证书


LINK:https://ask.csdn.net/questions/7623882?answer=53655856
SOURCE:CSDN_ASK
ASK_ID:7623704
ANSWER_ID:53655703
TITLE:hive sql 使用问题
ANSWER:

你第一个sql只是拼出一个字符串,并不是表名,当然不能直接代替表使用。
像这种字符串拼接出来sql叫动态sql,不能直接作为sql执行,必须以程序化命令,比如存储过程、shell之类的,先拼出来完整的sql,再去执行这个sql


LINK:https://ask.csdn.net/questions/7623704?answer=53655703
SOURCE:CSDN_ASK
ASK_ID:7623486
ANSWER_ID:53655687
TITLE:mysql在第一次登陆时的unknown variable 'DATABASES={'如何解决
ANSWER:

安装数据库的时候就装错了,让你填数据库名称的地方,你把'DATABASES={…}'这一串都加进去了,把库删了重新建库吧


LINK:https://ask.csdn.net/questions/7623486?answer=53655687
SOURCE:CSDN_ASK
ASK_ID:7623817
ANSWER_ID:53655681
TITLE:sql查询全部关联表的各表数据量
ANSWER:

写个过程,按表清单循环,一张一张表count,并将表名和记录数插入一张表,之后再查这张表就行了


LINK:https://ask.csdn.net/questions/7623817?answer=53655681
SOURCE:CSDN_ASK
ASK_ID:7623600
ANSWER_ID:53655678
TITLE:Oracle数据库查询语句
ANSWER:
—如果时间字段是date类型
SELECT * FROM1 WHERE 条件字段=‘条件1’ and 时间字段>=add_months(trunc(sysdate),7);
—如果时间字段是varchar2 类型
SELECT * FROM1 WHERE 条件字段=‘条件1’ and 时间字段>=to_char(add_months(sysdate,7),‘yyyy-mm-dd’);

–以上sql都是忽略时分秒的

LINK:https://ask.csdn.net/questions/7623600?answer=53655678
SOURCE:CSDN_ASK
ASK_ID:7622933
ANSWER_ID:53654572
TITLE:为啥这个答案是FALSE的呢?
ANSWER:
ls = [1,7,5]
ls1=reversed(ls)
print(ls)
print(ls1)

ls2 = list(reversed(ls))
print(ls)
print(ls2)

你跑一下这段就知道了


LINK:https://ask.csdn.net/questions/7622933?answer=53654572
SOURCE:CSDN_ASK
ASK_ID:7623160
ANSWER_ID:53654560
TITLE:vmware 10 进不去 一直重复代码
ANSWER:

你没有设置系统安装镜像,它找不到可以引导的系统,当然这样了


LINK:https://ask.csdn.net/questions/7623160?answer=53654560
SOURCE:CSDN_ASK
ASK_ID:7623203
ANSWER_ID:53654556
TITLE:如何引入pandas库
ANSWER:

先确保已经安装pandas,如果没安装,就执行


pip3 install pandas

然后你写python代码的时候,前面加上 import pandas ,这个import就叫引入


现在这课怎么教的,基本概念都还没会,都已经开始做数据分析了


LINK:https://ask.csdn.net/questions/7623203?answer=53654556
SOURCE:CSDN_ASK
ASK_ID:7623167
ANSWER_ID:53654553
TITLE:如何提升自己文章的阅读量?
ANSWER:

咋选到数据库开发标签了。。。你目前这才一篇,在这里要多活跃,才会被站点推荐给其他用户


LINK:https://ask.csdn.net/questions/7623167?answer=53654553
SOURCE:CSDN_ASK
ASK_ID:7612722
ANSWER_ID:53654470
TITLE:阿里云数据库建库问题
ANSWER:

在阿里提交工单,有专人服务,还能帮你看日志


LINK:https://ask.csdn.net/questions/7612722?answer=53654470
SOURCE:CSDN_ASK
ASK_ID:7620383
ANSWER_ID:53654466
TITLE:oss-能实现一次性上传多个文件 和 一次性下载文件夹下面的所有文件的功能
ANSWER:

你多个文件对应一个url?是个目录么?
那你就每次上传都建一个目录,把这个目录名称存起来,之后就下载这个目录就好了


LINK:https://ask.csdn.net/questions/7620383?answer=53654466
SOURCE:CSDN_ASK
ASK_ID:7623091
ANSWER_ID:53654461
TITLE:这怎么解决啊,根本不知道怎么办
ANSWER:

img


由于该目录下已经有文件,初始化失败
考虑删除该目录下的所有文件,然后服务重新初始化增加
少年,看不懂英语可以用在线翻译看看是什么意思


LINK:https://ask.csdn.net/questions/7623091?answer=53654461
SOURCE:CSDN_ASK
ASK_ID:7623080
ANSWER_ID:53654456
TITLE:请教个入门级的问题?
ANSWER:

对,如果这些用户下有些表禁止让AA访问,那么你这80张表每张表都要授权,但是授权命令可以用sql或者excel批量拼接生成


LINK:https://ask.csdn.net/questions/7623080?answer=53654456
SOURCE:CSDN_ASK
ASK_ID:7622609
ANSWER_ID:53654034
TITLE:update时,只对新引入的数据进行百分比计算,如何不影响前面已有的数据
ANSWER:

所有的update sheet_sk后面加上限制条件,比如


update sheet_sk
set sheetdate = :r_sheetdate
where exists (select 1 from sheet_xs
where code= :r_code1 and sheet_xs.sheetid=sheet_sk .sheetid)

LINK:https://ask.csdn.net/questions/7622609?answer=53654034
SOURCE:CSDN_ASK
ASK_ID:7622628
ANSWER_ID:53654028
TITLE:如何依次分别取 表#tb1里MID=1、2、3时的数字,然后再随机取10位数一次,请专家答疑解惑
ANSWER:

你取 #tb1的时候,没带where过滤条件,它当然3行记录都出来了,既然声明了@GroupID这个变量,为啥不用上去呢?




WITH T AS(
select NUMBER from (select * from #tb1 where MID=@GroupID) unpivot (NUMBER for TYPE in(n1,n2,n3,n4,n5,n6,n7,n8,n9,n10,n11,n12,n13,n14)) as p
)

SELECT [number], NEWID() ID INTO #Seq FROM T

其实大概就这个意思,子查询要不要加别名你自己去试,




我看到问题了,你order by newid()这玩意,把顺序都搞乱了


if object_id(‘[tempdb]…#tb1’) is not null drop table #tb1
GO
create table #tb1(
[MID] [int] IDENTITY(1,1) NOT NULL primary key,
n1 int NULL,n2 int NULL,n3 int NULL,n4 int NULL,n5 int NULL,n6 int NULL,n7 int NULL,n8 int NULL,n9 int NULL,n10 int NULL,n11 int NULL,n12 int NULL,n13 int NULL,n14 int NULL)
insert into #tb1
SELECT ‘1’N1,‘3’N2,‘5’N3,‘7’N4,‘9’N5,‘11’N6,‘13’N7,‘15’N8,‘17’N9,‘19’N10,‘21’N11,‘23’N12,‘25’N13,‘27’N14
UNION ALL
SELECT ‘2’,‘4’,‘6’,‘8’,‘11’,‘13’,‘15’,‘17’,‘19’,‘21’,‘23’,‘25’,‘27’,‘30’
UNION ALL
SELECT ‘12’,‘14’,‘16’,‘18’,‘11’,‘13’,‘15’,‘17’,‘19’,‘21’,‘23’,‘25’,‘27’,‘30’

IF OBJECT_ID(N‘result’, N‘U’) IS NOT NULL
DROP TABLE result;

DECLARE @loop2 INT=0
DECLARE @Nums NVARCHAR(100)
DECLARE @sql NVARCHAR(200)=‘’
CREATE TABLE result (GroupID INT, N1 INT,N2 INT,N3 INT, N4 INT,N5 INT, N6 INT, N7 INT,N8 INT,N9 INT, N10 INT)
DECLARE @GroupID INT=1
WHILE @GroupID < 2
BEGIN
SET @loop2 = 0;
if object_id(‘tempdb.dbo.#Seq’) is not null drop table #Seq;

– 问题 依次取 表#tb1里的数字,但结果是把三行的数字全部取了,是错误的
WITH T AS(
select NUMBER,MID from #tb1 unpivot (NUMBER for TYPE in(n1,n2,n3,n4,n5,n6,n7,n8,n9,n10,n11,n12,n13,n14)) as p
)

SELECT [number], MID as ID INTO #Seq FROM T

–循环1次,写入1行
WHILE @loop2 < 1
BEGIN
IF @loop2 < 1
SET @Nums = STUFF(( SELECT ‘,’ + CAST(number AS VARCHAR(12))
FROM ( SELECT id, number
FROM #Seq
ORDER BY ID,number OFFSET (@loop2 * 10) ROWS FETCH NEXT 10 ROWS ONLY) t
ORDER BY ID,t.number
FOR XML PATH(‘’)),
1,
1,
‘’);
–生产写入的SQL代码
SET @sql = N‘insert result (GroupID, N1, N2, N3, N4, N5, N6, N7, N8, N9, N10) VALUES (’ + CAST(@GroupID AS NVARCHAR(12))
+ N‘,’ + @Nums + N‘)’;
–执行写入
EXEC (@sql);
SET @loop2 = @loop2 + 1;
END;
SET @GroupID = @GroupID + 1;
END;
SELECT * FROM result

img


这是我第一次看sqlserver的过程代码,有点脑壳大,现在是跑第一行出来了,我再看看怎么随机




随机的出来了


if object_id(‘[tempdb]…#tb1’) is not null drop table #tb1
GO
create table #tb1(
[MID] [int] IDENTITY(1,1) NOT NULL primary key,
n1 int NULL,n2 int NULL,n3 int NULL,n4 int NULL,n5 int NULL,n6 int NULL,n7 int NULL,n8 int NULL,n9 int NULL,n10 int NULL,n11 int NULL,n12 int NULL,n13 int NULL,n14 int NULL)
insert into #tb1
SELECT ‘1’N1,‘3’N2,‘5’N3,‘7’N4,‘9’N5,‘11’N6,‘13’N7,‘15’N8,‘17’N9,‘19’N10,‘21’N11,‘23’N12,‘25’N13,‘27’N14
UNION ALL
SELECT ‘2’,‘4’,‘6’,‘8’,‘11’,‘13’,‘15’,‘17’,‘19’,‘21’,‘23’,‘25’,‘27’,‘30’
UNION ALL
SELECT ‘12’,‘14’,‘16’,‘18’,‘11’,‘13’,‘15’,‘17’,‘19’,‘21’,‘23’,‘25’,‘27’,‘30’

IF OBJECT_ID(N‘result’, N‘U’) IS NOT NULL
DROP TABLE result;

DECLARE @loop2 INT=0
DECLARE @Nums NVARCHAR(100)
DECLARE @sql NVARCHAR(200)=‘’
CREATE TABLE result (GroupID INT, N1 INT,N2 INT,N3 INT, N4 INT,N5 INT, N6 INT, N7 INT,N8 INT,N9 INT, N10 INT)
DECLARE @GroupID INT=1
WHILE @GroupID < 4
BEGIN
SET @loop2 = 0;
if object_id(‘tempdb.dbo.#Seq’) is not null drop table #Seq;

– 问题 依次取 表#tb1里的数字,但结果是把三行的数字全部取了,是错误的
WITH T AS(
select NUMBER,MID from #tb1 unpivot (NUMBER for TYPE in(n1,n2,n3,n4,n5,n6,n7,n8,n9,n10,n11,n12,n13,n14)) as p
)

SELECT [number], MID as ID,newid() as NID INTO #Seq FROM T

–循环1次,写入1行
WHILE @loop2 < 1
BEGIN
IF @loop2 < 1
SET @Nums = STUFF(( SELECT ‘,’ + CAST(number AS VARCHAR(12))
FROM ( SELECT id, number,NID
FROM #Seq WHERE ID=@GroupID
ORDER BY NID OFFSET (@loop2 * 1) ROWS FETCH NEXT 10 ROWS ONLY) t
ORDER BY NID
FOR XML PATH(‘’)),
1,
1,
‘’);
–生产写入的SQL代码
SET @sql = N‘insert result (GroupID, N1, N2, N3, N4, N5, N6, N7, N8, N9, N10) VALUES (’ + CAST(@GroupID AS NVARCHAR(12))
+ N‘,’ + @Nums + N‘)’;
–执行写入
EXEC (@sql);
SET @loop2 = @loop2 + 1;
END;
SET @GroupID = @GroupID + 1;
END;
SELECT * FROM result

要实现你这个目的,应该有更好的方法,不过这sqlserver的sql看得有点难受,不整了


LINK:https://ask.csdn.net/questions/7622628?answer=53654028
SOURCE:CSDN_ASK
ASK_ID:7622706
ANSWER_ID:53654023
TITLE:数据库没有学通,做一个查询报表给俺整不会了。。
ANSWER:

你想问什么?麻烦把问题描述一下


LINK:https://ask.csdn.net/questions/7622706?answer=53654023
SOURCE:CSDN_ASK
ASK_ID:7622699
ANSWER_ID:53654022
TITLE:请问order by和limit一起用有什么错误吗
ANSWER:

oracle 不能使用 limit,正确的语法如下


–只获取前10行
select from emp fetch first 10 row only;
–排序后获取前5行
select
from emp order by sal first fetch 5 row only;
–跳过前3行,获取后5行
select from emp order by sal offset 3 rows fetch next 5 rows only;
–获取前百分之十的行
select
from emp fetch next 10 percent rows only;

以上语法是在oracle12c新增的,如果是更老的版本,建议结合row_number() over(order by )使用,常规的rownum容易出现分页数据重复或者遗漏的问题


LINK:https://ask.csdn.net/questions/7622699?answer=53654022
SOURCE:CSDN_ASK
ASK_ID:7622617
ANSWER_ID:53654013
TITLE:关于数据库中账号的登陆设备管理问题
ANSWER:

不是微信的开发人员,怎么可能知道微信后台是怎么设计的,你加把油去腾讯应聘试试吧,没准就能看到微信源码了


LINK:https://ask.csdn.net/questions/7622617?answer=53654013
SOURCE:CSDN_ASK
ASK_ID:7622532
ANSWER_ID:53653791
TITLE:Excel用时间函数提取日期中的年月日(月日用两位数表示)
ANSWER:

用text格式化日期后,用left/right/mid去截取就行了,比如年就是截左边起4个字符


LINK:https://ask.csdn.net/questions/7622532?answer=53653791
SOURCE:CSDN_ASK
ASK_ID:7622537
ANSWER_ID:53653790
TITLE:Data Studio这个软件有没有人知道能不能连win10本地的Mysql8.0
ANSWER:

openGauss 的Data Studio是专门为openGauss数据库开发的,肯定不能连mysql,这个软件名称起得太没有特点了,一堆名字类似的软件.
如果要我推荐一个免费的mysql图形界面工具的话,那当然是mysql官方的免费工具workbench了


LINK:https://ask.csdn.net/questions/7622537?answer=53653790
SOURCE:CSDN_ASK
ASK_ID:7622460
ANSWER_ID:53653784
TITLE:oracle多列合并为一列问题
ANSWER:
SELECT EXTRACTVALUE(t2.column_value, ‘node()’) VALUE
FROM (SELECT *
FROM TABLE(XMLSEQUENCE(cursor (select 1 字段1, 2 字段2
from dual
union all
select 2, 4
from dual)))) t1,
TABLE(XMLSEQUENCE(EXTRACT(t1.column_value, ‘/ROW/node()’))) t2

img


下面这个sql就是获取上面那个sql的所有非空值。


你咋这么多奇奇怪怪的想法


LINK:https://ask.csdn.net/questions/7622460?answer=53653784
SOURCE:CSDN_ASK
ASK_ID:7621643
ANSWER_ID:53652902
TITLE:sql更改表数据类型有哪些限制?
ANSWER:

首先,定义varchar2类型的字段时,是要加上长度的,不加会报错。
然后,楼上说的字符转数字可以强转也是错的,至少在oracle里是不支持的


img


img


在有数据的情况下,修改字段类型为其他类型都是不行的,只有同种类型可以把短的改成长的或者更精确的 ,比如timestamp其实是更精确的date


LINK:https://ask.csdn.net/questions/7621643?answer=53652902
SOURCE:CSDN_ASK
ASK_ID:7621728
ANSWER_ID:53652894
TITLE:Sql语句查询 出现以下问题
ANSWER:

把最后一行的 group by s.Sno 删掉就能查出数据来了。
你前面根本没有使用聚合函数,为什么后面要加group by 呢?


LINK:https://ask.csdn.net/questions/7621728?answer=53652894
SOURCE:CSDN_ASK
ASK_ID:7621659
ANSWER_ID:53652565
TITLE:ALTER TABLE TABLE_NAME SHRINK SPACE执行时间很长正常吗?
ANSWER:

经常delete的表,一般delete越多,执行SHRINK SPACE时间就越长。这属于正常现象。
另外,如果不能等这么长时间,可以在数据静态的时候,直接create table as重建这个表,并改名、建索引、编译无效对象


LINK:https://ask.csdn.net/questions/7621659?answer=53652565
SOURCE:CSDN_ASK
ASK_ID:7621605
ANSWER_ID:53652476
TITLE:oracle输出临时表所有列名
ANSWER:

你这个语句如果查出来为空,说明你当前登录的用户下没有建立任何表,请尝试切换到你要查询的表的用户,或者把查询的这个视图换成 DBA_TAB_COLUMNS或 ALL_TAB_COLUMNS,并加上OWNER条件




你这个sql明显不对啊,你TABLE_NAME=‘A’ ,意思就是查名字为’A’这一个字母的表,
如果你b表里面有表名字段,假设这个字段名叫 TABLE_NAME,那么这个sql应该这么写


select a.table_name,a.COLUMN_NAME  
from user_tab_columns a,b
where a.table_name=b.table_name

with as 不是临时表,它只是个子查询,没有创建实体对象,因此无法在静态视图中查询相关信息,如果要尝试获取任意查询sql的字段,可以使用以下sql


SELECT t2.column_value.getrootelement() name
FROM (SELECT
FROM TABLE(XMLSEQUENCE(cursor (select

from (select 1 字段1, 2 字段2
from dual
union all
select 2, 4
from dual)
where rownum = 1)))) t1,
TABLE(XMLSEQUENCE(EXTRACT(t1.column_value, ‘/ROW/node()’))) t2;

img


以上sql就是针对下面这个sql获取字段名


select 1 字段1, 2 字段2
from dual
union all
select 2, 4
from dual

原理就是取一行数据转游标转xml,获取xml的根标签。


另外,还可以通过调用dbms_sql包来获取sql中的字段名称




题主有点离谱了,字段名里怎么会带逗号括号这种东西,这种保留符号会导致各种异常,一般都用下划线。
当然,如果非得查出符号,也不是没办法,需要写一个自定义函数进行转换。不过你这题赚大了


img


这个自定义函数"unistr_xml"我就不贴代码了,原理就是解析字符串,正则匹配、替换、解码




这题还没采纳呀?今天我在复刻数据库内置程序的时候发现了个好玩意,可以解决xml修改符号的问题


SELECT utl_i18n.ENCODE_SQL_XML(t2.column_value.getrootelement()) name
FROM (SELECT
FROM TABLE(XMLSEQUENCE(cursor (select

from (select 1 “字段1,(”, 2 字段2
from dual
union all
select 2, 4
from dual)
where rownum = 1)))) t1,
TABLE(XMLSEQUENCE(EXTRACT(t1.column_value, ‘/ROW/node()’))) t2;

img


LINK:https://ask.csdn.net/questions/7621605?answer=53652476
SOURCE:CSDN_ASK
ASK_ID:7621596
ANSWER_ID:53652473
TITLE:oracle最大连接数是各个用户共用吗?
ANSWER:

如果你说的是processes,这个的确是总进程数,但不要忘了数据库自己也是有后台进程的,你可以观察一下v$process这个视图,建议自己动手在测试环境模拟一下看看效果,注意先提前预留好足够多数量,别让后台进程都起不来了


LINK:https://ask.csdn.net/questions/7621596?answer=53652473
SOURCE:CSDN_ASK
ASK_ID:7621485
ANSWER_ID:53652465
TITLE:oracle存储过程列转行问题
ANSWER:

为啥要用存储过程去创建个视图呢?直接用pivot和unpivot不就好了么?
像你第一个A表转B表


select * from student pivot (sum(score) fot class in (‘数学’ 数学,‘语文’ 语文,‘英语’ 英语));

转回去


select * from  RESULT unpivot (score for class in (“数学”,“语文”,“英语”) );

LINK:https://ask.csdn.net/questions/7621485?answer=53652465
SOURCE:CSDN_ASK
ASK_ID:7621430
ANSWER_ID:53652207
TITLE:关于Mysql8 FULL_GROUP_BY的问题
ANSWER:

像你上面这个语句,正确的写法应该是


select  age,count(*) as cou from stu group by age;

另外这个报错"ERROR 1046 (3D000): No database selected"是没有选择数据库


LINK:https://ask.csdn.net/questions/7621430?answer=53652207
SOURCE:CSDN_ASK
ASK_ID:7621354
ANSWER_ID:53652204
TITLE:MySQL server is running with the --secure-file-priv option so it cannot execute this statement
ANSWER:

改成这样试试


secure-file-priv = “”

或者


secure-file-priv = 

注意等号前后有空格


LINK:https://ask.csdn.net/questions/7621354?answer=53652204
SOURCE:CSDN_ASK
ASK_ID:7621410
ANSWER_ID:53652187
TITLE:原数据每行的数字大小顺序混乱,通过行专列VOL升序,转回行 数据出错,请专家看看
ANSWER:

这题我一看就感觉不对劲,你unpivot转一次又pivot转回去,真能得到这个样子的数据?
这sql要不报错,可参考官方文档


对于sqlserver来说,pivot里in的值是要打中括号的



with t1 as (
select ,ROW_NUMBER() over(PARTITION by ID order by val ) as RID
from test
unpivot(val for col in (n1,n2,n3,n4,n5,n6,n7,n8,n9,n10,n11,n12,n13,n14,n15,n16,n17,n18,n19,n20)) m
)
select * from(
select t.

from t1 t)m
pivot(max(ID) for col in ([n1] ,[n2],[n3],[n4],[n5],[n6],[n7],[n8],[n9],[n10],[n11],
[n12],[n13],[n14],[n15],[n16],[n17],[n18],[n19],[n20])) p

下面是实测截图

img




你用原列,怎么转都会转回去,我把你的sql 的for 改了,重新定义列



with t1 as (
select ,ROW_NUMBER() over(PARTITION by ID order by val ) as RID
from test
unpivot(val for col in (n1,n2,n3,n4,n5,n6,n7,n8,n9,n10,n11,n12,n13,n14,n15,n16,n17,n18,n19,n20)) m
), t2 as (
select * from(
select t.

from t1 t)m
pivot(max(val) for rid in ([1] ,[2] ,[3],[4],[5],[6],[7],[8],[9],[10],[11],
[12],[13],[14],[15],[16],[17],[18],[19],[20])) p)
select id,
max([1]) as n1,max([2]) as n2,max([3]) as n3,max([4]) as n4,max([5]) as n5,
max([6]) as n6,max([7]) as n7,max([8]) as n8,max([9]) as n9,max([10]) as n10,max([11]) as n11,
max([12]) as n12,max([13]) as n13,max([14]) as n14,max([15]) as n15,max([16]) as n16,
max([17]) as n17,max([18]) as n18,max([19]) as n19,max([20]) as n20 from t2
group by id

实测截图

img


LINK:https://ask.csdn.net/questions/7621410?answer=53652187
SOURCE:CSDN_ASK
ASK_ID:7621289
ANSWER_ID:53652159
TITLE:怎么清空表结构并且保留日志
ANSWER:

你说的保留日志是什么日志?
ddl没有rollback的,只有flashback。
一般drop后还是可以马上通过回收站把表找回的


LINK:https://ask.csdn.net/questions/7621289?answer=53652159
SOURCE:CSDN_ASK
ASK_ID:7621281
ANSWER_ID:53652156
TITLE:Oracle如何处理复杂不规范的时间字符串
ANSWER:

写个函数函数,使用to_date穷举所有能看到的日期格式,函数处理中,对于某一种格式转换正常就return,否则就尝试下一种格式,直到所有格式找完都无法转化,就return个空
以下是几种常见日期字符串格式的转换
to_date(字段,'yyyymmdd')
to_date(字段,'yyyy-mm-dd')
to_date(字段,'yyyy-mm-dd hh24:mi:ss')


LINK:https://ask.csdn.net/questions/7621281?answer=53652156
SOURCE:CSDN_ASK
ASK_ID:7621161
ANSWER_ID:53651833
TITLE:pl/sql两个窗口显示不一
ANSWER:

没遇到过这种情况,能不能在两个窗口执行后,分别把程序整个界面截一下图看看,
我有点怀疑不是连的同一个数据库或者不是用的同一个用户登录的,或者某个窗口修改了数据但是没commit


LINK:https://ask.csdn.net/questions/7621161?answer=53651833
SOURCE:CSDN_ASK
ASK_ID:7620960
ANSWER_ID:53651805
TITLE:前台传一个字符串后台转为sql语句
ANSWER:

为啥直接传字符串啊,传对应的参数不好么。
前台不需要把参数拼成一个字符串,你后台用参数来拼sql也更简单。


LINK:https://ask.csdn.net/questions/7620960?answer=53651805
SOURCE:CSDN_ASK
ASK_ID:7621065
ANSWER_ID:53651793
TITLE:写mysql语句时报错 有人看看问题出在哪里吗
ANSWER:

"今天"这个字段是什么类型?


LINK:https://ask.csdn.net/questions/7621065?answer=53651793
SOURCE:CSDN_ASK
ASK_ID:7621186
ANSWER_ID:53651786
TITLE:已经安装成功了tushare,但是还是出现了No module named ‘tushare’
ANSWER:

检查下本地是不是有多个python环境,比如Anaconda


LINK:https://ask.csdn.net/questions/7621186?answer=53651786
SOURCE:CSDN_ASK
ASK_ID:7620869
ANSWER_ID:53651767
TITLE:Sqlserver触发器语句转换成MySql语句
ANSWER:

第一个触发器改成before,用old.sclno 来删Stu_Scl和Scl_Maj就好了
第二个触发器,where里找old.sclno,然后更新成new.sclno


具体语法请参考官方文档


LINK:https://ask.csdn.net/questions/7620869?answer=53651767
SOURCE:CSDN_ASK
ASK_ID:7620872
ANSWER_ID:53651751
TITLE:安装数据库遇到这种问题怎么解决?
ANSWER:

安装器只能同时打开一个,你去任务管理器看下是不是安装程序没退出,没退出就关闭进程;
如果你不知道哪个是mysql的安装程序进程,直接重启电脑也行


LINK:https://ask.csdn.net/questions/7620872?answer=53651751
SOURCE:CSDN_ASK
ASK_ID:7620931
ANSWER_ID:53651744
TITLE:数据库用子查询查出生产部刘姓员工的详细工资情况
ANSWER:

这题貌似重复了


    select 工资表.* from 
工资表,部门表,员工表
where 工资表.eid=员工表.eid
and 员工表.did=部门表.did
and 部门表.did=1001
and 员工表.ename like ‘刘%’

就这?为啥要用子查询?把部门和员工放子查询先检索出id??


LINK:https://ask.csdn.net/questions/7620931?answer=53651744
SOURCE:CSDN_ASK
ASK_ID:7620953
ANSWER_ID:53651738
TITLE:关于#数据库#的问题,如何解决?
ANSWER:
    select 工资表.* from 
工资表,部门表,员工表
where 工资表.eid=员工表.eid
and 员工表.did=部门表.did
and 部门表.did=1001
and 员工表.ename like ‘刘%’

就这?为啥要用子查询?把部门和员工放子查询先检索出id??


LINK:https://ask.csdn.net/questions/7620953?answer=53651738
SOURCE:CSDN_ASK
ASK_ID:7621009
ANSWER_ID:53651724
TITLE:MYSQL把两个字段组合成对象数组
ANSWER:

以下sql在mysql8.0测试通过,mysql是支持json处理的,使用原生json效率会比字符串拼接要高,而且可以避免字符串中存在json保留符号导致生成的json字符串无法被解析的问题


SELECT
u1.id,
u1.NAME,
JSON_ARRAYAGG(JSON_OBJECT(‘id’,u2.id,‘tag’,u2.tag))
FROM
u1,
u2
WHERE
u1.id = u2.u1id
GROUP BY
u1.id,
u1.NAME;

img


LINK:https://ask.csdn.net/questions/7621009?answer=53651724
SOURCE:CSDN_ASK
ASK_ID:7620898
ANSWER_ID:53651700
TITLE:sql TIME_ZONE与DBTIMEZONE分别代表什么?
ANSWER:

DBTIMEZONE是数据库时区


LOCALTIMESTAMP返回会话时区中的当前日期和时间TIMESTAMP


关于 alter session 中的time_zone


LINK:https://ask.csdn.net/questions/7620898?answer=53651700
SOURCE:CSDN_ASK
ASK_ID:7620875
ANSWER_ID:53651687
TITLE:sql怎么查看nls_date_format
ANSWER:

在pl/sql developer中要执行你这条命令的话,请打开一个命令窗口来执行


img


img


LINK:https://ask.csdn.net/questions/7620875?answer=53651687
SOURCE:CSDN_ASK
ASK_ID:7621135
ANSWER_ID:53651676
TITLE:关于Oracle的trunc函数
ANSWER:

工具显示的问题,命令窗口会对显示内容进行截断,你把别名设置长一点他就显示出来了


img


正常sql窗口不会有这个问题


img


LINK:https://ask.csdn.net/questions/7621135?answer=53651676
SOURCE:CSDN_ASK
ASK_ID:7620611
ANSWER_ID:53650948
TITLE:关于nb3类文件的查看
ANSWER:

参考这篇文章


LINK:https://ask.csdn.net/questions/7620611?answer=53650948
SOURCE:CSDN_ASK
ASK_ID:7620477
ANSWER_ID:53650939
TITLE:oracle数据库行转列问题
ANSWER:

你这题和下面这题貌似是样的?


with t as (select 1 a,2 b,3 c from dual)
select * from t unpivot (val for col in (A,B,C))
;

img


LINK:https://ask.csdn.net/questions/7620477?answer=53650939
SOURCE:CSDN_ASK
ASK_ID:7620458
ANSWER_ID:53650935
TITLE:Oracle数据连续时取连续值的第一个
ANSWER:

这题有意思,我本来打算用开窗函数来做,但是想想用迭代思路更清晰,就凑了个迭代的sql出来,数据结果是对的,但应该还可以优化


with cte(year,
month,
l,
begin_month,
b) as
(select year, month, month + 1 l, month begin_month, month b
from month_test
where year = 2020
and month = 1
union all
select cte.year,
cte.l,
cte.l + 1,
case
when b.month is null then
cte.l + 1
else
cte.begin_month
end,
b.month
from cte, month_test b
where cte.l = b.month(+)
and cte.l <= 12)
select YEAR, MONTH, begin_month from cte where b is not null

img


LINK:https://ask.csdn.net/questions/7620458?answer=53650935
SOURCE:CSDN_ASK
ASK_ID:7620418
ANSWER_ID:53650853
TITLE:oracle中使用<>的效率
ANSWER:

如果要优化sql,麻烦把完整sql、各个表的数据量、统计信息、索引及分区情况、执行计划都贴出来,
光看这个什么等不等的那完全是瞎猜


LINK:https://ask.csdn.net/questions/7620418?answer=53650853
SOURCE:CSDN_ASK
ASK_ID:7620104
ANSWER_ID:53650579
TITLE:创建了视图往里面插入数据无法插入
ANSWER:

上一个题问怎么用两个表创建视图,这个题就问怎么往视图里插数据,这是想偷懒结果偷不成了吧。


楼上几位已经说得差不多了,你这两个表的视图的确是不能直接插入数据的,数据库不知道你打算怎么把数据放到那两个表里面去,普通视图只是一个查询sql,本身并不包含数据,所有想对非"单一表且不聚合"视图的修改必须去修改原始表。


当然,如果你数据库不是mysql而是oracle,倒是可以在视图上创建 instead of的触发器,去实现对视图插入数据的动作转化成分别插入两个表的动作


LINK:https://ask.csdn.net/questions/7620104?answer=53650579
SOURCE:CSDN_ASK
ASK_ID:7620341
ANSWER_ID:53650510
TITLE:sqlserver 获取某段时间每天数据的前10行数据
ANSWER:

用开窗函数做分组排序就行了


select t2.* from 
(select t.*, row_number() over(partition by 日期 order by id) rn fromas t) as t2
where rn<=10

LINK:https://ask.csdn.net/questions/7620341?answer=53650510
SOURCE:CSDN_ASK
ASK_ID:7618447
ANSWER_ID:53649475
TITLE:请问app怎么把前端的图片(还有background-image)存储到后台数据库里面并且能够显示出来
ANSWER:

大多数项目里,不会把图片的二进制数据直接存mysql里的,一般就存个链接,图片实际放到别的地方了,比如各种云,或者存到专门的文件数据库比如mongodb。
当然存mysql在技术上是可实现的,既可以直接存二进制数据blob,也可以转换成base64存文本信息


LINK:https://ask.csdn.net/questions/7618447?answer=53649475
SOURCE:CSDN_ASK
ASK_ID:7619215
ANSWER_ID:53649472
TITLE:请求支援,SQL server怎末算出罐数一列数值的和
ANSWER:

我怀疑你是不是问题没描述清?
求一列的和当然用sum,你想问的不可能这么简单吧?


LINK:https://ask.csdn.net/questions/7619215?answer=53649472
SOURCE:CSDN_ASK
ASK_ID:7619339
ANSWER_ID:53649469
TITLE:安装mysql是这个页面如何解决?
ANSWER:

点右边的add添加数据库相关组件继续安装


LINK:https://ask.csdn.net/questions/7619339?answer=53649469
SOURCE:CSDN_ASK
ASK_ID:7619678
ANSWER_ID:53649466
TITLE:mysql想法实现问题
ANSWER:

楼上include_iostream_ 说得不错,但关于第一点要纠正下,翻译数据当然是要放数据库里(不一定是mysql),因为这个东西会不断扩充及修正,没有什么比一句insert或者update更简单的了,前端或者后端是不可能在代码里固定好那么多翻译的数据的。
然后,根据每次需要翻译的量来说,如果是每次只翻译几个,丢给前端或后端无所谓,但如果是超多行数据要进行翻译,当然是丢数据库里关联一下更轻松。
最后,无论什么方案,最终还是要看细化的场景,目前这题里透露的信息不够选择明确的方向


LINK:https://ask.csdn.net/questions/7619678?answer=53649466
SOURCE:CSDN_ASK
ASK_ID:7619511
ANSWER_ID:53649455
TITLE:SQL 如何把行变成列,而且每列对应的结果要减去前面累积的和。
ANSWER:

如果是oracle数据库,可以用pivot;
如果是其他的数据库,通用写法就是case when,而且你这固定列了用case when也没毛病。


另外,如果要写得不套那么多层的话,需要数据库支持开窗函数或者递归,比如sqlserver2017、mysql8、oracle等数据库。


当然,既然前面这个流程表有固定的值,那么不介意再添加一列,第5行等于10、第4行等于18、第3行等于23,以此类推,这样可以让sql得到简化


先来个oracle的


create table step_test (id number,name varchar2(1),hour number);
insert into step_test (ID, NAME, HOUR)
values (1, ‘A’, 8);
insert into step_test (ID, NAME, HOUR)
values (2, ‘B’, 16);
insert into step_test (ID, NAME, HOUR)
values (3, ‘C’, 5);
insert into step_test (ID, NAME, HOUR)
values (4, ‘D’, 8);
insert into step_test (ID, NAME, HOUR)
values (5, ‘E’, 10);
commit;
select *
from (select NAME,
date ‘2021-01-05’ -
(sum(hour) over(order by id desc rows
between UNBOUNDED PRECEDING and current row)) / 24 hh
from step_test x)
pivot(max(hh)
for name in(‘A’ A, ‘B’ B, ‘C’ C, ‘D’ D, ‘E’ E))

img


LINK:https://ask.csdn.net/questions/7619511?answer=53649455
SOURCE:CSDN_ASK
ASK_ID:7619676
ANSWER_ID:53649422
TITLE:SQL如何在一条flashback语句中恢复多个被删除的表?
ANSWER:

闪回表的语法


Flashback table <table_name> to SCN <scn_number> [<ENABLE|DISABLE> TRIGGERS]
Flashback table <table_name> to Timestamp <scn_number> [<ENABLE|DISABLE> TRIGGERS]

根据语法来看,表级闪回是不支持多个表的,只能一个一个表来;如果是要全库闪回,请执行库级的闪回


以下内容来自文章


Flashback可以分为三个级别:


1.Database Level
数据库级别的flashback允许将数据库恢复到某个时间点, 当误删除1个user或误truncate 1张表是适用数据库级别的flashback.


2.Table level
表级flashback可以将1个table回滚到某个时间点或者某个SCN号, 也可以闪回通过Drop命令删除的表.


3.Transaction level
事务级闪回会记录用户事务的每个DML操作, 并给出相应rollback的DML指令. 比如insert操作的rollback指令就是delete.
一般用于rollback 用户已经commit的误操作事务.


LINK:https://ask.csdn.net/questions/7619676?answer=53649422
SOURCE:CSDN_ASK
ASK_ID:7619607
ANSWER_ID:53649357
TITLE:navicat导入sql文件报错,请教一下这是为什么
ANSWER:

不同数据库的语法不是完全兼容的,如果你要把数据导入到mysql数据库里,先得打开这个文件看看语法是否符合mysql规范


LINK:https://ask.csdn.net/questions/7619607?answer=53649357
SOURCE:CSDN_ASK
ASK_ID:7618980
ANSWER_ID:53648572
TITLE:创建存储过程,查询指定操作员所具有的功能权限 怎么用数据库的代码实现呢
ANSWER:

你上一个问题,我建议你检查一下sql的准确性和表里面的数据,看看是不是的确应该查不到
直接用你过程里的sql查一下试试看有没有数据


select T_func_item.func_name
from T_user inner join Relationship_2
on T_user.user_id = Relationship_2.user_id
inner join Relationship_1
on Relationship_2.func_role_id = Relationship_1.func_role_id
inner join T_func_item
on Relationship_1.func_id = T_func_item.func_id
where T_user.user_name = T_func_item.func_name;

另外,你过程里要使用的话,应该还要加一个条件,把传入参数带进去,要不然你不论传什么参数都会显示同样的内容


LINK:https://ask.csdn.net/questions/7618980?answer=53648572
SOURCE:CSDN_ASK
ASK_ID:7618526
ANSWER_ID:53648533
TITLE:mysql不知道怎么回事打不开了,数据库的Navicat也没法用
ANSWER:

挂了,
最简单的方法就是卸载重装
如果要修复成之前的样子,就比较复杂了,要根据启动日志里的信息逐个进行排查修复,最后还不一定能成,因为可能有关键文件被删


LINK:https://ask.csdn.net/questions/7618526?answer=53648533
SOURCE:CSDN_ASK
ASK_ID:7618804
ANSWER_ID:53648527
TITLE:悬赏:MSSQL 表连接长语句性能优化案例求解答?
ANSWER:

一:最显眼的,把union 改成 union all试试
二:你这sql写得太繁杂了,同一个表查了3次,而且3张表的关联条件明明就是FItemID,为啥还要转换成FItemName去关联?还有,如果同一个物料在销售和采购里都有数据,你这一匹配不会导致缺失或者翻倍?不是应该求和后再匹配么?还有一个问题,既然是流水表,难道每次都要对历史数据进行全量统计,就没个时间范围么?
慢不是因为sql长,而是这个sql本就写得有问题。
你比较一下下面这个sql和你的区别


select a.FItemName,
a.FLimitNum,
ISNULL( v.FCurrentNum, 0 ) FCurrentNum
from SIP_MaterialInsLimit a left join
(select FItemID ,sum(FCurrentNum) FCurrentNum from
(select FItemID,count(1) FCurrentNum from SIP_ScalePurch group by FItemID
union all
select FItemID,count(1) FCurrentNum from SIP_ScaleSales group by FItemID ) b) v
on a.FItemID=v.FItemID
where a.FCancel = 0 AND a.FDeleted = 0;

LINK:https://ask.csdn.net/questions/7618804?answer=53648527
SOURCE:CSDN_ASK
ASK_ID:7618667
ANSWER_ID:53648456
TITLE:SQL Sever2012与2019的差异性
ANSWER:

一般这些信息在官网上都有发布,但2012实在太老了,最新的页面只有2016、2017、2019的比较


更多内容可在官网查阅


LINK:https://ask.csdn.net/questions/7618667?answer=53648456
SOURCE:CSDN_ASK
ASK_ID:7618870
ANSWER_ID:53648418
TITLE:使用存储过程向oracle中插入数据时报错 Invalid value for field ‘DRUG_USE_DAYS’
ANSWER:

请贴出你的代码,从这句报错中只能得到一个信息就是 ,对于'DRUG_USE_DAYS'这个字段是无效的值


LINK:https://ask.csdn.net/questions/7618870?answer=53648418
SOURCE:CSDN_ASK
ASK_ID:7618509
ANSWER_ID:53647471
TITLE:mysql 的exists关键字
ANSWER:

如果不存在,才创建。
当它已存在时,你把 if not exists去掉,执行会报错,提示已存在


LINK:https://ask.csdn.net/questions/7618509?answer=53647471
SOURCE:CSDN_ASK
ASK_ID:7618363
ANSWER_ID:53647292
TITLE:连接MySQL这样写有什么问题吗?
ANSWER:

数据库用户权限不对,请检查该用户的权限,比如host及密码


LINK:https://ask.csdn.net/questions/7618363?answer=53647292
SOURCE:CSDN_ASK
ASK_ID:7618364
ANSWER_ID:53647286
TITLE:SQl1张表对多张结构不同的表,如何查询?
ANSWER:

这数据量不大,而且数据也比较单一,完全没必要设计那么多表。
为方便扩展,应该可以预置信息填写模板或者由用户自行定义信息填写模板。
然后做一张表,里面就4个字段,记录id,记录添加人,记录添加时间,详细信息
详细信息里用json结构保存该及记录的所有信息。
前端界面用户选择信息填写模板,自动展示要填的字段,用户填完或者选择完点保存,就生成一个json串插入到上面说的这个表。
要查询也是从这个表查,一个人的数据不会多到哪去,解析json的速度完全可以接受


LINK:https://ask.csdn.net/questions/7618364?answer=53647286
SOURCE:CSDN_ASK
ASK_ID:7618132
ANSWER_ID:53647217
TITLE:⭕️⭕️百度网盘卸载不干净😭
ANSWER:

删掉下面这个注册表项,然后重启电脑,



HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\百度云管家



LINK:https://ask.csdn.net/questions/7618132?answer=53647217
SOURCE:CSDN_ASK
ASK_ID:7618266
ANSWER_ID:53647204
TITLE:C#数据库已连接但无法读取数据库内容
ANSWER:

学会单步调试代码,看参数及变量的变化是否符合预期


LINK:https://ask.csdn.net/questions/7618266?answer=53647204
SOURCE:CSDN_ASK
ASK_ID:7618062
ANSWER_ID:53647200
TITLE:创建存储过程,查询指定操作员所具有的功能权限。指定操作员姓名 ,查询过程与第一个查询相同
ANSWER:

你这又不是个函数,当然没有结果显示呀。
函数可以理解为是有返回值的过程,代码里必须要return对应的值,才能在调用的时候有结果显示出来


LINK:https://ask.csdn.net/questions/7618062?answer=53647200
SOURCE:CSDN_ASK
ASK_ID:7618250
ANSWER_ID:53647191
TITLE:如何用sql来回答这个问题
ANSWER:

你sqlserver教程的创建数据库那篇,把创建数据库的示例代码拿出来改改就好了


LINK:https://ask.csdn.net/questions/7618250?answer=53647191
SOURCE:CSDN_ASK
ASK_ID:7618276
ANSWER_ID:53647189
TITLE:oracle11g安装报错乱码
ANSWER:
  1. 安装程序路径不要包含中文
  2. 确认安装程序的完整性
  3. 需要安装.NET3.5
  4. 要修改stage\cvu\cvu_prereq.xml这个文件,因为11g已经太旧了,官方不推荐在win10使用

LINK:https://ask.csdn.net/questions/7618276?answer=53647189
SOURCE:CSDN_ASK
ASK_ID:7618157
ANSWER_ID:53647057
TITLE:Navicat 连接SQL sever数据库后,对表重命名后一导入数据就提示“对象名无效”
ANSWER:

可能是你导入文件里写的是insert命令,这个建议把你导入数据文件里的表名改成新的表,或者用旧的表名导入完后再去修改表名


LINK:https://ask.csdn.net/questions/7618157?answer=53647057
SOURCE:CSDN_ASK
ASK_ID:7618172
ANSWER_ID:53647053
TITLE:子查询中带有count然后报不是单分组函数的问题
ANSWER:

能只查一次表就不要查两次


select count(1),
count(A.a)
from A

count某个字段的时候,对于空值是不会进行计数统计的




题主说要按条件进行统计


select count(1),
count( case when a.a=1 then 1 end )
from A

此处的case when 对于a.a=1都会转化成一个非空的值,比如1,当然也可以是其他值,然后不满足此条件的都会返回空,结合上一点提到的,count字段只会对非空值进行统计


LINK:https://ask.csdn.net/questions/7618172?answer=53647053
SOURCE:CSDN_ASK
ASK_ID:7617859
ANSWER_ID:53647045
TITLE:请问一下对数据库或者是SQL的优化有哪些
ANSWER:

这个要说的就多了,我推荐一本新书,可在线阅读,也可免费下载


LINK:https://ask.csdn.net/questions/7617859?answer=53647045
SOURCE:CSDN_ASK
ASK_ID:7618051
ANSWER_ID:53646815
TITLE:将excel表的某一列数据导入数据库
ANSWER:

创建一个导入临时表,先把数据导入到临时表
然后创建一个存储过程,以临时表做为游标,逐行循环,循环里判断员工工号是否存在于目标表,如果不存在,则插入,如果存在,那就看你怎么处理,可以在临时表里加个处理成功或者失败的信息,如果处理失败就更新到导入临时表里,然后继续循环下一条。
至于主键,你原来表上的主键是用的什么就用什么


LINK:https://ask.csdn.net/questions/7618051?answer=53646815
SOURCE:CSDN_ASK
ASK_ID:7618040
ANSWER_ID:53646796
TITLE:sql语句中如何将查询没有的记录也显示在查询结果中,显示为0
ANSWER:

说下数据库类型及版本,这个最好是用递归或者表函数来构造一个虚拟表,但有的数据库不支持。
另外,如果不用递归,那就得手动虚拟一个表,包含有全部的值,再外关联你这个数据,比如


SELECT
t.defectClass,
ifnull( s.ct, 0 ) ct
FROM
( SELECT 1 defectClass UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 ) t
LEFT JOIN (
SELECT
defectClass,
count( * ) ct
FROM
qua_particle_iis_his
WHERE
defectClass IN ( 1, 2, 3, 4, 5, 6 )
AND virtualCode = ‘122009200013’
GROUP BY
defectClass
) s ON t.defectClass = s.defectClass

LINK:https://ask.csdn.net/questions/7618040?answer=53646796
SOURCE:CSDN_ASK
ASK_ID:7617826
ANSWER_ID:53646561
TITLE:orcale中,select后面的字段没有全在group by后面,但是编译不报错
ANSWER:

因为你上面声明了与字段名同名的变量,导致sql里查的不是表里面的字段名,而是你的变量了,变量是不需要跟在group by 后面的,你把上面这三个声明的变量删掉再编译和执行一下看看




改成你这样后,执行会报错,下面是实测截图


img


LINK:https://ask.csdn.net/questions/7617826?answer=53646561
SOURCE:CSDN_ASK
ASK_ID:7617824
ANSWER_ID:53646546
TITLE:SQL把同一个人的不同字段在同一行显示出来
ANSWER:

说下数据库类型,不同的数据库有不同的行列转换方式




题主说是mysql 5.7,那就用下面这个方式吧


select id,
sum(case when cid=5 then amount else 0 and) cid5,
sum(case when cid=1 then amount else 0 and) cid1,
sum(case when cid=3 then amount else 0 and) cid3,
sum(case when cid=21 then amount else 0 and) cid21
fromgroup by id;

LINK:https://ask.csdn.net/questions/7617824?answer=53646546
SOURCE:CSDN_ASK
ASK_ID:7617721
ANSWER_ID:53646283
TITLE:Mysql数据库用户余额和购物车在两个表中,如何用用户余额减去求出来的购物车表里的商品总金额啊
ANSWER:

这个表结构设计是不是有问题?你怎么确定购物车里的东西是哪个用户的?按总金额匹配?难道就不会有两个人买了同样金额的东西么?
还是说购物车是全局临时表?但你这java应用是跑连接池的,不可能会用上全局临时表啊


LINK:https://ask.csdn.net/questions/7617721?answer=53646283
SOURCE:CSDN_ASK
ASK_ID:7617202
ANSWER_ID:53645366
TITLE:oracle定义一个异常,并将名字和错误代码绑定
ANSWER:
reject_limit EXCEPTION;
PRAGMA EXCEPTION_INIT(reject_limit, -20003);

既然是课后题,那课堂上应该教了啊,这就一个plsql代码里的基本语法而已


LINK:https://ask.csdn.net/questions/7617202?answer=53645366
SOURCE:CSDN_ASK
ASK_ID:7617193
ANSWER_ID:53645360
TITLE:sql server,电表每小时记录一次当前数值加到表中,算出每个电表每小时、每天、每周的用电量,每层电表每小时、每天、每周用电量
ANSWER:

把你最后要展现的数据格式列出来一下,看看是要几张结果表,分别有哪些字段




给你一个这样的sql应该就够了,其他的都是基于这个数据去做汇总




SELECT
pointrecordid,
DATEPART(year, pointrecorddatetime) 年份,
DATEPART(month, pointrecorddatetime) 月份,
CONVERT(varchar(100), pointrecorddatetime, 111) 日期,
concat(CONVERT(varchar(100), lag ( pointrecorddatetime ) OVER ( partition BY pointrecordid ORDER BY pointrecorddatetime ), 21) ,‘~’,CONVERT(varchar(100), pointrecorddatetime, 21) ) 时段,
pointrecordvalue - lag ( pointrecordvalue ) OVER ( partition BY pointrecordid ORDER BY pointrecorddatetime ) 用电量,
flooridfk
FROM
test_20211228

img


LINK:https://ask.csdn.net/questions/7617193?answer=53645360
SOURCE:CSDN_ASK
ASK_ID:7617064
ANSWER_ID:53645262
TITLE:Qracle数据库用字符串时间格式查询报错
ANSWER:

你这样查会不会报错?


select to_date(‘2019/7/10 下午 06:18:17’,‘yyyy-mm-dd am hh12:mi:ss’) from dual;

img


LINK:https://ask.csdn.net/questions/7617064?answer=53645262
SOURCE:CSDN_ASK
ASK_ID:7617030
ANSWER_ID:53645247
TITLE:python manage.py makemigrations 一运就这样子了 不知道哪里写错了
ANSWER:

参考一下这篇文章


LINK:https://ask.csdn.net/questions/7617030?answer=53645247
SOURCE:CSDN_ASK
ASK_ID:7617022
ANSWER_ID:53645109
TITLE:请问如何让这两个表连接一起
ANSWER:

重复问题,这个结构应该能看懂吧?把一个查询用括号扩起来就能当一张表用了


select * from 
(select 宿舍号,姓名,学院,年级 from 学籍信息表 join 学生信息表 on 学籍信息表.学号=学生信息表.学号) a
left join
(select 宿舍号,count(学号) 宿舍人数 from 学籍信息表
group by 宿舍号 having count(学号)>1
) b
on a.宿舍号=b.宿舍号

LINK:https://ask.csdn.net/questions/7617022?answer=53645109
SOURCE:CSDN_ASK
ASK_ID:7616942
ANSWER_ID:53645001
TITLE:这两个内容无论如何也连接不了
ANSWER:

最简单的改法,
第一行sql ,最后面写个 "where 宿舍号 in ("
然后第二行 ,删掉 ",count(学号) 宿舍人数"
第三行最后 ,加一个 ")"


LINK:https://ask.csdn.net/questions/7616942?answer=53645001
SOURCE:CSDN_ASK
ASK_ID:7616907
ANSWER_ID:53644978
TITLE:关于sqlserver查询条件相同,返回结果不同
ANSWER:

不能简单的判断哪个快,要看数据量和磁盘存储分布的。另外,这与A是实体表还是视图也是有关系的。
count必须统计出来所有记录,但select * from在不同工具里使用时,执行计划会有所区别,比如只显示前多少行,要继续展开才会获取其他行。如果数据量大或者是个复杂逻辑的视图,甚至视图里套union all时,select * from 可能会更快。
但数据量小的时候,这两个差别已经不大了,可以看看执行计划的开销


LINK:https://ask.csdn.net/questions/7616907?answer=53644978
SOURCE:CSDN_ASK
ASK_ID:7616832
ANSWER_ID:53644824
TITLE:Linux无法更改到 var/user1目录:没有那个文件或目录。怎么搞呀
ANSWER:

这只是提示你没有那个目录,不影响其他操作。
如果你不想看到这个报错,就把这个目录建一下


LINK:https://ask.csdn.net/questions/7616832?answer=53644824
SOURCE:CSDN_ASK
ASK_ID:7616851
ANSWER_ID:53644811
TITLE:请问哪里错了?555~
ANSWER:

麻烦把代码放在代码块里,你这发出来的代码看不出来结构。
python是有严格缩进的,多了少了一个空格都不行


LINK:https://ask.csdn.net/questions/7616851?answer=53644811
SOURCE:CSDN_ASK
ASK_ID:7616852
ANSWER_ID:53644800
TITLE:导入excel数据被自动四舍五入没有小数点咋解决
ANSWER:

你看下你对应的接收参数类型是不是设置成整型了


LINK:https://ask.csdn.net/questions/7616852?answer=53644800
SOURCE:CSDN_ASK
ASK_ID:7616539
ANSWER_ID:53644564
TITLE:能插入一个左连接后的表么,具体语句应该怎么样写呢
ANSWER:

如果是oracle,倒可以通过insert all实现,但mysql没有这个语法。
建议使用存储过程,在存储过程中获取前一个表插入的s_id,然后再插入第二个表;
或者提前生成对应的s_id,再分别插入


LINK:https://ask.csdn.net/questions/7616539?answer=53644564
SOURCE:CSDN_ASK
ASK_ID:7616387
ANSWER_ID:53644551
TITLE:Mysql,三表查询求解答面试遇到的
ANSWER:
  1. 有group by 的一个select里,不管是否可以执行查询,记住不要用select * from
  2. 你这个需求是查总分,不用管是什么课程,在确认分数表里的课程字段里的值都存在于课程表中时,可以不用关联课程表
  3. 既然查询结果是名字这一个字段,那么如果严格按照要求,是不能查询出其他字段的,所以上面几位的回答都存在问题
  4. 总分排名前三,但不一定就是三个名字,因为可能存在同分并列的情况,用limit进行行数限制的话,可能会导致数据缺失
  5. 综上,建议使用rank函数来进行排名,再套一层查询rank<=3 的名字

LINK:https://ask.csdn.net/questions/7616387?answer=53644551
SOURCE:CSDN_ASK
ASK_ID:7616702
ANSWER_ID:53644520
TITLE:关于#oracle#的问题,请各位专家解答!想通过自定义一个函数实现select getdate(‘年’) from dual,把多行多列结果都呈现出来
ANSWER:

oracle的函数,使用select的方式,只能返回"一个值",或者说一个字段。你如果想包含多个字段的信息,要么把多个字段的内容合到一个字段里去,要么就要select多次这个函数。
报错的原因正是return后只能接一个值。
正常查询from dual,无论函数写成啥样,也只能返回一行,因为dual这个表就只有一行,除非sql后面有接迭代。
你这描述的需求太奇怪了,直接查视图就行,这个日月年的参数是用来做where条件的,而不是用作数据转换的,为什么要用函数啊?能把背景描述一下么?




我觉得你可能还是没搞清楚项目经理的意思,既然你执意要所谓的多行多列,那我就写个函数把,不过我敢有很大的把握肯定这个函数用不上


create or replace package fun_getdate is
type tb is table of data_view_20211224%rowtype;
function getdate(fun_date varchar2) return tb
pipelined;
end fun_getdate;
/
create or replace package body fun_getdate is
function getdate(fun_date varchar2) return tb
pipelined is
begin
for rec in (select *
from data_view_20211224 a
where a.date_type = fun_date) loop
PIPE ROW(rec);
end loop;
RETURN;
end;
end fun_getdate;
/

select * from fun_getdate.getdate(‘年’);

实测截图


img


LINK:https://ask.csdn.net/questions/7616702?answer=53644520
SOURCE:CSDN_ASK
ASK_ID:7616382
ANSWER_ID:53643917
TITLE:samba共享,ubuntu能访问windows,但是windows访问不了Ubuntu
ANSWER:

你看下你安装的samba是1.0版本还是2.0版本
目前win10默认不支持1.0版本,需要到控制面板-程序和功能里启用windows功能,找到smb1.0进行添加


LINK:https://ask.csdn.net/questions/7616382?answer=53643917
SOURCE:CSDN_ASK
ASK_ID:7616377
ANSWER_ID:53643908
TITLE:就是一个pandas的问题。求解答
ANSWER:

DataFrame对象没有"values1"这个东西


LINK:https://ask.csdn.net/questions/7616377?answer=53643908
SOURCE:CSDN_ASK
ASK_ID:7616324
ANSWER_ID:53643899
TITLE:我的WordPress网页中需要实现 点击按钮出来联系框弹窗的功能。
ANSWER:

创建模态窗口
将短代码(例如 [Modal-Window id=1])复制并粘贴到您希望模态窗口出现的位置。
插入一个链接https://wow-estore.com/#wow-modal-id-1 到页面。



实际上就是跳转到指定位置
文档里有说


LINK:https://ask.csdn.net/questions/7616324?answer=53643899
SOURCE:CSDN_ASK
ASK_ID:7616329
ANSWER_ID:53643893
TITLE:继续点就返回了 我要写30个人的
ANSWER:

把代码拉出来溜溜


LINK:https://ask.csdn.net/questions/7616329?answer=53643893
SOURCE:CSDN_ASK
ASK_ID:7616331
ANSWER_ID:53643881
TITLE:是否有办法将输入的一串数字就以数字的形式保存在文件中?
ANSWER:

你把它转换成文本,以文本方式写入应该就不会乱码了。因为你是用文本编辑器打开的这个文件,当然只能识别文本了


LINK:https://ask.csdn.net/questions/7616331?answer=53643881
SOURCE:CSDN_ASK
ASK_ID:7616342
ANSWER_ID:53643878
TITLE:安装不了Python程序
ANSWER:

这是要你安装jdk
下载页面


另外可能要手动配置环境变量


LINK:https://ask.csdn.net/questions/7616342?answer=53643878
SOURCE:CSDN_ASK
ASK_ID:7616316
ANSWER_ID:53643874
TITLE:python程序设计qwq help!!
ANSWER:

list反转参考这篇


统计字母个数用正则模块的findall找到所有字母作为一个list,再计算这个list的长度


最后一题简单点做就是一个个数字遍历,去判断
计算素数参考


如果这题质量要高的话,其实是考的算法效率,有些数字是可以直接跳过的,比如所有偶数,至于其他更高级的,你估计学不来了吧


LINK:https://ask.csdn.net/questions/7616316?answer=53643874
SOURCE:CSDN_ASK
ASK_ID:7616335
ANSWER_ID:53643869
TITLE:请问如何解析复杂sql字符串中的所有表名,在不连接数据库的情况下?
ANSWER:

这个是用python解析的代码


当然java什么的都可以,用Antlr4可以构建适用于多种语言的语法解析器,看你熟悉哪种语言,就用哪种,可以在网上搜索相关资料,或者参考这篇文章


LINK:https://ask.csdn.net/questions/7616335?answer=53643869
SOURCE:CSDN_ASK
ASK_ID:7616322
ANSWER_ID:53643860
TITLE:输出excel怎么去掉表头和行号?
ANSWER:

先把你输出的代码贴出来,再看怎么改你的代码


LINK:https://ask.csdn.net/questions/7616322?answer=53643860
SOURCE:CSDN_ASK
ASK_ID:7616303
ANSWER_ID:53643842
TITLE:请问如何在oracle数据库中发送ssl的smtp邮件,不要调Java的
ANSWER:

啊这。。。你如果尝试过搜索,就应该会搜到我的一篇文章


img


LINK:https://ask.csdn.net/questions/7616303?answer=53643842
SOURCE:CSDN_ASK
ASK_ID:7616266
ANSWER_ID:53643831
TITLE:python怎么画出随机个数,随机高宽的矩形和三角形
ANSWER:

定义多个随机数
1.图形个数
2.矩形的高
3.矩形的宽
4.三角形的边长a
5.三角形的边长b
6.三角形的边长c(小于 a+b 且 大于 a-b的绝对值)
7.下一个图形(1代表矩形,2代表三角形,只能在1和2中间随机)
接下来你就可以取这些随机数去画了


LINK:https://ask.csdn.net/questions/7616266?answer=53643831
SOURCE:CSDN_ASK
ASK_ID:7616267
ANSWER_ID:53643827
TITLE:mysql模糊查询失效
ANSWER:

LIMIT 1,10 表示从第2行开始检索,一共检索10条记录,即查询第2到11条记录,你这表里只有2条记录,带上这个限制,那么不管怎样都只会查到1条数据
你这么查下试试


SELECT * FROM cert_project WHERE name LIKE ‘%测试%’

LINK:https://ask.csdn.net/questions/7616267?answer=53643827
SOURCE:CSDN_ASK
ASK_ID:7616088
ANSWER_ID:53643818
TITLE:这个图片文件怎么都删不掉怎么办
ANSWER:

刷新一下桌面或者重启电脑如果还在的话,建议使用某些安全软件的文件粉碎工具


LINK:https://ask.csdn.net/questions/7616088?answer=53643818
SOURCE:CSDN_ASK
ASK_ID:7616090
ANSWER_ID:53643815
TITLE:这是招人是培训吗?问一下
ANSWER:

这。。。。。看上去不像正经公司缺开发的情况。。。反正如果要收你钱就不搞了嘛


LINK:https://ask.csdn.net/questions/7616090?answer=53643815
SOURCE:CSDN_ASK
ASK_ID:7616103
ANSWER_ID:53643808
TITLE:虚拟环境创建失败,怎么解决?
ANSWER:

没有配置代理,那个url在国内无法访问
可以参考此篇文章进行配置


LINK:https://ask.csdn.net/questions/7616103?answer=53643808
SOURCE:CSDN_ASK
ASK_ID:7616197
ANSWER_ID:53643796
TITLE:win10,送的正版office2019,激活后才不到两个月就显示没激活?怎么办呀?
ANSWER:

找售后,售后不解决就赔钱。
现在买电脑,操作系统和软件没有什么正版盗版一说,只有买了授权和没买授权的区别。
卖电脑的如果告诉你是正版,就要他提供相关的序列号,如果没给,那就是破解的,没有授权。
office目前没有永久激活的码流出,只能用kms做180天的激活,过后就要重新激活


LINK:https://ask.csdn.net/questions/7616197?answer=53643796
SOURCE:CSDN_ASK
ASK_ID:7616206
ANSWER_ID:53643784
TITLE:帮我看看我这个大蜘蛛杀毒软件的防火墙出什么问题了
ANSWER:

没啥问题,这不正常网络使用么


LINK:https://ask.csdn.net/questions/7616206?answer=53643784
SOURCE:CSDN_ASK
ASK_ID:7616230
ANSWER_ID:53643779
TITLE:INSERT INTO auth_permission VALUES (1, ‘Can add log entry’, 1, ‘add_logentry’);含义
ANSWER:

往auth_permission这个表里插入一行数据
auth_permission是Django用来做权限管理的其中一张表名,
你查询这张表,会发现有4个字段,


idnamecontent_type_idcodename
1Can add log entry1add_logentry

上面就是显示的你执行这个插入动作后查询这张表的效果,
实际上这个插入命令就是定义一个权限,权限名称叫 "Can add log entry",然后对应的代码名称是"add_logentry"


LINK:https://ask.csdn.net/questions/7616230?answer=53643779
SOURCE:CSDN_ASK
ASK_ID:7616118
ANSWER_ID:53643658
TITLE:为什么账号对密码错能进入登陆失败提示页,账号错却会直接报错?
ANSWER:

貌似没有 getUserByUname 查不出数据时的异常处理


LINK:https://ask.csdn.net/questions/7616118?answer=53643658
SOURCE:CSDN_ASK
ASK_ID:7616016
ANSWER_ID:53643653
TITLE:如何解决导出的excel的数据有科学计数法的问题?
ANSWER:

如果有小数,就傻了


LINK:https://ask.csdn.net/questions/7616016?answer=53643653
SOURCE:CSDN_ASK
ASK_ID:7615870
ANSWER_ID:53643501
TITLE:遇到奇葩问题:用sqoop 把mysql导入hive报错,有些表导入正常,有些表报错
ANSWER:

你源数据是datetime类型,但目标表却是string类型。要么改目标表字段类型,要么导入的sql中对日期进行格式化处理转换成字符串类型


SELECT  date_format(`TradingDay`,‘%Y-%m-%d %H:%i:%S’) TradingDay

LINK:https://ask.csdn.net/questions/7615870?answer=53643501
SOURCE:CSDN_ASK
ASK_ID:7615818
ANSWER_ID:53643364
TITLE:一条关于数据库的问题
ANSWER:

对两个表分别求和,作为两个子查询,然后再将两个子查询join起来,注意要对某个商品可能不存在于某张表的处理,所以此时应该还要有一个完整的商品档案表作为主表,去左连接这两个子查询




select 商品,进货数量,销售数量 from 商品信息表 c 
left join
(select 商品,sum(进货数量) 进货数量 from 进货记录表 group by 商品) a
on c.商品=a.商品
left join
,(select 商品,sum(销售数量) 销售数量 from 销售记录表 group by 商品) b
on c.商品=b.商品

LINK:https://ask.csdn.net/questions/7615818?answer=53643364
SOURCE:CSDN_ASK
ASK_ID:7615778
ANSWER_ID:53643361
TITLE:mysql 一个库里两个表一部分数据,插入到另一个库里两个表中,如何处理外键?
ANSWER:

先插a表,不要插id字段,让id自动生成,然后获取刚刚插入的这笔数据的id的值,把要插b表数据中的a_id替换成刚刚获取的值后,再插入b表。
不过,建议在PRO库里的A表增加一个字段,保留test库的原始id,以方便后期数据核对,同理B表也应该增加一个字段保留原始id


LINK:https://ask.csdn.net/questions/7615778?answer=53643361
SOURCE:CSDN_ASK
ASK_ID:7615718
ANSWER_ID:53643356
TITLE:关于#报表#的问题:水晶报表连接官网文件就出错,连接Oracle数据库
ANSWER:

你连接的这个xtreme.mdb玩意,肯定不是oracle数据库呀
mdb文件常见于access数据库文件的后缀,
连oracle数据库是要填域名端口和SID(或service_name)的


LINK:https://ask.csdn.net/questions/7615718?answer=53643356
SOURCE:CSDN_ASK
ASK_ID:7613795
ANSWER_ID:53643063
TITLE:数据库的一个简单的小问题
ANSWER:

都不知道你表结构,怎么写?


LINK:https://ask.csdn.net/questions/7613795?answer=53643063
SOURCE:CSDN_ASK
ASK_ID:7615442
ANSWER_ID:53643055
TITLE:关于循环终止条件的问题
ANSWER:

当X是整数时, x>4和x>=5是等价的


LINK:https://ask.csdn.net/questions/7615442?answer=53643055
SOURCE:CSDN_ASK
ASK_ID:7615422
ANSWER_ID:53642963
TITLE:mysql,这个问题要怎么搞
ANSWER:
—老手一般这么写
select 部门名称,民族,COUNT(1) from bm,yg where 所属部门编号=部门编号 GROUP BY 部门名称,民族;
—教程里一般这么写
select bm.部门名称,yg.民族,COUNT(1) 人数 from yg JOIN BM ON yg.所属部门编号=bm.部门编号 GROUP BY bm.部门名称,yg.民族;

LINK:https://ask.csdn.net/questions/7615422?answer=53642963
SOURCE:CSDN_ASK
ASK_ID:7615414
ANSWER_ID:53642959
TITLE:mysql关于这个问题要如何去解决
ANSWER:

是这个意思?


select 部门,民族,count(1)  人数 fromgroup by  部门,民族;

LINK:https://ask.csdn.net/questions/7615414?answer=53642959
SOURCE:CSDN_ASK
ASK_ID:7615305
ANSWER_ID:53642957
TITLE:oracle数据库的sysdba为何不能执行某些语句?
ANSWER:

根据用户名看,你这是多租户可插拔数据库,
CDB是管理多租户的环境,PDB才是正常的用户数据库,一般业务操作都是在PDB内进行。
一般作为sysdba登录时,要使用sys用户,除非有授权。
你现在连的是cdb还是pdb?
查一下这个看看


select sys_context (‘USERENV’, ‘CON_NAME’) from dual;

另外,那个执行按钮没亮起来,一般是没连上数据库,plsql默认支持多用户连接,你看看下面的连接信息是不是和上面保持一致


LINK:https://ask.csdn.net/questions/7615305?answer=53642957
SOURCE:CSDN_ASK
ASK_ID:7615355
ANSWER_ID:53642860
TITLE:Oracle数据库回滚的问题
ANSWER:

用下面这个sql可以查询1个小时前这个表的数据是啥样的,也可以把时间继续往前推,具体能推到多钱,得看数据库设置及相关空间大小


select * from table_name as of timestamp(sysdate-1/24);

具体操作请自行搜索关键词 oracle 闪回


LINK:https://ask.csdn.net/questions/7615355?answer=53642860
SOURCE:CSDN_ASK
ASK_ID:7615250
ANSWER_ID:53642740
TITLE:MySQL:unknown variable 怎么解决
ANSWER:

把路径换一下,别用这种长文件夹又带符号又带中文的


LINK:https://ask.csdn.net/questions/7615250?answer=53642740
SOURCE:CSDN_ASK
ASK_ID:7615169
ANSWER_ID:53642738
TITLE:使用Navicat for MySQL出现错误1364,怎样解决
ANSWER:

你这是做了什么操作?麻烦把操作步骤说清楚


LINK:https://ask.csdn.net/questions/7615169?answer=53642738
SOURCE:CSDN_ASK
ASK_ID:7614925
ANSWER_ID:53642731
TITLE:sql 数组格式的json字符串,转成in可用的条件怎么实现?
ANSWER:
SELECT *
FROM
JSON_TABLE(
‘[“2”,“3”]’,
[*]&#34;<br/> <span class="hljs-keyword">COLUMNS</span>(<br/> <span class="hljs-keyword">Value</span> <span class="hljs-type">INT</span> <span class="hljs-keyword">PATH</span> &#34;
)
) data;

img


LINK:https://ask.csdn.net/questions/7614925?answer=53642731
SOURCE:CSDN_ASK
ASK_ID:7614923
ANSWER_ID:53642718
TITLE:各位帮我解答一下,下面的问题?
ANSWER:

这个sql能在oracle执行呀,有啥问题?


LINK:https://ask.csdn.net/questions/7614923?answer=53642718
SOURCE:CSDN_ASK
ASK_ID:7614894
ANSWER_ID:53642714
TITLE:oracle关闭回收站有什么效果?
ANSWER:

你执行关闭后,再检查一下这个参数看是开还是关,有时候由于存在优先级更高的策略,你修改是不成功的


LINK:https://ask.csdn.net/questions/7614894?answer=53642714
SOURCE:CSDN_ASK
ASK_ID:7614834
ANSWER_ID:53642703
TITLE:oracle查询入职年限大于20年的员工信息
ANSWER:

这里先要确定一个问题,是自然年20年,还是简单的36520?是否需要考虑闰年?不满365天但跨了年算不算1年等等情况。
假设都不考虑,那么最简单的当然是


select * from emp where sysdate-HIREDATE>=36520;

LINK:https://ask.csdn.net/questions/7614834?answer=53642703
SOURCE:CSDN_ASK
ASK_ID:7614779
ANSWER_ID:53642421
TITLE:sql Server 触发器如何实现两张表的同一数据进行更新?
ANSWER:

学习一门语言,先看官方文档


LINK:https://ask.csdn.net/questions/7614779?answer=53642421
SOURCE:CSDN_ASK
ASK_ID:7614731
ANSWER_ID:53642278
TITLE:这也是找到饼干的一种非常真实的方式。在我看来,这与偷饼干非常相似。
ANSWER:

源码都拿到了,那当然就知道怎么计算cookie了,当然必须是完整源码,比如计算过程中使用的私钥也得有。


LINK:https://ask.csdn.net/questions/7614731?answer=53642278
SOURCE:CSDN_ASK
ASK_ID:7614802
ANSWER_ID:53642254
TITLE:oracle回收站没找到被删除的数据
ANSWER:

查这个 select * from dba_recyclebin;
或 user_recyclebin;


plsql developer 这里显示有问题,有时候不要太依赖可视化工具


LINK:https://ask.csdn.net/questions/7614802?answer=53642254
SOURCE:CSDN_ASK
ASK_ID:7614747
ANSWER_ID:53642250
TITLE:请问怎么用plsql的语句,执行查出来的语句的储存过程
ANSWER:

把查出来的命令当动态sql执行即可


begin
for rec in (select ‘begin sys.dbms_shared_pool.purge(’‘’ || t.ADDRESS || ‘,’ ||
t.hash_value || ‘’‘,’‘c’‘); end;’ SQL_TEXT
from v$sql t
where t.SQL_ID = ‘3avukhwacnad6’) loop
execute immediate rec.sql_text;
end loop;
end;
/

上面我写成了循环, 是方便修改成其他查询条件也能执行


LINK:https://ask.csdn.net/questions/7614747?answer=53642250
SOURCE:CSDN_ASK
ASK_ID:7614596
ANSWER_ID:53642105
TITLE:DB2数据库相关!有人能说说嘛
ANSWER:

你确定需求没描述错?不是要整月汇总,而是每月最后一天?
你要月末的话,不直接in三个月末的日期就好了么,加上当天就一共in4个日期,然后按日期group by ,统计交易次数


LINK:https://ask.csdn.net/questions/7614596?answer=53642105
SOURCE:CSDN_ASK
ASK_ID:7614630
ANSWER_ID:53642100
TITLE:oracle xmltype内容只有一个字段,但是量太多,用xmltable解析报错,删成几百个就没问题,如何解决?
ANSWER:

你给一小段完整的xml文本出来,我去试试




我做了个测试,模拟25万个记录



create table xml_test (a clob);

DECLARE
l_line varchar2(4000);
l_clob clob;
BEGIN
l_line := ‘<IN>
<AUACTIVITY_ID>372683</AUACTIVITY_ID>
</IN>
<IN>
<AUACTIVITY_ID>807436</AUACTIVITY_ID>
</IN>
<IN>
<AUACTIVITY_ID>386725</AUACTIVITY_ID>
</IN>
<IN>
<AUACTIVITY_ID>400718</AUACTIVITY_ID>
</IN>
<IN>
<AUACTIVITY_ID>386915</AUACTIVITY_ID>
</IN>’
;
EXECUTE IMMEDIATE ‘TRUNCATE TABLE xml_test DROP STORAGE’ ;
insert into xml_test values (‘<XML>’);
SELECT a
INTO l_clob
FROM xml_test
for update;
dbms_lob.open(l_clob, dbms_lob.lob_readwrite);
for i in 1..50000 loop
dbms_lob.writeappend(l_clob, lengthb(l_line), l_line);
end loop;
dbms_lob.writeappend(l_clob, lengthb(‘</XML>’), ‘</XML>’);
dbms_lob.close(l_clob);
commit;
END;
/

SELECT COUNT(AUACTIVITY_ID)
FROM xml_test,
XMLTABLE(‘XML/IN’ PASSING XMLTYPE(a) COLUMNS AUACTIVITY_ID NUMBER PATH
‘/IN/AUACTIVITY_ID’);

可以很快查出结果


img


根据你这个sql中的 ":auIdParams“来看,应该是使用参数传入,这里容易忽视一个问题,就是varchar2的最大长度只有三万多,简单的字符串传入会导致内容被截断,导致xml校验不通过。
一般建议的用法是像我上面这个测试案例一样,用表中的字段作为参数去进行解析;
或者使用动态sql绑定变量的方式去查询,比如


–数组变量接收结果
EXECUTE IMMEDIATE q‘{SELECT AUACTIVITY_ID
FROM XMLTABLE(
XML/IN’ PASSING XMLTYPE(:1) COLUMNS AUACTIVITY_ID NUMBER PATH ‘/IN/AUACTIVITY_ID
) }‘
into rec using auIdParams;

–或者插表
EXECUTE IMMEDIATE q’{
insert into table_a (AUACTIVITY_ID)
SELECT AUACTIVITY_ID
FROM XMLTABLE(
XML/IN’ PASSING XMLTYPE(:1) COLUMNS AUACTIVITY_ID NUMBER PATH ‘/IN/AUACTIVITY_ID
) }'
using auIdParams;

LINK:https://ask.csdn.net/questions/7614630?answer=53642100
SOURCE:CSDN_ASK
ASK_ID:7614574
ANSWER_ID:53642002
TITLE:相同年月日的两条数据,只能统计为一次
ANSWER:

首先楼上说的distinct 应该不符合所有场景,从这个结构上来看,会有其他列数据不一样但日期一样的情况。
理论上来说,这玩意不应该直接求和,算2台么?表关联有问题导致有笛卡尔积数据重复?
如果关联有问题就先解决关联问题;
如果确定关联没问题,那就改成下面这样


select
to_char(d.c_ss_date,‘yyyy-mm-dd’) 手术日期,
sum(case when d.c_ss_type in (‘1’,‘手术’) then 1 else 0 end) 手术台次,
sum(case when d.c_ss_type in (‘2’,‘治疗性操作’) then 1 else 0 end) 治疗性操作台次,
sum(case when d.c_ss_type in (‘3’,‘诊断性操作’) then 1 else 0 end) 诊断性操作台次,
sum(case when d.c_ss_type in (‘4’,‘介入治疗’) then 1 else 0 end) 介入治疗台次,
sum(case when d.c_ss_type in (‘5’,‘微创手术’) then 1 else 0 end) 微创手术台次
from
MR_SY_MAIN B,MR_SY_MAIN_ZYXX C,MR_SY_SSXX D
where c.c_reg_id=d.c_bill_id
and b.c_reg_id=c.c_reg_id
and b.c_reg_id=d.c_bill_id
–and b.c_zyh=‘2119283’
and B.C_CHECKED >= 2
and c.c_out_date>=to_date(‘2021-11-01 00:00:00’,‘yyyy-mm-dd hh24:mi:ss’)
and c.c_out_date<=to_date(‘2021-11-30 23:59:59’,‘yyyy-mm-dd hh24:mi:ss’)
–and c.c_out_dept=‘61’ --出院科室泌尿外科
and b.c_zyh=‘2119283’
group by to_char(d.c_ss_date,‘yyyy-mm-dd’)

如果你确定无论关联出来多少台都只算1台的话,那就再对这些求和字段再写个case when ,大于0台算1台,否则为0台


LINK:https://ask.csdn.net/questions/7614574?answer=53642002
SOURCE:CSDN_ASK
ASK_ID:7614528
ANSWER_ID:53641979
TITLE:string_agg这个合并数据怎么设置分隔符
ANSWER:

b2c_owner_user是用户自定义包,网上找不到的,你要打开一下这个包,看string_agg要传入什么参数以及参数类型是什么


LINK:https://ask.csdn.net/questions/7614528?answer=53641979
SOURCE:CSDN_ASK
ASK_ID:7614497
ANSWER_ID:53641938
TITLE:mysql子查询的子查询无法使用外层参数问题
ANSWER:

你套了两层括号,它认不到了,删掉一层即可


SELECT 
t.user_id,
(SELECT COUNT(1) from t_cust_base_info a
LEFT JOIN t_chat_record b on a.CUST_ID = b.MSG_FROM
LEFT JOIN t_employee_base_info c on b.MSG_RECEIVE = c.EMPLOYEE_ID
WHERE c.SYS_USER_ID = t.user_id
AND date_format(b.MSG_TIME,‘%Y-%m-%d’) >= ‘2021-12-01’
AND date_format(b.MSG_TIME,‘%Y-%m-%d’)<= ‘2021-12-21’
GROUP BY a.CUST_ID) as INTERACTIVE_CUST_NUM,
sum(t2.AVG_REPLY_TIME),
sum(t2.REPLY_PERCENTAGE)
FROM sys_user t
LEFT JOIN t_employee_base_info t1 on t.user_id = t1.SYS_USER_ID
LEFT JOIN t_statistic_employee_info t2 on t1.EMPLOYEE_ID = t2.EMPLOYEE_ID
where t.user_id in( ‘100’,‘103’)
AND t2.STAT_TIME >= ‘2021-12-01’
AND t2.STAT_TIME <= ‘2021-12-21’
GROUP BY t.user_id

注:以上sql只针对报错问题解决,不表示认可此sql逻辑,也未进行优化


LINK:https://ask.csdn.net/questions/7614497?answer=53641938
SOURCE:CSDN_ASK
ASK_ID:7614470
ANSWER_ID:53641934
TITLE:Ubuntu查询不到mysql状态
ANSWER:

从1图和2图上来看,是没有安装mysql数据库,
第3图是安装mariadb数据库(mariadb不是mysql,它是mysql的分支)和python的mysql组件,
第4图是windows环境,与本题无关。


所以根据以上图只能得出一个答案,那就是这台linux服务器上没有安装mysql数据库


如果你要启动第3图安装的mariadb数据库,应该是启动mariadb,而不是mysql


LINK:https://ask.csdn.net/questions/7614470?answer=53641934
SOURCE:CSDN_ASK
ASK_ID:7614454
ANSWER_ID:53641930
TITLE:SQL中关于创建外键的问题
ANSWER:

这个报错是告诉你 cjdj这个表里面 ,没有kch这个字段


LINK:https://ask.csdn.net/questions/7614454?answer=53641930
SOURCE:CSDN_ASK
ASK_ID:7614336
ANSWER_ID:53641687
TITLE:select查询语句的优化问题
ANSWER:

有没有明确的报错信息?


LINK:https://ask.csdn.net/questions/7614336?answer=53641687
SOURCE:CSDN_ASK
ASK_ID:7614324
ANSWER_ID:53641682
TITLE:postgresql 使用table的默认前缀为public
ANSWER:

你对象创建在public下了,跨SCHEMA查询当然要加对应的SCHEMA名称,因为不同的SCHEMA下可以创建相同名称的对象


LINK:https://ask.csdn.net/questions/7614324?answer=53641682
SOURCE:CSDN_ASK
ASK_ID:7614302
ANSWER_ID:53641670
TITLE:有如下两条MySQL连接查询语句,结果是一样的,敢问哪种用法效率更高!
ANSWER:

这几个表在不同数据量的情况下,效率会不一样,比较靠谱的方式还是看执行计划,当然实践出真知,不到生产上跑一跑,也无法100%确定数据库会不会自行对sql进行优化,优化方向是否符合自己的预期


LINK:https://ask.csdn.net/questions/7614302?answer=53641670
SOURCE:CSDN_ASK
ASK_ID:7614277
ANSWER_ID:53641656
TITLE:将表A中数值的代码替换成表B中对应代码的汉字
ANSWER:

表A是一个字符串?
首先这个不能简单的使用replace,因为可能会出现 数字有部分相同的情况,比如 25 和225
所以看下这个字符串的特征,需要替换的数字,除了第一位,其他数字前面都有一个箭头,因此可以在字符串前面拼一个箭头,那样就可以使用replace替换箭头加数字了
然后,由于需要替换多次,所以要以B表记录为游标,循环对这个字符串执行替换,
最后输出完成替换的字符串就好了




由于题主要求使用sql,那么就得使用with as递归写法了


with cte as 
(select replace(‘915(2021-11-25)>1024(2021-11-17)>119(2020-01-01)’,id,name) str ,1 lvl
from csdy_1224 where o=1
union all
select replace(cte.str,b.id,b.name),lvl+1 from cte ,csdy_1224 b where b.o=lvl
)
select * from cte where lvl=(select max(b.o)+1 from csdy_1224 b)

以下为实测截图

img


LINK:https://ask.csdn.net/questions/7614277?answer=53641656
SOURCE:CSDN_ASK
ASK_ID:7614215
ANSWER_ID:53641623
TITLE:dbeaver 21.3保持链接
ANSWER:

几分钟不动 就会断开连接,这不是软件问题,是数据库策略或者网络策略的问题,请咨询数据库管理员或者网络管理员


LINK:https://ask.csdn.net/questions/7614215?answer=53641623
SOURCE:CSDN_ASK
ASK_ID:7614095
ANSWER_ID:53641618
TITLE:没有SQL SERVER软件 可以帮打一下表格吗(参考图一)
ANSWER:

可以到这个在线数据库平台上弄


而且你这截图是认真的?让别人对着图片打码?


LINK:https://ask.csdn.net/questions/7614095?answer=53641618
SOURCE:CSDN_ASK
ASK_ID:7614077
ANSWER_ID:53641613
TITLE:SQL数据库N对N的问题
ANSWER:

这是个程序设计需求啊,要写多个函数或者过程,涉及到库存数量的占用和释放
可用库存的获取有两种方式,
一种是判断可用库存的时候,结合当前库存表和未完结单据进行计算,
另一种就是单据操作的时候,对库存表进行更新,库存表上要有预留库存字段,根据不同业务场景去更新预留库存,此时可用库存就等于当前库存减去预留库存了


LINK:https://ask.csdn.net/questions/7614077?answer=53641613
SOURCE:CSDN_ASK
ASK_ID:7613863
ANSWER_ID:53641591
TITLE:开窗函数怎末分组?求解
ANSWER:

开窗函数中的分组是在 patition by 这里定义的


dense_rank() over (partition by 分组字段 order by 排序字段)

LINK:https://ask.csdn.net/questions/7613863?answer=53641591
SOURCE:CSDN_ASK
ASK_ID:7613797
ANSWER_ID:53641585
TITLE:使用scrapy框架爬取腾讯招聘网的数据
ANSWER:
pymysql.err.ProgrammingError: (1064, “You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘truncat table tencent’ at line 1”)

上面这句报错是提示你sql写错了,应该是 truncate table tencent


LINK:https://ask.csdn.net/questions/7613797?answer=53641585
SOURCE:CSDN_ASK
ASK_ID:7613045
ANSWER_ID:53640849
TITLE:powerBI列合并
ANSWER:

添加自定义列或者条件列


img


img


LINK:https://ask.csdn.net/questions/7613045?answer=53640849
SOURCE:CSDN_ASK
ASK_ID:7613594
ANSWER_ID:53640768
TITLE:关于mysql,请问这个错误是为什么
ANSWER:

楼上说得对,三个参数都要传,如果是out就更要传,必须声明个变量去接收它,要不然它没地方塞


LINK:https://ask.csdn.net/questions/7613594?answer=53640768
SOURCE:CSDN_ASK
ASK_ID:7613483
ANSWER_ID:53640710
TITLE:plsql的job修改了interval不生效,next_date不变
ANSWER:

next_date在两种情况下会变化


  1. 运行一次job
  2. 手动修改

LINK:https://ask.csdn.net/questions/7613483?answer=53640710
SOURCE:CSDN_ASK
ASK_ID:7613088
ANSWER_ID:53640704
TITLE:mysql 问题处理,请教各位!
ANSWER:

MySQL IFNULL 函数是MySQL控制流函数之一,它接受两个参数,如果不是 NULL ,则返回第一个参数。 否则, IFNULL 函数返回第二个参数。 两个参数可以是文字值或表达式。


ifnull(记账时间,记账日期)

LINK:https://ask.csdn.net/questions/7613088?answer=53640704
SOURCE:CSDN_ASK
ASK_ID:7612737
ANSWER_ID:53640688
TITLE:MySQL8.0 删除表行数据出现错误,删除失败,这是为啥??
ANSWER:

你没找到类似的问题,是因为,你这个不叫删除多行数据,而是叫删除多列
而且这不是删除列报错,而是你修改了receive_dep这个字段的属性导致的报错,
GENERATED ALWAYS as (expression) ,括号里要放一个表达式,否则就是语法错误,你看看这个字段你是不是没填自动生成对应的表达式


img


LINK:https://ask.csdn.net/questions/7612737?answer=53640688
SOURCE:CSDN_ASK
ASK_ID:7612692
ANSWER_ID:53640673
TITLE:#sql# 我想用date但它总是报错,只有用timestamp不会报错
ANSWER:

是什么类型的数据库?
根据这个报错来看,这是因为current_time这个值就是timestamp类型的,当然不能作为date类型的默认值,要么转换一下,要么根据对应的数据库类型找下当前日期是哪个函数


LINK:https://ask.csdn.net/questions/7612692?answer=53640673
SOURCE:CSDN_ASK
ASK_ID:7613423
ANSWER_ID:53640652
TITLE:为什么insert into插入数据之后结果显示不出来
ANSWER:

你先把你执行插入后,下面输出的信息贴出来看看


LINK:https://ask.csdn.net/questions/7613423?answer=53640652
SOURCE:CSDN_ASK
ASK_ID:7613417
ANSWER_ID:53640647
TITLE:SQL sever的累计和问题
ANSWER:

今天刚好回答了一个类似的题,要求是5天一合计,你先看看,不懂再问


LINK:https://ask.csdn.net/questions/7613417?answer=53640647
SOURCE:CSDN_ASK
ASK_ID:7613354
ANSWER_ID:53640572
TITLE:怎么把数据纵向输出?
ANSWER:

这个要用unpivot


with t as (select 0 a,1 b,2 c,3 d from dual)
select * from t unpivot (val for col in (A,B,C,D))
;

img


LINK:https://ask.csdn.net/questions/7613354?answer=53640572
SOURCE:CSDN_ASK
ASK_ID:7613105
ANSWER_ID:53640567
TITLE:mysql之select多条件两表联查,合并生成新的查询结果
ANSWER:

这个两边数据都缺的情况,明显的要用 full join啊


SELECT
ifnull( a.区域, B.区域 ) 区域,
ifnull( a.部门, b.部门 ) 部门,
ifnull( a.性质, b.性质 ) 性质,
一级,二级,三级,四级,五级,六级
FROM
A表 a
FULL JOIN B表 b
ON a.区域 = B.区域
AND a.部门 = b.部门
AND a.性质 = b.性质;



题主更改数据库类型为sqlite,此数据库是不支持 full join 的,但可以通过左连接union右连接模拟


SELECT
ifnull( a.区域, B.区域 ) 区域,
ifnull( a.部门, b.部门 ) 部门,
ifnull( a.性质, b.性质 ) 性质,
一级,二级,三级,四级,五级,六级
FROM
A表 a
LEFT JOIN B表 b
ON a.区域 = B.区域
AND a.部门 = b.部门
AND a.性质 = b.性质
UNION
SELECT
ifnull( a.区域, B.区域 ) 区域,
ifnull( a.部门, b.部门 ) 部门,
ifnull( a.性质, b.性质 ) 性质,
一级,二级,三级,四级,五级,六级
FROM
A表 a
RIGHT JOIN B表 b
ON a.区域 = B.区域
AND a.部门 = b.部门
AND a.性质 = b.性质;

或者先构造一个全部区域、部门、性质的数据,以此数据为准去左连接这两个表


select t. 区域,t.部门,t.性质,一级,二级,三级,四级,五级,六级
from (
select 区域 ,部门 ,性质 from A表
union
select 区域 ,部门 ,性质 from B表
) t
left join A表 a on t.区域=a.区域 and t.部门=a.部门 and t.性质=a.性质
left join B表 b on t.区域=b.区域 and t.部门=b.部门 and t.性质=b.性质

LINK:https://ask.csdn.net/questions/7613105?answer=53640567
SOURCE:CSDN_ASK
ASK_ID:7612859
ANSWER_ID:53640557
TITLE:如何复制表中的某部分数据,并修改部分字段的内容
ANSWER:

先按照你说的数据内容要求,把select查询语句写出来,确认是你要的数据内容后,在前面加上insert语句就行了


LINK:https://ask.csdn.net/questions/7612859?answer=53640557
SOURCE:CSDN_ASK
ASK_ID:7612819
ANSWER_ID:53640554
TITLE:报表的sql怎么修改,在数据库可以运行,但在报表中无法运行
ANSWER:

你把这个sql最后的分号去掉试一试


LINK:https://ask.csdn.net/questions/7612819?answer=53640554
SOURCE:CSDN_ASK
ASK_ID:7612787
ANSWER_ID:53640546
TITLE:乾润报表sql语句报错,怎么搞??
ANSWER:

贴下报错信息,可能不是sql错误,而是报表设置错误


LINK:https://ask.csdn.net/questions/7612787?answer=53640546
SOURCE:CSDN_ASK
ASK_ID:7612980
ANSWER_ID:53640319
TITLE:Teradata SQL 转成hive 语句 下面这句话该怎么写
ANSWER:

这段只是查询sql中的一个栏位,hive里支持case when 和cast,所以这段不用改


img


LINK:https://ask.csdn.net/questions/7612980?answer=53640319
SOURCE:CSDN_ASK
ASK_ID:7612153
ANSWER_ID:53640061
TITLE:传入主id集合,查询主id下关联的前几条数据,用MySQL怎么实现?
ANSWER:

用个开窗函数进行分组排序就好了


select a.*
from (select row_number() over(partition by brand_id order by product_id) rn,
t *
from 表 t
where brand_id in (‘200001’, ‘200002’)) a
where rn <= 3

LINK:https://ask.csdn.net/questions/7612153?answer=53640061
SOURCE:CSDN_ASK
ASK_ID:7612646
ANSWER_ID:53639757
TITLE:SQL server中一个月每五天统计一次这五天所有数据总和除以天数最后不足五天的为一组,有知道不用存储过程怎末写吗?
ANSWER:

用递归构造所有日期,用开窗函数取模分组


with cte as (select Convert(DateTime,‘20211201’,112) d
union all
select d+1 from cte where d+1<=Convert(DateTime,‘20211231’,112))
select g ,min(d) date_from,max(d) date_to,sum(val) sum_val from (
select round(((row_number() over (order by cte.d))-1)/5,0,1) g,
cte.d,isnull(val,0) val from cte left join
(select d ,sum(val) val from test_table group by d) a
on cte.d=a.d) as t
group by g;

下面是实测截图


img


LINK:https://ask.csdn.net/questions/7612646?answer=53639757
SOURCE:CSDN_ASK
ASK_ID:7612645
ANSWER_ID:53639648
TITLE:oracle 执行SDE.st_distance出现ORA-28579: 在从外部过程代理程序回调时, 发生网络错误
ANSWER:

这是一个ORACLE的BUG,需要升级数据库到11.2.0.2以上


LINK:https://ask.csdn.net/questions/7612645?answer=53639648
SOURCE:CSDN_ASK
ASK_ID:7612525
ANSWER_ID:53639484
TITLE:在Mac上 装MySQL遇到这种情况怎么解决
ANSWER:

这张图里没有问题啊,是不认识英语么?


启动mysql服务

img


初始化数据库

img


卸载

img


LINK:https://ask.csdn.net/questions/7612525?answer=53639484
SOURCE:CSDN_ASK
ASK_ID:7612338
ANSWER_ID:53639470
TITLE:mysql批量插入数据怎么生成uuid?
ANSWER:

先uuid查出来,然后再在外面套一层replace是可以的,见下图的测试

img


LINK:https://ask.csdn.net/questions/7612338?answer=53639470
SOURCE:CSDN_ASK
ASK_ID:7612410
ANSWER_ID:53639454
TITLE:Oracle远程连接出现01017
ANSWER:
  1. 这提示就是用户名密码错误,要注意大小写的区分。
  2. 另外,你如果使用低版本的oracle客户端去连接高版本的ORACLE数据库也有可能会报这个错。
  3. 还有一种情况,不是DBA用户,但是连接时选择以DBA身份连接,也会报用户名密码错误。
  4. 最后一种特殊情况,数据库开启了wallet认证,必须要有wallet文件才能登录

LINK:https://ask.csdn.net/questions/7612410?answer=53639454
SOURCE:CSDN_ASK
ASK_ID:7612315
ANSWER_ID:53639312
TITLE:为什么使用DBeaver打开MySQL实体表数据库的时候报 -320086985 错误?
ANSWER:

看下是不是你连接信息填得有问题




在这个软件的github上,也有个中国用户报了can’t open entity的错,但错误代码不一样,除此之外也没找到其他有人有报这个错的,而且此问题被标注为无法复现,因为他重启电脑后就好了,没准你也可以试试?


LINK:https://ask.csdn.net/questions/7612315?answer=53639312
SOURCE:CSDN_ASK
ASK_ID:7612234
ANSWER_ID:53639307
TITLE:centos8安装mysql8.0.27后,启动mysql失败
ANSWER:

试一下这篇文章中的方案,初始化mysql


LINK:https://ask.csdn.net/questions/7612234?answer=53639307
SOURCE:CSDN_ASK
ASK_ID:7612153
ANSWER_ID:53639303
TITLE:传入主id集合,查询主id下关联的前几条数据,用MySQL怎么实现?
ANSWER:

同意楼上,建议先把当前表结构和你最终想要的数据格式样例发出来,可能没你想得那么复杂


LINK:https://ask.csdn.net/questions/7612153?answer=53639303
SOURCE:CSDN_ASK
ASK_ID:7612132
ANSWER_ID:53639302
TITLE:真是奇了怪了,竟然搜不到关于tinyint字段修改问题的解决方案
ANSWER:

不是你update这个字段的问题,而是"where order_no=?"没查出数据,
你可以打印一下执行的sql,看看是不是参数不对;
或者保留这个where条件,改成查询语句看能不能返回数据


LINK:https://ask.csdn.net/questions/7612132?answer=53639302
SOURCE:CSDN_ASK
ASK_ID:7612125
ANSWER_ID:53639294
TITLE:mysql怎么用查出的字段作为筛选条件
ANSWER:

动态sql了解一下


LINK:https://ask.csdn.net/questions/7612125?answer=53639294
SOURCE:CSDN_ASK
ASK_ID:7612231
ANSWER_ID:53639288
TITLE:sql语句提示不是单组分组函数
ANSWER:

把你所有没做汇总的字段都group by 一下就行了


select a.aac001,
b.aab001,
b.aab073,
c.aab033,
a.aac999,
a.aac003,
b.aab999,
b.aab004,
c.aaa115,
c.aae140,
c.aae180,
c.aaz192,
c.aae100,
sum(c.aae028) aae028,
sum(c.bac121) bac121,
sum(c.bac120) bac120,
sum(bac120 + bac121) bac222,
d.cae249,
d.aae217,
e.aae225,
e.aae226,
sum(c.aae201) aae201,
sum(c.aae180) sumaae180,
sum(c.aae020) aae020,
sum(c.aae022),
aae022,
sum(aae020 + aae022 + aae028 + bac121 + bac120) aae222
from ac01 a, ab01 b, ac42 c, ae02 d, ac40 e
where a.aac001 = c.aac001
and b.aab001 = c.aab001
and c.aaz192 = e.aaz192
and d.aaz002 = e.aaz002
and c.aaz223 is null
group by a.aac001,
b.aab001,
b.aab073,
c.aab033,
a.aac999,
a.aac003,
b.aab999,
b.aab004,
c.aaa115,
c.aae140,
c.aae180,
c.aaz192,
c.aae100,
d.cae249,
d.aae217,
e.aae225,
e.aae226,
aae022

LINK:https://ask.csdn.net/questions/7612231?answer=53639288
SOURCE:CSDN_ASK
ASK_ID:7612201
ANSWER_ID:53639285
TITLE:Python➕SQL server连接问题
ANSWER:

ODBC DRIVER 17 FOR SQL SERVER 下载页面


LINK:https://ask.csdn.net/questions/7612201?answer=53639285
SOURCE:CSDN_ASK
ASK_ID:7612194
ANSWER_ID:53639284
TITLE:web项目连接不上数据库
ANSWER:

java空指针了,请检查java代码


LINK:https://ask.csdn.net/questions/7612194?answer=53639284
SOURCE:CSDN_ASK
ASK_ID:7612229
ANSWER_ID:53639282
TITLE:mysql配置错误,怎么回事
ANSWER:

这个界面是MYSQL 的安装器,这个列表中显示的是你已经安装的组件。
点击对应的Reconfigure可以重新配置对应的组件
右边的
add是添加组件
modify是修改组件
upgrade是升级
REMOVE是删除


LINK:https://ask.csdn.net/questions/7612229?answer=53639282
SOURCE:CSDN_ASK
ASK_ID:7611990
ANSWER_ID:53639181
TITLE:Navicat Premium中如何设置bold属性?
ANSWER:

用可视化工具建表的话,就像上面那样操作,
用create table 建表命令的话,就是在字段类型那里填 blob。


LINK:https://ask.csdn.net/questions/7611990?answer=53639181
SOURCE:CSDN_ASK
ASK_ID:7612103
ANSWER_ID:53639165
TITLE:oracle数据库同样的查询语句有时候能查出数据,有时候查不出,需要重新连接。导致前端页面点查询也是这个情况。
ANSWER:

这个问题有意思,
首先应该可以排除查的是视图,视图里可以写随机函数让你有时查不到,应该没人会做这么无聊的事;
然后开始正经分析:
一、虽然视频中是使用同一个已保存的连接,但是,这并不能肯定是连接的同一个数据库实例,你可以通过下面这几种方式验证一下


  1. 在查不到数据的数据库创建一张表,然后到查得到的数据库中看这张表是否存在
  2. 在两个数据库中分别查询 "select * from v$instance;"看看实例名称、机器名称等是否一致
  3. 在两个数据库中查询IP,查询方式参考此篇文章https://www.modb.pro/db/179850

二、如果无论怎么检查的确是同一个数据库,检查2个sql的执行计划是否有区别,尝试在查不到的那个数据库上修改查询条件缩小范围,看是不是的确没有数据,因为可能存在执行计划跑错了导致数据查不到的情况,


三、最后一种可能性,就得看下数据库是不是有损坏了


LINK:https://ask.csdn.net/questions/7612103?answer=53639165
SOURCE:CSDN_ASK
ASK_ID:7612021
ANSWER_ID:53639113
TITLE:oracle数据集里某列存储了sql,如何通过select 直接查询数据集及数据集里sql执行后的值
ANSWER:

首先,你得确定这个你处理出来的sql是只查询一个1行中的1列,即1个值。
由于动态sql不能直接在sql中查询出结果,必须用execute immediate或者dbms_sql去执行它,因此,可以先建立一个这样的函数


create or replace function get_sql_value(i_sql varchar2) return varchar2 is
out_value varchar2(4000);
begin
execute immediate i_sql
into out_value;
return out_value;
exception
when no_data_found then
out_value := ‘’;
return out_value;
when others then
Raise_application_error(-20000, sqlerrm);
end;
/

接下来,你就可以用这个函数把你处理的这个sql字符串包起来,它就能在你查询的时候返回对应sql的结果了,
例:


select 1 a,2 b,3 c,get_sql_value(‘select 1 from dual’) from dual;

LINK:https://ask.csdn.net/questions/7612021?answer=53639113
SOURCE:CSDN_ASK
ASK_ID:7611968
ANSWER_ID:53639086
TITLE:Oracle,希望将两万张表里的100张不被新用户访问
ANSWER:

授权SQL可以写个字符串拼接的sql得到,或者你也可以在EXCEL里用公式把授权命令拼出来。


select ‘grant select on ‘||user||’.’||table_name|| ’ to QUERY_USER;' from user_tables;

因为你是新用户访问原用户里的部分表,不管是多还是少,只要需求是"部分",那么你必然不能做ALL的授权,而是必须要生成这19900个指定表的授权命令。
没有"拒绝"或者"排除"这样的权限。
另外,如果只有个别表,可以考虑在表上建立触发器,触发器里判断是指定的用户来查询就直接报错,但不建议使用此种方式,因为会降低其他用户查询的效率


LINK:https://ask.csdn.net/questions/7611968?answer=53639086
SOURCE:CSDN_ASK
ASK_ID:7611936
ANSWER_ID:53638956
TITLE:Java,SQL相关问题
ANSWER:

引入对应数据库类型的jdbc驱动包


LINK:https://ask.csdn.net/questions/7611936?answer=53638956
SOURCE:CSDN_ASK
ASK_ID:7611758
ANSWER_ID:53638950
TITLE:请问一下这一段SQL> Importing table ETL TERA.DW P00 PRODUCT@odsdb是干嘛的?直接执行会怎样?
ANSWER:

会报错,因为这不是sql命令,只是回显的日志


LINK:https://ask.csdn.net/questions/7611758?answer=53638950
SOURCE:CSDN_ASK
ASK_ID:7611512
ANSWER_ID:53638947
TITLE:Oracle导入dmp文件时报错942
ANSWER:

参考此篇


你这个图上,显示的是用19版本的客户端导入从11版本的客户端导出的文件,可以尝试下个11版本的客户端执行导入


另外,也可以参考此篇,使用AlxcTool修改dmp文件的版本


LINK:https://ask.csdn.net/questions/7611512?answer=53638947
SOURCE:CSDN_ASK
ASK_ID:7611278
ANSWER_ID:53638942
TITLE:redhat8 安装oracle 11g 监听问题 求解答
ANSWER:
  1. 你这装的到底是11g还是12c??咋路径是个12?
  2. 可以手动定位至 ORACLE_HOME/bin,然后执行看看能不能成功<pre><code class="language-bash">.<span class="hljs-regexp">/netca /</span>silent <span class="hljs-regexp">/responsefile /</span>home<span class="hljs-regexp">/oracle/</span>etc/netca.rsp<br/></code></pre><br/></li><li>另外,如果你是用终端连接,参考一下这篇文章 <a href="https://www.cnblogs.com/mobaids/p/8561354.html" id="textarea_1640159971492_1640159976476_0" target="_blank" rel="noopener noreferrer"><div class="md_link_card"><br/> <br/> <span class="md_link_title">在linux中安装oracle数据库 (下) --补充&#xff08;netca: command not found问题&#xff09; - waytods - 博客园</span><br/> <br/> <span class="md_link_desc" style="">[oracle&#64;localhost root] netcabash: netca: command not found… 产生问题原因分析:让命令终端有调用界面程序的权限,需要用root用户执行



    https://www.cnblogs.com/mobaids/p/8561354.html


LINK:https://ask.csdn.net/questions/7611278?answer=53638942
SOURCE:CSDN_ASK
ASK_ID:7611287
ANSWER_ID:53638941
TITLE:redhat8 安装oracle 11g 监听问题 求解答
ANSWER:
  1. 你这装的到底是11g还是12c??咋路径是个12?
  2. 可以手动定位至 ORACLE_HOME/bin,然后执行看看能不能成功<pre><code class="language-bash">.<span class="hljs-regexp">/netca /</span>silent <span class="hljs-regexp">/responsefile /</span>home<span class="hljs-regexp">/oracle/</span>etc/netca.rsp<br/></code></pre><br/></li><li>另外,如果你是用终端连接,参考一下这篇文章 <a href="https://www.cnblogs.com/mobaids/p/8561354.html" id="textarea_1640159405137_1640159936836_0" target="_blank" rel="noopener noreferrer"><div class="md_link_card"><br/> <br/> <span class="md_link_title">在linux中安装oracle数据库 (下) --补充&#xff08;netca: command not found问题&#xff09; - waytods - 博客园</span><br/> <br/> <span class="md_link_desc" style="">[oracle&#64;localhost root] netcabash: netca: command not found… 产生问题原因分析:让命令终端有调用界面程序的权限,需要用root用户执行



    https://www.cnblogs.com/mobaids/p/8561354.html


LINK:https://ask.csdn.net/questions/7611287?answer=53638941
SOURCE:CSDN_ASK
ASK_ID:7611361
ANSWER_ID:53638736
TITLE:mysql基础#_#
ANSWER:

触发器是基于特定动作进行的一连串操作,你得先定义在什么情况下触发,比如更新、插入、删除某一张表,那么就要在这张表上建立触发器,在触发器里可以执行插入到日志表的sql。


如果是要监控所有表的修改,那就不应该用触发器了,应该开启数据库的审计功能,可以选择要对哪些行为进行审计


LINK:https://ask.csdn.net/questions/7611361?answer=53638736
SOURCE:CSDN_ASK
ASK_ID:7611622
ANSWER_ID:53638722
TITLE:sql delete如何删除非int数据
ANSWER:

如果这是个字符串拼接,那么你应该在这个变量的前后都加上单引号


DELETE FROM admin WHERE username=张三;
DELETE FROM admin WHERE username=‘张三’;

上面这两行,第一行是不能执行的,第二行才能执行,你可以打印一下$sql看是个什么东东


LINK:https://ask.csdn.net/questions/7611622?answer=53638722
SOURCE:CSDN_ASK
ASK_ID:7611595
ANSWER_ID:53638714
TITLE:用sql 查找出宿舍编号中倒数第二个数字为“0”的宿舍所在的园区名称。
ANSWER:

字符串截取函数,第二个参数-2表示截取最后两位,然后只要识别它是0开头的2个字符就行了


select 园区名称 fromwhere  substr(宿舍编号,-2) like ‘0_’;

LINK:https://ask.csdn.net/questions/7611595?answer=53638714
SOURCE:CSDN_ASK
ASK_ID:7611570
ANSWER_ID:53638695
TITLE:连接SQL server 连接提示08001
ANSWER:

navicat默认没有安装sqlserver的驱动,你到navicat的安装目录里,找到"sqlncli_x64.msi"这个玩意,打开,安装,然后navicat就不会报这个ODBC的错了。


但是可能会报别的错,这个要看你sqlserver的版本了




navicat中自带的sqlserver驱动版本是10,无法连接新版的sqlserver,可以在以下页面中下载新版的驱动


进去此页面后,点击download,在弹出的框框中,选择sqlncli.msi(64位系统选大的,32位系统选小的),点击next,下载保存安装


img


然后在navicat里编辑连接,在高级里面选择11版本的驱动


img


img


LINK:https://ask.csdn.net/questions/7611570?answer=53638695
SOURCE:CSDN_ASK
ASK_ID:7611343
ANSWER_ID:53638135
TITLE:关于SQL语句的修改多行数据问题
ANSWER:
update 表 set c_tn=c_tn+8;

LINK:https://ask.csdn.net/questions/7611343?answer=53638135
SOURCE:CSDN_ASK
ASK_ID:7611312
ANSWER_ID:53638133
TITLE:创建视图的SQL语句太长,且用视图查看数据的查询速度太慢,想知道如何优化提高查询速度
ANSWER:

把完整sql拿出来,还有各个表的数据量、索引、分区,再看下执行计划。光看你这个伪代码没有意义


LINK:https://ask.csdn.net/questions/7611312?answer=53638133
SOURCE:CSDN_ASK
ASK_ID:7611219
ANSWER_ID:53637993
TITLE:vs2010和mysql数据库问题
ANSWER:

把报错内容贴出来看看




这是个很经典的报错了,mysql 5.7和8.0的默认认证方式不一样,你用老的mysql客户端去连8.0版本的mysql就会这样。解决方式是修改对应登录账户的认证方式并刷新权限,或者修改数据库的启动配置文件中的认证方式。
详细可自行搜索关键词"caching_sha2_password not supported" 或者参考此篇文章 https://www.cnblogs.com/luyuans/p/10013099.html


LINK:https://ask.csdn.net/questions/7611219?answer=53637993
SOURCE:CSDN_ASK
ASK_ID:7611208
ANSWER_ID:53637991
TITLE:可以ping通不能访问mysql
ANSWER:

你数据库那一栏填错了,不应该填ip,应该填数据库名称


LINK:https://ask.csdn.net/questions/7611208?answer=53637991
SOURCE:CSDN_ASK
ASK_ID:7611124
ANSWER_ID:53637898
TITLE:调用sqlalchemy查询时出错
ANSWER:

因为你打印的是对象,而不是对象的值,
你可以尝试修改成打印 i.stationID 和 i.lineID, 就能看到数据了


LINK:https://ask.csdn.net/questions/7611124?answer=53637898
SOURCE:CSDN_ASK
ASK_ID:7611021
ANSWER_ID:53637889
TITLE:关于sqlserver 的问题:为什么这段子查询SQL 只能查到最先插入到子表hgt里面的记录
ANSWER:

你的主表和子表是用 hf.TruckID=ht.ID 这个条件进行join的,所以你不光要看子表的id是否存在,最主要的是看主表的TruckID是否存在,因为你这是个left join,是以左边为准去匹配右边的


LINK:https://ask.csdn.net/questions/7611021?answer=53637889
SOURCE:CSDN_ASK
ASK_ID:7610902
ANSWER_ID:53637827
TITLE:虚拟机jps查看Java版本错误
ANSWER:

库文件没加载,你看下profile里面是不是没正确配置库文件的路径


LINK:https://ask.csdn.net/questions/7610902?answer=53637827
SOURCE:CSDN_ASK
ASK_ID:7610968
ANSWER_ID:53637815
TITLE:求一个简单的SQL语句
ANSWER:

用开窗函数,按日期分组,取最小的开始时间和最大的结束时间


select t.tp,
t.d,
min(t.start_time) over(partition by d) start_time,
min(t.end_time) over(partition by d) end_time
from temp_max_min_test t

ORACLE数据库中的实测截图如下,其他常用主流数据库基本也是支持的

img


LINK:https://ask.csdn.net/questions/7610968?answer=53637815
SOURCE:CSDN_ASK
ASK_ID:7610880
ANSWER_ID:53637804
TITLE:mysql导入csv文件时如何忽略文本中的逗号
ANSWER:

由于csv本来就是用逗号分隔的列,如果你文本内容中本身就有逗号,那么生成CSV的时候应该把对应的列值用双引号引起来,否则程序是无法识别对应的逗号是分隔符还是数据本身的。
其实导出和导入数据时,是可以自行定义分隔符的,比如使用制表符tab或者使用管道符|,这些符号都是不经常出现在数据内的


LINK:https://ask.csdn.net/questions/7610880?answer=53637804
SOURCE:CSDN_ASK
ASK_ID:7610905
ANSWER_ID:53637789
TITLE:springboot项目打包后没有手动导入的包
ANSWER:

这个报错的确就是没找到oracle的jdbc驱动,
你可以尝试一下把服务器上的包解开,看看驱动包在不在可识别的目录内


LINK:https://ask.csdn.net/questions/7610905?answer=53637789
SOURCE:CSDN_ASK
ASK_ID:7610799
ANSWER_ID:53637653
TITLE:oracle dblink链接用户去查询另一个用户的表
ANSWER:
select * from c.表名@dblink名称;

LINK:https://ask.csdn.net/questions/7610799?answer=53637653
SOURCE:CSDN_ASK
ASK_ID:7610075
ANSWER_ID:53637648
TITLE:mysql 连不上is not allowed to connect to this mysql server
ANSWER:

应该是权限被修改了,只允许哪些ip连接数据库,如果有其他人共用就去找其他人,如果只有你自己用,就去检查下你执行了一些什么命令


LINK:https://ask.csdn.net/questions/7610075?answer=53637648
SOURCE:CSDN_ASK
ASK_ID:7610791
ANSWER_ID:53637618
TITLE:【每日SQL打卡】​​​​​​​​​​​​​​​DAY 25丨不同性别每日分数总计【难度中等】
ANSWER:

没有进行提问,这是让我猜么?
这个sql是在创建一张表,表有4个字段,然后下面写了个分组求和的开窗函数查询sql,没有问题呀。要说有什么能优化的,就是你既然是sum,那么over里面就不需要进行排序了


LINK:https://ask.csdn.net/questions/7610791?answer=53637618
SOURCE:CSDN_ASK
ASK_ID:7610751
ANSWER_ID:53637611
TITLE:关于#sql#的问题:EndTlme要小于BeqinTime,两个时间比较
ANSWER:
select * from
where EndTlme<BeqinTime

你是这个意思?


LINK:https://ask.csdn.net/questions/7610751?answer=53637611
SOURCE:CSDN_ASK
ASK_ID:7610689
ANSWER_ID:53637604
TITLE:SQL pg_是什么意思?
ANSWER:

pg是postgresql数据库的简写,
"pg_"开头的对象表示此对象是postgressql数据库自带的,
pg_class是该数据库中自带的一张视图(也可以理解成一张表),是用来记录本数据库中的class的信息的,
你题目中的sum某个字段,可能是在查询class对象占用的磁盘空间大小


LINK:https://ask.csdn.net/questions/7610689?answer=53637604
SOURCE:CSDN_ASK
ASK_ID:7610581
ANSWER_ID:53637569
TITLE:如何在Navicat下建立job或者定时函数
ANSWER:

plsql developer 直接查看job对象是长这个样子


begin
sys.dbms_job.submit(job => :job,
what => ‘null;’,
next_date => to_date(‘22-12-2021 00:40:02’, ‘dd-mm-yyyy hh24:mi:ss’),
interval => ‘trunc(sysdate)+1’);
commit;
end;
/

需要稍微修改一下,声明个参数,用来接收job号就好了


declare
job number;
begin
sys.dbms_job.submit(job => job,
what => ‘null;’,
next_date => to_date(‘22-12-2021 00:40:02’, ‘dd-mm-yyyy hh24:mi:ss’),
interval => ‘trunc(sysdate)+1’);
commit;
end;
/

注意参数前的冒号要去掉


LINK:https://ask.csdn.net/questions/7610581?answer=53637569
SOURCE:CSDN_ASK
ASK_ID:7610767
ANSWER_ID:53637558
TITLE:sql 最后加了 .If Errorcode <> 0 Then Quit 12; 是什么意思
ANSWER:

如果 错误代码 不等于 0 则 退出


LINK:https://ask.csdn.net/questions/7610767?answer=53637558
SOURCE:CSDN_ASK
ASK_ID:7610292
ANSWER_ID:53637514
TITLE:SQL Server 日期范围按每月一行拆分
ANSWER:

这里要用到递归写法,刚好之前有写过oracle的这个需求



create table temp_datetest (fromdate date,todate date);
insert into temp_datetest values (DATE ‘2019-06-20’,DATE ‘2019-09-21’);
commit;

WITH cte(fromdate,
todate1,
todate,
lev) as
(select fromdate, last_day(fromdate) todate1, todate, 1 as lev
from temp_datetest
union all
select add_months(trunc(fromdate, ‘mm’), 1),
least(add_months(last_day(fromdate), 1), todate),
todate,
lev + 1
from cte
where lev < months_between(last_day(todate), trunc(fromdate, ‘mm’)) + 2)
select FROMDATE, TODATE1 from cte;

img


在sqlserver 中也可以使用with进行递归,语法基本和oracle一致,但是日期计算函数和oracle中不一样,需要你自行替换成sqlserver中的函数,比如取月第一天、月最后一天、两个日期间间隔的月份数、指定日期加一月等


LINK:https://ask.csdn.net/questions/7610292?answer=53637514
SOURCE:CSDN_ASK
ASK_ID:7610576
ANSWER_ID:53637404
TITLE:sql查询问题对于某一字段连续且重复,只取一
ANSWER:

这里要使用开窗函数进行分组排序


select c_time,status from 
(select row_number() over(partition by status order by c_time) rn,c_time,status from 表 ) as t
where rn=1

里面的 order by c_time,加ASC或者DESC可以决定是取第一条还是最后一条




根据题主补充描述,应该使用以下sql


create table table1 (index1 int, status1 int);
insert into table1 values (0, 0);
insert into table1 values (1, 0);
insert into table1 values (2, 0);
insert into table1 values (3, 0);
insert into table1 values (4, 1);
insert into table1 values (5, 1);
insert into table1 values (6, 0);
insert into table1 values (7, 0);
insert into table1 values (8, 0);
insert into table1 values (9, 0);
insert into table1 values (10, 1);
insert into table1 values (11, 1);
insert into table1 values (12, 1);
insert into table1 values (13, 1);
insert into table1 values (14, 1);
insert into table1 values (15, 0);
insert into table1 values (16, 0);

select index1, status1
from (select nvl(lag(status1) over(order by index1),-1) last_status,
index1,
status1
from table1)
where last_status<>status1;

实测和题主要求一致


img


以上是在oracle数据库中进行的测试,如果是在其他数据库,nvl空值处理的函数可能要换成对应数据库中的函数


LINK:https://ask.csdn.net/questions/7610576?answer=53637404
SOURCE:CSDN_ASK
ASK_ID:7610294
ANSWER_ID:53637385
TITLE:SQL server中一个月每五天统计一次这五天所有数据总和除以天数最后不足五天的为一组,有知道不用存储过程怎末写吗?
ANSWER:

获取行号,除以5,取商的整数,得分组号,再按分组号group by


select g ,min(d) date_from,max(d) date_to,sum(val) sum_val from (
select round(((row_number() over (order by d))-1)/5,0,1) g,a.* from test_table a) as t
group by g

以下是实测截图

img




如果日期存在重复,你可以先按日期做一次汇总作为子查询,然后外面再套这个开窗函数就行了,如下


select g ,min(d) date_from,max(d) date_to,sum(val) sum_val from (
select round(((row_number() over (order by d))-1)/5,0,1) g,a.* from (select d ,sum(val) val test_table group by d) a) as t
group by g

LINK:https://ask.csdn.net/questions/7610294?answer=53637385
SOURCE:CSDN_ASK
ASK_ID:7610349
ANSWER_ID:53637319
TITLE:使用left ioin on ,sql报错:an on clause has an invalid table reference
ANSWER:
select a.id,a.name,b.age,c.class,d.score
from table1 a,table2 b,table3 c
left join table4 d

on c.id = d.id
where a.id = b.id
and a.id = c.id
and b.score > ‘60’

由于你left join 前后是C表和D表,所以on的字段只能在C和D里面选,你要么改成on c.id = d.id ,要么把表的排列顺序换下,把a表放到left join前面去


LINK:https://ask.csdn.net/questions/7610349?answer=53637319
SOURCE:CSDN_ASK
ASK_ID:7609490
ANSWER_ID:53636638
TITLE:postgresql拼接传参,以及where后对传参的判断
ANSWER:

动态sql了解一下,你想怎么拼字符串都行


LINK:https://ask.csdn.net/questions/7609490?answer=53636638
SOURCE:CSDN_ASK
ASK_ID:7609963
ANSWER_ID:53636635
TITLE:刚学数据库,这怎么改啊?
ANSWER:

img


你仔细看看上下两个字段有什么区别?是不是多了个空格?


LINK:https://ask.csdn.net/questions/7609963?answer=53636635
SOURCE:CSDN_ASK
ASK_ID:7609876
ANSWER_ID:53636633
TITLE:以root用户登录Linux系统后,当前工作目录为/root。请按以下要求写出相应操作的命令语句。
ANSWER:

为什么标签写个"sql"?
话说这些不都是linux的基本操作么?
创建目录 mkdir
创建用户组 addgroup
创建用户 adduser
修改权限 chmod
具体用法自己按关键词去搜,作业要靠自己完成


LINK:https://ask.csdn.net/questions/7609876?answer=53636633
SOURCE:CSDN_ASK
ASK_ID:7609860
ANSWER_ID:53636631
TITLE:sql Server 怎么用
ANSWER:

你怎么改数据库里面的东西都不会对你电脑有影响,最多就是数据库挂了、数据库启不动了


LINK:https://ask.csdn.net/questions/7609860?answer=53636631
SOURCE:CSDN_ASK
ASK_ID:7609847
ANSWER_ID:53636629
TITLE:SQL Service视图
ANSWER:

你都可以查出数据来了,当然可以导出来啊,你又不是去改里面的数据。
"导出"执行的动作就是,查询数据并将数据保存成文件


LINK:https://ask.csdn.net/questions/7609847?answer=53636629
SOURCE:CSDN_ASK
ASK_ID:7609799
ANSWER_ID:53636627
TITLE:sql怎么判断是否同一月,同一天
ANSWER:

截取出月份和日期,再进行比较。
至于具体的函数使用,要看你用的什么数据库,以及参数类型


LINK:https://ask.csdn.net/questions/7609799?answer=53636627
SOURCE:CSDN_ASK
ASK_ID:7609944
ANSWER_ID:53636623
TITLE:关于#oracle#的问题:培训了几个月 学习能力也是前几名 最近找了几天工作,还是直接坦诚相待拿低薪
ANSWER:

你如果对自己的能力没自信的话,建议先攒经验,只要你能做出足够的成绩,就有底气要求涨薪,不涨就跳,这个时候也已经有工作经验了。
在低职位做出牛逼的事可比在高职位平庸或者做失败的事要好多了。
PS:楼上这个专家说得好像学ORACLE就不涉及开发了,pl/sql开发、oci开发、apex开发等都是ORACLE开发,从前端到后端oracle全部囊括了,甚至还有云原生、机器学习等。。。


LINK:https://ask.csdn.net/questions/7609944?answer=53636623
SOURCE:CSDN_ASK
ASK_ID:7609943
ANSWER_ID:53636613
TITLE:Oracle数据库中dmp的文件怎么执行
ANSWER:

dmp是oracle数据库工具exp或expdp导出的数据库文件,需要使用imp或impdp工具执行导入。
一般安装了ORACLE数据库的话会自带这个工具,详细的命令参数你可以自己去搜了。
需要注意的是exp导出的要用imp导入,expdp导出的要用impdp导入


LINK:https://ask.csdn.net/questions/7609943?answer=53636613
SOURCE:CSDN_ASK
ASK_ID:7609208
ANSWER_ID:53636610
TITLE:Symmetric hash join
ANSWER:

这里竟然有这么专业的问题。。这篇文章介绍得很全面,可以看看


img


上面这张图用最直白的方式描述了 simply hash join 和symmetric hash join的区别


LINK:https://ask.csdn.net/questions/7609208?answer=53636610
SOURCE:CSDN_ASK
ASK_ID:7609638
ANSWER_ID:53636403
TITLE:安装MySQL的时候到这一步出现问题了,不知道怎么搞
ANSWER:

点这个界面右边的 “log”,根据提示信息排查问题


img


LINK:https://ask.csdn.net/questions/7609638?answer=53636403
SOURCE:CSDN_ASK
ASK_ID:7609512
ANSWER_ID:53636399
TITLE:这四个选项那个不能进行模糊查询
ANSWER:

这是啥题啊,模糊查询就是like加通配符(%_)来查询,不用like就不叫模糊查询。
A or B 是 满足条件A或者满足条件B,是通过两个条件之一来定位数据
not in (a,b)其实是 not ( in (a,b) )的简写, 表示取后面这条件的相反判断, 同理
not between a and b 是 not (between a and b) 的简写。


麻烦给个题目出处


LINK:https://ask.csdn.net/questions/7609512?answer=53636399
SOURCE:CSDN_ASK
ASK_ID:7609435
ANSWER_ID:53636188
TITLE:有人会存储过程还有触发器吗?求
ANSWER:

麻烦明确问题需求是什么。
创建触发器、存储过程这种是基础知识,书上网上都一大片的案例


LINK:https://ask.csdn.net/questions/7609435?answer=53636188
SOURCE:CSDN_ASK
ASK_ID:7609278
ANSWER_ID:53636175
TITLE:请教,这个sql语句的count取值为什么是小于2,而不是小于4?
ANSWER:

楼上说得对,这个count你不要理解成主查询的行数,而是应该理解为一个类似exists子查询的条件


LINK:https://ask.csdn.net/questions/7609278?answer=53636175
SOURCE:CSDN_ASK
ASK_ID:7609277
ANSWER_ID:53636151
TITLE:SQL语句修改与查询如何联合
ANSWER:

你第一条sql里,子查询应该把这张表再放进去,而不是使用别名,from后面是不能直接接别名的


UPDATE app_version as av 
set av.versionSize=100,av.versionInfo=“游戏”,av.modifyBy=1,av.modifyDate=NULL
where id = (select max(id) from app_version a where a.appid=58);

LINK:https://ask.csdn.net/questions/7609277?answer=53636151
SOURCE:CSDN_ASK
ASK_ID:7609262
ANSWER_ID:53636133
TITLE:PHPstudy 中无法启动MySQL
ANSWER:

img


这个目录不存在
“D:\PHP\编辑器与集成环境\php\study\服务器\phpstudy_pro\Extensions\MySQL5.7.26\data”
请检查数据库配置


LINK:https://ask.csdn.net/questions/7609262?answer=53636133
SOURCE:CSDN_ASK
ASK_ID:7609232
ANSWER_ID:53636124
TITLE:关于#sql#的问题,如何解决?
ANSWER:

报错已经提示你了,有些参数的类型不能转换成string



not all arguments converted during string formatting



LINK:https://ask.csdn.net/questions/7609232?answer=53636124
SOURCE:CSDN_ASK
ASK_ID:7609215
ANSWER_ID:53636117
TITLE:oracle中sql查询超时问题
ANSWER:

如果你的coupon_no有索引,那么的确有可能会不加日期条件更快,因为你最终的目的是统计coupon_no的去重个数,而索引是可以快速计算出这个值的;而当你用了时间条件后,执行计划可能就不走coupon_no的索引了,速度反而会慢,你可以看下加时间条件和不加时间条件的执行计划的区别,在plsql中看执行计划的快捷方式是,选中sql,按F5


LINK:https://ask.csdn.net/questions/7609215?answer=53636117
SOURCE:CSDN_ASK
ASK_ID:7609310
ANSWER_ID:53636048
TITLE:Windows使用Oracle 19c的Logminer在确认参数是否设定时发现缺少utl_file_dir
ANSWER:

以下引用oracle官方文档



该DBMS_LOGMNR_D.BUILD过程需要访问可以放置字典文件的目录。因为 PL/SQL 过程通常不会访问用户目录,所以您必须指定一个供该DBMS_LOGMNR_D.BUILD过程使用的目录,否则该过程将失败。要指定目录,请UTL_FILE_DIR在初始化参数文件中设置初始化参数 。
例如,设置UTL_FILE_DIR为/oracle/database存放字典文件的目录,在初始化参数文件中放置如下:
UTL_FILE_DIR = /oracle/数据库
请记住,要使对初始化参数文件的更改生效,您必须停止并重新启动数据库。



意思其实就是 “utl_file_dir” 这个东西是要你手动指定的。


或者参考这篇文章


LINK:https://ask.csdn.net/questions/7609310?answer=53636048
SOURCE:CSDN_ASK
ASK_ID:7609330
ANSWER_ID:53636030
TITLE:oracle数据库去重查询后怎么消除null值
ANSWER:

举几个你数据的例子看看?


另外,你说加" where条件org is not null 不好用"是个什么意思?是用了报错还是条件没生效?
如果是用了报错的话 是因为这里不能直接写别名,除非你再在外面套一层,否则只能把这整个表达式都放到查询条件里去;
如果是条件没生效,检查下查出来的数据中是不是有空格或者不可见字符,这不是null,需要替换掉才能用is not null


LINK:https://ask.csdn.net/questions/7609330?answer=53636030
SOURCE:CSDN_ASK
ASK_ID:7609320
ANSWER_ID:53636009
TITLE:图一该怎么修改才能做出图二的婚否复选框
ANSWER:

先说下你第二张图用的是什么工具?


数据库的表和数据本身不会带什么复选框的,只有某些工具在显示的时候才会进行转换,需要看看你用的是什么工具展示数据,再看如何配置工具以转换成复选框进行显示


LINK:https://ask.csdn.net/questions/7609320?answer=53636009
SOURCE:CSDN_ASK
ASK_ID:7609154
ANSWER_ID:53635905
TITLE:关于sql 处理字段中字符串的问题
ANSWER:

简单来说,就是取":“到”;“之间的字符串(初始字符串需要在最后拼一个”;"),取这个可以用正则表达式,也可以用存储过程循环来处理。
但是题主漏了点没说,取出后,是要怎么展示?直接用分隔符拼接?还是变成一列数据?能不能给个输出结果的例子看看?
根据题主补充,取出数据是要求和,如果是在oracle数据库中,可以这么写


select sum(to_number(str)) sum_value
from (SELECT REGEXP_SUBSTR(‘A1:1;A2:2;A3:3’ || ‘;’, ‘[^:;]+’, 1, LEVEL * 2) str
FROM DUAL
CONNECT BY REGEXP_SUBSTR(‘A1:1;A2:2;A3:3’ || ‘;’,
‘[:;]+’,
1,
LEVEL * 2) IS NOT NULL);

img


如果是其他数据库,请说明数据库类型


LINK:https://ask.csdn.net/questions/7609154?answer=53635905
SOURCE:CSDN_ASK
ASK_ID:7608688
ANSWER_ID:53635898
TITLE:关于银行类#SQL#的问题,如何解决?
ANSWER:

话说这面试题做对是不是就可以进银行了?
题主说了一句,“第四题怎么解答?”,那我默认你是只问第四题。
这题出得有一点点妙,我差点就绕进去了。
首先,这里肯定要构造一个笛卡尔积,而且题目中指出了要用第一个表中的数据,而不是使用第二个表,也就是说,只需要显示的确有对应组合发生的数据。
那么问题就简单了


select a.prod_code 产品A, b.prod_code 产品B, count(1) 同时持有的客户数
from report_cust_prod_aum_stats a, report_cust_prod_aum_stats b
where a.cust_no = b.cust_no
and a.prod_code <> b.prod_code
group by a.prod_code, b.prod_code

如果需要翻译产品名称,再把第二个表关联进去两次来进行翻译就好了。
当然,这个题目中漏了一个说明,比如
产品A为"国金",产品B为"国金"

产品A为"现金宝",产品B为"现金宝"
这两条是否需要去重?
某些业务场景下是需要去重的,当然也有某些业务场景下是不需要去重的


LINK:https://ask.csdn.net/questions/7608688?answer=53635898
SOURCE:CSDN_ASK
ASK_ID:7609149
ANSWER_ID:53635850
TITLE:SQL的文件怎么能使啊
ANSWER:
  1. 你这是sqlserver的数据库,请不要挂mysql数据库的标签
  2. "create table if not exists"的写法是mysql数据库使用的,sqlserver不能用

LINK:https://ask.csdn.net/questions/7609149?answer=53635850
SOURCE:CSDN_ASK
ASK_ID:7608889
ANSWER_ID:53635834
TITLE:oracle是否有一种可以在存储过程中使用的内存表,可以用来保存查询结果并多次使用,做join查询merge更新用
ANSWER:
  1. 数据集合是可以作为表来查询的,使用table()函数即可,但的确无法以操作表的方式来修改它的数据或者结构
  2. 在ORACLE18c中,引入了一个新的特性,叫私有临时表,只会在一个会话或者一个事务内有效,不同的会话就算使用相同的表名也不冲突。而且私有临时表创建后在DBA_OBJECTS和DBA_TABLES中也找不到

LINK:https://ask.csdn.net/questions/7608889?answer=53635834
SOURCE:CSDN_ASK
ASK_ID:7608872
ANSWER_ID:53635828
TITLE:Oracle数据库中怎么提取指定时间?
ANSWER:

方案一,查看你这个函数的代码,参考着修改,建一个新的函数
方案二,直接用下面的写法即可


select  last_day(add_months( trunc(sysdate),-2)) from 表名;

ORACLE里要取各种日期其实很容易的,封装普通的自定义函数看上去是让代码整洁了,但是执行效率会变低,除非使用函数缓存或者sql宏


LINK:https://ask.csdn.net/questions/7608872?answer=53635828
SOURCE:CSDN_ASK
ASK_ID:7583390
ANSWER_ID:53635183
TITLE:遇到了一个看不太明白的脚本,可以解释一下吗
ANSWER:

关闭回显
进入 G:\NV_Eeprom_200414\Windows 目录
如果存在 "G:\NV_Eeprom_200414\Windows\automotive.cfg" 这个文件 ,则 运行 nvcamencoder ,后面的都是运行这个程序的参数
否则 显示 "Not exist automotive.cfg file! Please make it."
回显结束


LINK:https://ask.csdn.net/questions/7583390?answer=53635183
SOURCE:CSDN_ASK
ASK_ID:7607918
ANSWER_ID:53635178
TITLE:使用datax同步oracle到hive的数据错乱问题
ANSWER:

查了一些资料,Datax源码的确有点问题,需要修改Datax的源码。
参考:



LINK:https://ask.csdn.net/questions/7607918?answer=53635178
SOURCE:CSDN_ASK
ASK_ID:7608620
ANSWER_ID:53635161
TITLE:我数据库的系统分离了,为什么在电脑里找不到相应的mdf,ldf文件?
ANSWER:
  1. 你这是"sqlserver",麻烦标签不要挂"mysql"
  2. 查看sqlserver数据库文件存储路径的方式为,用你这个工具连接数据库后,在数据库名称上点鼠标右键-"属性"-"文件",即可查看你当时创建数据库时有没有定义文件,文件是存储在哪

LINK:https://ask.csdn.net/questions/7608620?answer=53635161
SOURCE:CSDN_ASK
ASK_ID:7608383
ANSWER_ID:53634994
TITLE:mysql更改root密码语法错误
ANSWER:

用错符号了,应该是单引号',而不是`


LINK:https://ask.csdn.net/questions/7608383?answer=53634994
SOURCE:CSDN_ASK
ASK_ID:7608371
ANSWER_ID:53634985
TITLE:为什么Oracle账户无法删除和更改密码
ANSWER:

操作系统的账户重命名不是在这个界面么?

img


LINK:https://ask.csdn.net/questions/7608371?answer=53634985
SOURCE:CSDN_ASK
ASK_ID:7608335
ANSWER_ID:53634982
TITLE:管理员模式无法登录MySQL
ANSWER:
  1. 检查下环境变量, mysql的路径是不是配置成了用户变量而不是系统变量,可以通过配置系统环境变量解决。
  2. 如果不想配置环境变量的话,可以在mysql前面加上全路径,先找到你mysql的安装路径,找到mysql.exe,假设路径为 d:\mysql\mysql.exe,则命令为
    d:\mysql\mysql.exe -u root -p


LINK:https://ask.csdn.net/questions/7608335?answer=53634982
SOURCE:CSDN_ASK
ASK_ID:7608310
ANSWER_ID:53634978
TITLE:MYSQL多条件查询
ANSWER:
select * from
where
ifnull(名称,‘CSDN’)
=‘CSDN’ and
ifnull(区域,‘问答’)
=‘问答’ and
ifnull(负责人,‘暂无’)
=‘暂无’

LINK:https://ask.csdn.net/questions/7608310?answer=53634978
SOURCE:CSDN_ASK
ASK_ID:7608039
ANSWER_ID:53634682
TITLE:MySQL deny授予禁止权限的用法,
ANSWER:

关于deny的用法,参考此篇sqlserver的


LINK:https://ask.csdn.net/questions/7608039?answer=53634682
SOURCE:CSDN_ASK
ASK_ID:7608060
ANSWER_ID:53634681
TITLE:Mysql环境下select两表联合多条件查询语句怎么写?
ANSWER:

mysql没有full join,可以使用以下方式


select nvl(a.id, b.id) id,
nvl(a.numb, 0) yonggongshu,
nvl(b.numb, 0) zichanshu,
b.numb/a.numb pinjun
from (select id,sum(numb) numb from book1 a where a.leibie in (‘中层’, ‘临时工’) group by id) a
left join (select id,sum(numb) numb from book2 b where b.zichan in (‘房屋’, ‘门面’) group by id) b
on a.id = b.id
union
select nvl(a.id, b.id) id,
nvl(a.numb, 0) yonggongshu,
nvl(b.numb, 0) zichanshu,
b.numb/a.numb pinjun
from (select id,sum(numb) numb from book1 a where a.leibie in (‘中层’, ‘临时工’) group by id) a
right join (select id,sum(numb) numb from book2 b where b.zichan in (‘房屋’, ‘门面’) group by id) b
on a.id = b.id

注意中间的union,达到去重的效果


LINK:https://ask.csdn.net/questions/7608060?answer=53634681
SOURCE:CSDN_ASK
ASK_ID:7607641
ANSWER_ID:53634307
TITLE:请问sql for json path如何控制查询结果输出为单个列名形式
ANSWER:
select ‘[{“id”:[’+stuff((select ‘,’+cast(id as varchar)  from temp1 
for xml path(‘’)),1,1,‘’) +‘],“vars”:[’+stuff((select ‘,"’+(vars)+‘"’ from temp1
for xml path(‘’)),1,1,‘’) +‘]}]’

实测截图,和你要的结果一模一样

img


测试地址


list其实是无序的,你分开两个数组,很有可能会导致数据无法对应。json和xml一样,一直是有大量冗余的字符,但这就是保证兼容性的标准。自己定解析规则也不是不行,但这样就无法兼容其他外部接口了,只能你自己内部使用


LINK:https://ask.csdn.net/questions/7607641?answer=53634307
SOURCE:CSDN_ASK
ASK_ID:7607548
ANSWER_ID:53634243
TITLE:如何解决Crystal Reports 2008的ORA-28040报错
ANSWER:

有两个方案


  1. 更新你本地的oracle客户端版本为 12.2或更高,你使用的"Oracle Provider for OLE DB"其实并不是你本机安装的11g版本,而是操作系统预置的,建议使用其他驱动程序,ODBC或者JDBC都可以,但要注意使用新版的驱动包


  2. 在服务器端修改验证方式(非常不建议使用此种方式)
    在${oracle_home}\network\admin\sqlnet.ora最后添加
    SQLNET.ALLOWED_LOGON_VERSION=8
    SQLNET.ALLOWED_LOGON_VERSION=9
    SQLNET.ALLOWED_LOGON_VERSION=10
    SQLNET.ALLOWED_LOGON_VERSION=11
    SQLNET.ALLOWED_LOGON_VERSION=12



LINK:https://ask.csdn.net/questions/7607548?answer=53634243
SOURCE:CSDN_ASK
ASK_ID:7607564
ANSWER_ID:53634214
TITLE:hive查询,使用where子查询没有返回结果
ANSWER:

where中又使用了一次emloyees表,和上面的emloyees表没有任何关联关系,你要根据80000.0来定位数据的话,应该是像下面这样写


select name, salary, deductions[“Federal Taxes”] as ded,
salary * (1 - deductions[“Federal Taxes”]) as salary_minus_fed_taxes from employees
where salary * (1 - deductions[“Federal Taxes”]) = 80000.0;

当然我不确定你这个显示是否有小数位四舍五入,或许要改成


round(salary * (1 - deductions[“Federal Taxes”]) ,1) = 80000.0

LINK:https://ask.csdn.net/questions/7607564?answer=53634214
SOURCE:CSDN_ASK
ASK_ID:7607536
ANSWER_ID:53634195
TITLE:sql三表关联后去重
ANSWER:

把表结构和你最后想要的格式发出来,并说明对应关系
根据你的问题,你这个sql应该改写成下面这个样子


select distinct  
a.UserID,
b.Approver,
c.GroupName
from [ dbo ] . [ UserList ] a
left join [ dbo ] . [ ApproverMapping ] b
on a.GroupID = b.GroupID
left join [ dbo ] . [ GroupMapping ] c
on b.GroupID = c.ID
where Approver <> ‘’
and Team = ‘Requester’

根据题主补充描述,可使用开窗函数结合nullif函数使上下相邻两个格子中重复数据只保留一个,其他变为空值,如下


select   nullif(c.GroupName, lag(c.GroupName) over(order by c.GroupName,a.UserID,b.Approver)) GroupName,
a.UserID,
b.Approver
from UserList a
left join ApproverMapping b
on a.GroupID = b.GroupID
left join GroupMapping c
on b.GroupID = c.ID
where Approver <> ‘’
and Team = ‘Requester’
order by c.GroupName,a.UserID,b.Approver

下面是sqlserver实测截图


img


此方法在oracle数据库中也可以使用,参考


LINK:https://ask.csdn.net/questions/7607536?answer=53634195
SOURCE:CSDN_ASK
ASK_ID:7607475
ANSWER_ID:53634193
TITLE:如何根据一个字段控制另一个字段保留相应的小数位
ANSWER:

对应的参数位置直接使用那个字段就好了,比如


create table test_det(numb number,det number);
insert into test_det values (3.14159,2);

select numb,round(numb,det) from test_det;

img


以上测试来自于oracle数据库,sqlserver中的round函数应该是一样的效果,都符合ANSI-SQL标准


LINK:https://ask.csdn.net/questions/7607475?answer=53634193
SOURCE:CSDN_ASK
ASK_ID:7607461
ANSWER_ID:53634182
TITLE:为什么查询过程出现了指定了非布尔型表达式啊
ANSWER:

img


这句语法不对,报错提示不是布尔表达式 ,是指的 where 后面,你只接了一个material_no ,很明显这个值不是true或false。
但这一行的错误还不仅仅只有这一个,看不懂你这句想要干什么


LINK:https://ask.csdn.net/questions/7607461?answer=53634182
SOURCE:CSDN_ASK
ASK_ID:7607424
ANSWER_ID:53634176
TITLE:navicat怎么设置对性别的约束
ANSWER:

不同的数据库有点区别,如果是mysql的话


create table test111(sex varchar(10) check (sex in (‘男’,‘女’)));
insert into test111 values (‘男’)
–Affected rows: 1
–时间: 0.118s
insert into test111 values (‘女’)
–Affected rows: 1
–时间: 0.056s
insert into test111 values (‘公’)
–4025 - CONSTRAINT `test111.sex` failed for `mysql`.`test111`
–时间: 0.001s

LINK:https://ask.csdn.net/questions/7607424?answer=53634176
SOURCE:CSDN_ASK
ASK_ID:7607491
ANSWER_ID:53634149
TITLE:select跨表查询之分表汇总后联合显示数据如何处理?
ANSWER:

在两张表中都有可能关联数据缺失的情况下,如果要让数据不会由于关联而遗漏,需要使用full join,并且对select的字段做判断为空的处理,另外就是对除数为0的处理。
以下是在oracle数据库中的写法,其他数据库可能有些函数名不一样,但思路都是一样的


select nvl(a.id, b.id) id,
sum(nvl(a.numb, 0)) yonggongshu,
sum(nvl(b.numb, 0)) zichanshu,
decode(sum(nvl(a.numb, 0)),
0,
null,
sum(nvl(b.numb, 0)) / sum(nvl(a.numb, 0))) pinjun
from (select * from book1 a where a.leibie in (‘中层’, ‘临时工’)) a
full join (select * from book2 b where b.zichan in (‘房屋’, ‘门面’)) b
on a.id = b.id
group by nvl(a.id, b.id)

我手上目前没有sqlite,关于full join 的替代方式可以在网上搜一下,当然针对你这个问题有另外一种方式,无需join



select id,
sum(case when t= ‘book1’ then sum_numb else 0 end ) yonggongshu,
sum(case when t= ‘book2’ then sum_numb else 0 end) zichanshu,
case
when
sum(case when t= ‘book2’ then sum_numb else 0 end)=0 then null
else
sum(case when t= ‘book1’ then sum_numb else 0 end) /
sum(case when t= ‘book2’ then sum_numb else 0 end)
end pinjun
from (select id, ‘book1’ t, sum(numb) sum_numb
from book1 a
where a.leibie in (‘中层’, ‘临时工’)
group by id
union all
select id, ‘book2’ t, sum(numb) sum_numb
from book2 b
where b.zichan in (‘中层’, ‘临时工’)
group by id)
group by id

搜了下,sqlite好像不支持decode,所以改成case when了


LINK:https://ask.csdn.net/questions/7607491?answer=53634149
SOURCE:CSDN_ASK
ASK_ID:7607120
ANSWER_ID:53633992
TITLE:Mysql连接mycat报错是什么原因呢?
ANSWER:

到这里下载对应操作系统版本的jdbc库放进去
https://dev.mysql.com/downloads/connector/j/


LINK:https://ask.csdn.net/questions/7607120?answer=53633992
SOURCE:CSDN_ASK
ASK_ID:7607216
ANSWER_ID:53633981
TITLE:列转行需要用sql处理处理拆分拼接字段
ANSWER:

问题不够明确,建议拿数据举例,转换前是什么样子,转换后是什么样子,至少要有两条数据的例子


LINK:https://ask.csdn.net/questions/7607216?answer=53633981
SOURCE:CSDN_ASK
ASK_ID:7607189
ANSWER_ID:53633975
TITLE:根据前端过来不同日期 统计日期每小时的访问量 写动态sql 统计24小时内每小时的数据
ANSWER:
select to_number(substr(access_time, 1, 2)) 小时, count(1) 数量
from SYS_OSB_SERVICE_ACCESS
where access_date = ?
group by substr(access_time, 1, 2);

LINK:https://ask.csdn.net/questions/7607189?answer=53633975
SOURCE:CSDN_ASK
ASK_ID:7606642
ANSWER_ID:53633444
TITLE:java mysql单表千万级数据求和
ANSWER:

一般情况下,当然是在sql里快。
但在某种极端情况下,比如数据库cpu特垃圾,但磁盘特快,网络特快,然后应用端内存特大且频率特高,再加上应用端cpu超快,是有可能应用算比较快的,因为数据库卡主了。。。


LINK:https://ask.csdn.net/questions/7606642?answer=53633444
SOURCE:CSDN_ASK
ASK_ID:7606574
ANSWER_ID:53633438
TITLE:Mysql创建数据库报错
ANSWER:

这是sql server创建数据库的指令,在mysql里当然不行了啊


LINK:https://ask.csdn.net/questions/7606574?answer=53633438
SOURCE:CSDN_ASK
ASK_ID:7606488
ANSWER_ID:53633425
TITLE:oracle自定义了个日期函数,这种写法有什么错误?
ANSWER:
datatime := select TO_DATE(to_char(sysdate,‘yyyy-mm-dd’),‘yyyy-mm-dd’) from dual;

上面这一行改成下面这样


select TO_DATE(to_char(sysdate,‘yyyy-mm-dd’),‘yyyy-mm-dd’) into datatime from dual;

还有,你最后的 “return (datatime);”,可以不要括号


LINK:https://ask.csdn.net/questions/7606488?answer=53633425
SOURCE:CSDN_ASK
ASK_ID:7606032
ANSWER_ID:53632820
TITLE:excel用&合并单元格内容后为什么整数1000变成了1,
ANSWER:

img


excel里应该没有这个列


LINK:https://ask.csdn.net/questions/7606032?answer=53632820
SOURCE:CSDN_ASK
ASK_ID:7606335
ANSWER_ID:53632808
TITLE:如何将以下数据按影视、教育、音乐、电竞等板块分组
ANSWER:

转换后的第一列,是否为责任方这个字段的最后两个汉字?
如果是,你直接用substr函数截取最后两个汉字作为一列就行了;
如果不是,那么是否有另一张表记录了责任方归属的板块?
如果有这张表,那么关联两张表查询就好了;
如果没有这张表,那就要建一张这样的表


LINK:https://ask.csdn.net/questions/7606335?answer=53632808
SOURCE:CSDN_ASK
ASK_ID:7605876
ANSWER_ID:53632793
TITLE:oracle一列多值的更新问题。
ANSWER:

问题有点歧义,"多值含有3,要把3删掉"这种情况,如果是’1,2,3’也是要把3删掉么?那么这不就是所有的3都被删掉了?我先假设你’1,2,3’是想转换成’a,b,c’,那么可以用translate函数来进行转换,其他的特殊处理用case when来判断,比如


with t1 as –模拟初始数据
(select COLUMN_VALUE col
from table(ora_mining_varchar2_nt(‘1,2,3’, ‘,2,3’, ‘1,3’, ‘,3’, ‘1,’))),
t2 as
(select col, translate(col, ‘123’, ‘abc’) l from t1)
select col,
l,
case
when l = ‘,c’ then
null
when l like ‘%c%’ and length(l) < 5 then
replace(l, ‘c’)
else
l
end
from t2;

img


以上sql为方便理解,拆解了步骤,其实可以合并成只用一个select的


LINK:https://ask.csdn.net/questions/7605876?answer=53632793
SOURCE:CSDN_ASK
ASK_ID:7606285
ANSWER_ID:53632755
TITLE:SQLyog导入数据库失败,不知道怎么搞
ANSWER:

第一个报错,No database selected 是你没有选择数据库,
第二个报错,提示的是company_b 这个表已经创建了,再创建就会提示已存在。
要么先把这个表删了再重导,要么把导入脚本里创建这个表的命令删掉


LINK:https://ask.csdn.net/questions/7606285?answer=53632755
SOURCE:CSDN_ASK
ASK_ID:7606167
ANSWER_ID:53632672
TITLE:未能加载文件或程序集
ANSWER:

删除以下注册表
HKEY_CURRENT_USER\Software\Microsoft\Microsoft SQL Server
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ Microsoft SQL Server
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSSQLServer
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SQLSERVER AGENT
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services \MSSQLServerADHelper
然后重新安装


LINK:https://ask.csdn.net/questions/7606167?answer=53632672
SOURCE:CSDN_ASK
ASK_ID:7605662
ANSWER_ID:53631992
TITLE:mysql如何查询多个值
ANSWER:

如果是MYSQL8.0版本,可以用with递归


LINK:https://ask.csdn.net/questions/7605662?answer=53631992
SOURCE:CSDN_ASK
ASK_ID:7605247
ANSWER_ID:53631987
TITLE:MYSQL触发器怎么写?
ANSWER:

很好奇你书里的例子,能不能拍个照看看,顺便拍一下书名?
“REFERENCING NEW TABLE AS"这种写法在pg里是有的,
在DB2里是"REFERENCING NEW_TABLE AS”,


然后我怀疑是我孤陋寡闻,在网上搜到了这篇,和你这个sql一模一样
http://codetd.com/article/10431225


但是,这是sql server啊,不是mysql,mysql是不支持这种语法的,不同数据库的语法是不一样的


LINK:https://ask.csdn.net/questions/7605247?answer=53631987
SOURCE:CSDN_ASK
ASK_ID:7605250
ANSWER_ID:53631936
TITLE:同一条sql,sqlplus,plsql中执行没有问题,后台报异常ORA-01855: AM/A.M. or PM/P.M. required
ANSWER:

这个玩意是基于oracle客户端产生的会话的,你java应用访问产生的会话,那么就要把java应用端的环境变量改了


可以创建登录触发器来修改,比如


CREATE OR REPLACE TRIGGER sys.schema_nls_session_settings AFTER LOGON ON SCOTT.SCHEMA
BEGIN
execute immediate ‘alter session set NLS_TIMESTAMP_TZ_FORMAT =’‘DD/MM/YYYY HH24:MI:SS TZR TZD’‘’;
END;
/

LINK:https://ask.csdn.net/questions/7605250?answer=53631936
SOURCE:CSDN_ASK
ASK_ID:7604845
ANSWER_ID:53631778
TITLE:类似qq那种,好友不同的分类
ANSWER:

你这个问题就是设计两张表,1张人员明细表,1张好友类型表,两张表通过好友类型代码建立关系
人员明细表记录人员基础信息及好友类型代码
好友类型表记录好友类型代码及好友类型描述


加人就在人员明细表里插数据,好友类型只能从好友类型表里选;
如果要增加好友类型,就往好友类型表里插数据。


去了解下什么叫做关系型数据库吧


LINK:https://ask.csdn.net/questions/7604845?answer=53631778
SOURCE:CSDN_ASK
ASK_ID:7605379
ANSWER_ID:53631769
TITLE:update和count一样用,统计函数怎么写
ANSWER:
update 测试 a set a.zone=(select count(*) from 测试 b where a.town=b.town);

LINK:https://ask.csdn.net/questions/7605379?answer=53631769
SOURCE:CSDN_ASK
ASK_ID:7605215
ANSWER_ID:53631763
TITLE:oracle rac集群为什么需要部署在物理服务器上?
ANSWER:

本地虚拟机都能装rac,谁说的不能部署在云服务器上?


LINK:https://ask.csdn.net/questions/7605215?answer=53631763
SOURCE:CSDN_ASK
ASK_ID:7604342
ANSWER_ID:53631582
TITLE:mysql插入数据时做判断
ANSWER:

同意楼上王胖胖,
判断是否迟到,只需要根据数据本身就能判断,那么你完全可以在查询数据的时候,来多显示一个字段,用if或者case when都行


LINK:https://ask.csdn.net/questions/7604342?answer=53631582
SOURCE:CSDN_ASK
ASK_ID:7604739
ANSWER_ID:53631556
TITLE:SqlCommand运行一个正确的sql语句,查询结果与数据库中的查询结果不一致?
ANSWER:

断点调试或者打印下日志,看 rdr["contact"].ToString() 这个玩意在程序运行中到底是个啥值,如果对了就跟踪Contact值的变化;如果不对就往前找


LINK:https://ask.csdn.net/questions/7604739?answer=53631556
SOURCE:CSDN_ASK
ASK_ID:7604588
ANSWER_ID:53631527
TITLE:请教DB2中分组统计中,如何显示COUNT结果为0的行?
ANSWER:

这个题有问题,如果带where条件能查到1100,比如下面这个sql


select orgNo  from table_A where MDL=‘mbmbrsig’

那么查询同一个表,不带条件,理论上查出来的数据只会多不会少,可是题主却说1100不见了?


建议题主把真实的sql发一下


LINK:https://ask.csdn.net/questions/7604588?answer=53631527
SOURCE:CSDN_ASK
ASK_ID:7605135
ANSWER_ID:53631504
TITLE:SQL server导出一段包含换行符的数据 直接查询导出数据不会换行
ANSWER:

EXCEL中要显示换行,需保证字符串中有回车符和换行符两个,你原始数据可能只有一个换行或者只有一个回车,因此导致在不同程序中看到的情况不一样。
要解决此问题有两种方式,一是把数据库中的数据更新成带回车加换行的,另一种方式就是在导出sql中,使用replace,将换行符替换成回车加换行符。
回车是char(13)
换行是char(10)


LINK:https://ask.csdn.net/questions/7605135?answer=53631504
SOURCE:CSDN_ASK
ASK_ID:7604039
ANSWER_ID:53630405
TITLE:寻找解决方法——mysql创建储存函数
ANSWER:

一般来说,常规写法是,这个过程里要声明两个变量,一个平均分,一个返回值,
先根据条件查询平均分, select into 到这个变量里去,然后再用if来判断这个变量,根据不同情况对这个返回值进行赋值,最后return返回值;


另一个做法就是,先写个查询sql,计算平均值,并直接用case when 判断,直接得出最终输出的结果,然后把这个sql改成 into 到一个变量,最后return它就好了


DELIMITER $$
CREATE OR REPLACE FUNCTION test_func ( student_sno VARCHAR ( 20 ) )
RETURNS VARCHAR ( 20 )
BEGIN
DECLARE l_avg FLOAT;
DECLARE o VARCHAR ( 20 );
SELECT AVG( degree ) INTO l_avg
FROM sc x
WHERE sno = student_sno;
IF
l_avg >= 90 THEN
SET o = ‘AAA’;
ELSEIF l_avg >= 70 THEN
SET o = ‘AA’;
END IF;
RETURN O;
END
$$

DELIMITER;

LINK:https://ask.csdn.net/questions/7604039?answer=53630405
SOURCE:CSDN_ASK
ASK_ID:7604240
ANSWER_ID:53630396
TITLE:运行sql文件成功;转储sql文件运行成功,但刷新都没有表
ANSWER:

确认下sql文件里面有没有建表语句,建表语句有没有指定其他schema


LINK:https://ask.csdn.net/questions/7604240?answer=53630396
SOURCE:CSDN_ASK
ASK_ID:7604273
ANSWER_ID:53630393
TITLE:dbeaver本地oracle数据库
ANSWER:

监听没启动


LINK:https://ask.csdn.net/questions/7604273?answer=53630393
SOURCE:CSDN_ASK
ASK_ID:7604067
ANSWER_ID:53630239
TITLE:sql怎么求出每个时间段在线的人数。
ANSWER:

这个呀,直观上来看,是如何让一行记录变多行的问题,
比如第一行的小红,应该是8点、9点、10点各一条记录,这样才能根据时间进行分组,然后count。
我先假定你这个表没有跨日记录的,where条件限制在了某一天,然后login和logout没有空值,
然后假定8点30是算在8点的,
那么其实有可能会出现一种情况,某个时间点没有人在线,为了保证数据连续性,所以得提前构造一个从0到23的一列数据(暂命名为h)作为一张表(暂命名为t),用来外关联你这张表
接下来就是对你的原始表,把小时截取出来, 得到 登入小时、登出小时, 然后这两个数据的关联条件为 t.h between 登入小时 and 登出小时。
这样,你就可以把一条记录按小时分解成了多条记录,最后再按t.h进行group by ,count行数即可


LINK:https://ask.csdn.net/questions/7604067?answer=53630239
SOURCE:CSDN_ASK
ASK_ID:7603946
ANSWER_ID:53630217
TITLE:mysql通过insert into select插入数据过程中使用cast(expr as json)将varcahr(255)类型转成json类型
ANSWER:

拼字符串就是了


cast(concat(‘{“en”: "’,name,‘", “zh”: "’,name,‘"}’) as json)

LINK:https://ask.csdn.net/questions/7603946?answer=53630217
SOURCE:CSDN_ASK
ASK_ID:7603794
ANSWER_ID:53630080
TITLE:MYSQL的unix_timestamp问题
ANSWER:

你cut_time这个字段里面,并不是所有数据都满足这个日期格式,
两条sql查询的并不一定是同一条数据,你可以查询的时候多查一个字段,比如


select cut_time,unix_timestamp(cut_time) from pdc_piece limit 1

看看这个转换错误的cut_time这一行到底长啥样


LINK:https://ask.csdn.net/questions/7603794?answer=53630080
SOURCE:CSDN_ASK
ASK_ID:7603904
ANSWER_ID:53630072
TITLE:请求同一个名称下的多列数据怎么合并到同一行?
ANSWER:

a.id = b.id 这个条件,换成 a.organization_no = b.organization_no,下面那个a.id = c.id 换成 a.organization_no = c.organization_no就可以输出你想要的结果了。


LINK:https://ask.csdn.net/questions/7603904?answer=53630072
SOURCE:CSDN_ASK
ASK_ID:7603758
ANSWER_ID:53630019
TITLE:在不一致数据转换上遇到问题,表输入预览失败,不知如何推进
ANSWER:

报错是 table "transforms.suppliers" not exists
即 表 "transforms.suppliers"不存在,
请确认transforms这个用户下是不是存在suppliers 这个表


LINK:https://ask.csdn.net/questions/7603758?answer=53630019
SOURCE:CSDN_ASK
ASK_ID:7603390
ANSWER_ID:53630000
TITLE:Oracle 如何生成每月累计增加额,查询语句改如何写
ANSWER:

先 生成一个每年每月的数据,然后外关联到基础表,再用你的开窗函数处理。
至于生成这个每年每月的数据,提供三种方式,


  1. 可以创建一张实体表,有两个字段 ,年、月,把要用的年月都插进去
  2. 或者直接用union all 来构造一个含有年月数据的sql select ‘2021’,‘01’ from dual union all select ‘2021’,‘02’ from dual union all select ‘2021’,‘03’ from dual …
  3. 高级一点的方案就是,用connect by递归方式来生成一个年月的sql
    select to_char(add_months(date ‘2019-01-01’, rownum - 1), ‘yyyy’) 年,
    to_char(add_months(date ‘2019-01-01’, rownum - 1), ‘mm’) 月
    from (select rownum
    from dual
    connect by rownum <=
    MONTHS_BETWEEN(date ‘2022-01-01’, date ‘2019-01-01’));


LINK:https://ask.csdn.net/questions/7603390?answer=53630000
SOURCE:CSDN_ASK
ASK_ID:7601803
ANSWER_ID:53629622
TITLE:Mysql查询AS别名显示错误
ANSWER:

猜测字符集设置出了问题,建议尝试先把 "姓名" 改成改成英文字符确认一下看还是否报错


LINK:https://ask.csdn.net/questions/7601803?answer=53629622
SOURCE:CSDN_ASK
ASK_ID:7602568
ANSWER_ID:53629606
TITLE:关于Mysql中replace的用法,替换字段的符号处理问题
ANSWER:

REPLACE函数的语法为,


REPLACE(原始字段或字符串,查找字符串,要替换成的字符串)

在数据库sql中,字符串应该用单引号包起来,像下面这样


updata 表A set 字段名 = REPLACE(字段名,‘“max”:1,“maxUnit”:“<”’,‘“max”:16,“maxUnit”:“”’)

LINK:https://ask.csdn.net/questions/7602568?answer=53629606
SOURCE:CSDN_ASK
ASK_ID:7603172
ANSWER_ID:53629596
TITLE:请问第一次使用navicat premium发生这个问题,怎么解决
ANSWER:

这是苹果电脑的安全提示,与navicat premium本身无关。破解补丁一般都会报恶意软件的


LINK:https://ask.csdn.net/questions/7603172?answer=53629596
SOURCE:CSDN_ASK
ASK_ID:7603254
ANSWER_ID:53629591
TITLE:mysql 时间语句查询
ANSWER:

一条sql的话:
使用日期转星期函数 DAYOFWEEK(日期) ,得到 1(星期天),2(星期一)…7(星期六),然后group by 月份和这个星期, count(distinct 订单号)/count(distinct 日期)


如果要性能好点,先汇总出每天的订单总量,再按上面的方法算,最后用sum(日订单总量)/count(日期)


LINK:https://ask.csdn.net/questions/7603254?answer=53629591
SOURCE:CSDN_ASK
ASK_ID:7602953
ANSWER_ID:53629576
TITLE:DB2使用with子查询的时候,添加where条件无法进行除法运算
ANSWER:

9除以59的结果是小于1的,你看下是不是显示做了格式化,只保留了整数显示,尝试把显示改成多保留几位小数


LINK:https://ask.csdn.net/questions/7602953?answer=53629576
SOURCE:CSDN_ASK
ASK_ID:7603256
ANSWER_ID:53629570
TITLE:谁能将union all之后的多条查询结果横向展示##mysql
ANSWER:

看了上面的沟通,这玩意不是excel里面写写公式弄个透视表就出来了么。。。压根不用写什么程序呀。。。


另外,你如果要用sql,完全没必要列转行又转列呀,它本来就是列,你直接一个sql对每个科目的分数进行平均不就好了?


SELECT cc.S_BANJI 班级,
‘语文’ ,ROUND(AVG(cc.S_YUWEN), 1) 平均分,
‘数学’ ,ROUND(AVG(cc.S_SHUXUE), 1) 平均分,
…–各科目
FROM cjtj cc GROUP BY cc.S_BANJI

LINK:https://ask.csdn.net/questions/7603256?answer=53629570
SOURCE:CSDN_ASK
ASK_ID:7602974
ANSWER_ID:53629540
TITLE:mysql 排除指定行数据
ANSWER:

怀疑前端代码处理有误,你可以在数据库中执行一下查询,看结果是否正确


LINK:https://ask.csdn.net/questions/7602974?answer=53629540
SOURCE:CSDN_ASK
ASK_ID:7603269
ANSWER_ID:53629531
TITLE:如何提取名称,SQL
ANSWER:

截取从第一位到第一个左括号的字符,即


substr(店名,1,instr(店名,‘(’)-1)

LINK:https://ask.csdn.net/questions/7603269?answer=53629531
SOURCE:CSDN_ASK
ASK_ID:7603381
ANSWER_ID:53629525
TITLE:刘哥,我照着你敲代码,网页商品列表查询失败
ANSWER:

SELECT COUNT(*) FROM (SELECT id,title,sell_point,price,num,images,item_cat_id,status,created,updated FROM /item) TOTAL
这条sql错了,没有这种写法"from /item"


LINK:https://ask.csdn.net/questions/7603381?answer=53629525
SOURCE:CSDN_ASK
ASK_ID:7602786
ANSWER_ID:53628872
TITLE:dw2021与sql如何建立链接!2021版本
ANSWER:

连数据库其实都是通过其他的公共组件连接的,关它Dreamweaver啥事。。你用其他的工具开发完,用Dreamweaver照样可以打开看页面里面的代码是怎么写的。
过于依赖工具的快捷方式,连生成的代码长什么样都不知道,这可不好哦


LINK:https://ask.csdn.net/questions/7602786?answer=53628872
SOURCE:CSDN_ASK
ASK_ID:7602544
ANSWER_ID:53628861
TITLE:一条sql语句怎么删俩张表关联的数据
ANSWER:
delete 表a where exists (select 1 from 表b where 表a.字段1=表b.字段1 and 表a.字段2=表b.字段2 and 表a.字段3=表b.字段3 and …)

LINK:https://ask.csdn.net/questions/7602544?answer=53628861
SOURCE:CSDN_ASK
ASK_ID:7602398
ANSWER_ID:53628856
TITLE:什么是数据库事务的一致性
ANSWER:
  1. 举个例子,有一张这样的表记录了某人的账户余额为100元,
    第一个事务,正在操作将这100元减去10元,因此该账户理论应该为90元,所以执行了一条sql,更新这个余额为90元,但是由于磁盘、内存、cpu的性能限制,这个动作并没有很快完成,此时
    第二个事务进来了,正在操作在此账户上增加10元,由于前一个事务未完成,因此第二个事务查到了该账户目前为100元,所以要更新账户余额为110元,
    很明显,如果不管事务,上面这两个操作不管谁先完成,最后的结果都是错的,不是90就是110.
    所以,程序在设计中,会在每一个要更新某条数据的事务前,先对此数据进行加锁,告诉其他事务该条数据正在更新,请排队。


  2. 再比如,假设该账户拥有某些特殊的福利政策,在某天的某个时间点,该账户的系统后台对所有类似账户发放基于余额5%的分红,但要操作的账户有很多,所以系统要执行很长时间,为避免在发放分红时余额数据还会发生变化,导致数据不可控,所以开启一个事务,在这个事务中,数据只会被本事务更新修改,其他事务无法更新到这个事务中的数据。


  3. 结合上面两个例子,不知道你是否稍微理解一点,我再举个直接的例子吧
    把数字100和数字2存入数据库A,B两个字段
    事务1判断,如果B字段不等于0,就更新A字段等于 A字段除以B字段的结果,
    然而就在事务1刚刚判断完成的时候,事务2跑过来把B字段更新成0了,
    那么此时事务1在更新的时候就会报错,但在程序逻辑上发现不了任何问题。
    然而程序中如果开启了事务控制,保证了事务的一致性,就不会出现此种错误,因为事务2在事务1未完成的时候,是执行不了的,以此保证了事务1的事务一致性,而事务2只能排队



LINK:https://ask.csdn.net/questions/7602398?answer=53628856
SOURCE:CSDN_ASK
ASK_ID:7602648
ANSWER_ID:53628835
TITLE:access多条件数据分组怎么做
ANSWER:

用switch函数


select switch(路龄<5 and 交通荷载等级 in (‘中’‘轻’) and 技术等级=‘一级’ ,‘0-5中轻一级’,
路龄<5 and 交通荷载等级 in (‘中’‘轻’) and 技术等级=‘二级’,‘0-5中轻二级’,
…, – 略,列出你所有的分组条件及对应的分组名称
其他) from

)

LINK:https://ask.csdn.net/questions/7602648?answer=53628835
SOURCE:CSDN_ASK
ASK_ID:7602029
ANSWER_ID:53628823
TITLE:将mysql的表同步到oracle后,如何筛选出两端不一致的数据
ANSWER:

同意楼上小彬哥的,
比如,你这个表里如果一个日期字段,你就group by 日期,然后count行数,两边比较一下,看是哪些天对不上,
如果此时要比较的数据还比较多,那就再指定这个日期作为条件,group by另一个字段,count行数,继续比较两边,以此下去就能找到是哪行对不上了


LINK:https://ask.csdn.net/questions/7602029?answer=53628823
SOURCE:CSDN_ASK
ASK_ID:7601652
ANSWER_ID:53627501
TITLE:sql语句的中定长字符char的疑问
ANSWER:

你对char的定长理解可能有点问题。
char(3)是指不管你存1个2个还是3个字符,它的存储上都占了3个字符,不足部分的空白字符是它自动补上去的;
而可变长字符串varchar则是你存多长,存储上就占用多长,这样比较节省空间


LINK:https://ask.csdn.net/questions/7601652?answer=53627501
SOURCE:CSDN_ASK
ASK_ID:7601150
ANSWER_ID:53627162
TITLE:请问SQL里面FOR UPDATE加的锁,什么时候释放呢?
ANSWER:

不同数据库情况会不一样。
根据你的提问,建议你先搜索一下相关资料,了解一下什么是数据库事务;
然后还要看数据库及该会话有没有设置自动commit。


假定你这个过程处于事务中,而且没有自动commit,那么在你执行for update时,就加锁了,而且直到最后你都没有显式的执行"commit;"那么这个锁就没有被释放。
如果没开事务,而且配置了自动commit,那么你第一步的锁马上就被释放了


LINK:https://ask.csdn.net/questions/7601150?answer=53627162
SOURCE:CSDN_ASK
ASK_ID:7600414
ANSWER_ID:53626757
TITLE:oracle触发器变量不更新
ANSWER:

你不把代码贴出来怎么看是不是有问题?


LINK:https://ask.csdn.net/questions/7600414?answer=53626757
SOURCE:CSDN_ASK
ASK_ID:7600514
ANSWER_ID:53626729
TITLE:求个ORACLE关于SQL的统计语句
ANSWER:
select min(id) ID,
BATCHCODE,
min(PARTNUMBER) PARTNUMBER,
sum(DB_COUNT) DB_COUNT,
0 IS_REPLACE,
null REPLACE_PARTNUMBER
from
group by BATCHCODE

LINK:https://ask.csdn.net/questions/7600514?answer=53626729
SOURCE:CSDN_ASK
ASK_ID:7600547
ANSWER_ID:53626724
TITLE:SQL字段里查询到的在指定位置加- 例如把1999-BGSC-0001改成1999-BGS-C-0001
ANSWER:

先用substr把这个字符串截成两段,然后在中间再拼接一个’-‘,
下面是oracle数据库的写法


substr(’1999-BGSC-0001‘,1,8)||’-‘||substr(’1999-BGSC-0001',9,6)

其他数据库的字符串拼接方式请自行查找


LINK:https://ask.csdn.net/questions/7600547?answer=53626724
SOURCE:CSDN_ASK
ASK_ID:7600603
ANSWER_ID:53626722
TITLE:求一段时间内不连续的时间间隔之和
ANSWER:

开始时间要case when 一下,如果小于8点就当8点算,否则就保留原值;
结束时间也是一样,如果大于20点就当20点算,否则就保留原值,
最后用转换后的结束时间减去开始时间得运行时长


LINK:https://ask.csdn.net/questions/7600603?answer=53626722
SOURCE:CSDN_ASK
ASK_ID:7600563
ANSWER_ID:53626711
TITLE:sql里的with as 和视图有什么不同吗
ANSWER:

1.with as 不用创建一个实体对象,可以灵活变化,而视图的sql是固定的
2.with as 支持递归,视图不支持


LINK:https://ask.csdn.net/questions/7600563?answer=53626711
SOURCE:CSDN_ASK
ASK_ID:7600661
ANSWER_ID:53626704
TITLE:SQL serve咋下载快
ANSWER:

到官网下载,很快,下载页面
https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads


LINK:https://ask.csdn.net/questions/7600661?answer=53626704
SOURCE:CSDN_ASK
ASK_ID:7600263
ANSWER_ID:53625980
TITLE:SQL2012 错误信息:事务在触发器中结束,批处理已中止。
ANSWER:

这是触发器里面写的业务逻辑,你可以看下这个触发器代码中,"不存在该农户"这句抛错的前面是什么代码,就知道是什么东西数据不满足这个业务要求了


LINK:https://ask.csdn.net/questions/7600263?answer=53625980
SOURCE:CSDN_ASK
ASK_ID:7600047
ANSWER_ID:53625779
TITLE:sql server中显示数据时临时改变列名的代码是什么?
ANSWER:
select 原列名1 as 新列名1,原列名2 as 新列名2 from 表名

LINK:https://ask.csdn.net/questions/7600047?answer=53625779
SOURCE:CSDN_ASK
ASK_ID:7599607
ANSWER_ID:53625624
TITLE:Oracle psu补丁
ANSWER:

此补丁程序已被取代。


原因
Patch 24006111 is Superset of Patch 23054359
注释
The most recent replacement for this patch is 31537677.
替换选项(包含或取代此补丁程序的已知补丁程序或补丁程序集)


31537677 DATABASE PATCH SET UPDATE 11.2.0.4.201020 补丁程序


LINK:https://ask.csdn.net/questions/7599607?answer=53625624
SOURCE:CSDN_ASK
ASK_ID:7599390
ANSWER_ID:53625622
TITLE:Oracle11g单机打补丁报Prerequisite check "CheckSystemCommandAvailable" failed.
ANSWER:

没有fuser命令,要先安装psmisc


yum install psmisc

LINK:https://ask.csdn.net/questions/7599390?answer=53625622
SOURCE:CSDN_ASK
ASK_ID:7598840
ANSWER_ID:53625593
TITLE:SQL 2008 目前有一张销售明细表 有上百万条数据想重置销售流水号如何操作
ANSWER:

你得先说你想要的流水号规则,
很明显,这个流水号字段是个最长4位的整数,最多存10000个不同的流水号,
根据我以往的经验来看,我猜你这个流水号是 对于同一个 "店号、销售日期、机台号" 确保不重复,
先把表备份出来,然后去掉主键,把"店号、销售日期、机台号" distinct出来,然后循环去对每一个 "店号、销售日期、机台号"用序列来重置流水号。
但是,把这个已经产生的数据进行重置没有任何意义啊,未来还会有数据写入,你确定要这么做么?


LINK:https://ask.csdn.net/questions/7598840?answer=53625593
SOURCE:CSDN_ASK
ASK_ID:7599446
ANSWER_ID:53625577
TITLE:请问在sql里select只能查询聚合函数或者group by引用过的字段,但有一些表里像name,门店名称,品牌名称这些字段也可以select,是因为这些是主键吗?请问怎么判断哪些字段是主键呢?
ANSWER:

所有字段都可以select。
我猜题主是把group by 的限制自行放大了,
如果没有group by ,你想查哪个字段就查哪个字段,数据库本来就是干这个活的;
如果有group by ,为确保查询出来的数据准确,对于查询的非聚合字段,一般都要放到group by 后面,否则出来的数据可能是随机的


LINK:https://ask.csdn.net/questions/7599446?answer=53625577
SOURCE:CSDN_ASK
ASK_ID:7599053
ANSWER_ID:53625569
TITLE:解决oracle 12c中wm_concat函数无效问题
ANSWER:

自问自答??


LINK:https://ask.csdn.net/questions/7599053?answer=53625569
SOURCE:CSDN_ASK
ASK_ID:7599787
ANSWER_ID:53625565
TITLE:Oracle巡检脚本大全,服务器可直接部署
ANSWER:

咋发到问答区来了。。。。


LINK:https://ask.csdn.net/questions/7599787?answer=53625565
SOURCE:CSDN_ASK
ASK_ID:7599585
ANSWER_ID:53625396
TITLE:sql中给已建表中的列添加数据,为何报错?
ANSWER:

插入数据不需要执行alter table,只要执行 insert语句就好了


LINK:https://ask.csdn.net/questions/7599585?answer=53625396
SOURCE:CSDN_ASK
ASK_ID:7598781
ANSWER_ID:53624742
TITLE:java的jdbc怎么实现使用有where的select函数?
ANSWER:

你可以打印一下 sql + name 这个字符串看长什么样,


这是字符串拼接模式,tom作为一个字符串,在sql中要用单引号引起来,
所以你拼sql的时候,name前后都要拼一个单引号的字符串;


但是,一般建议用绑定变量的方式,因为这种拼字符串的方式容易被sql注入攻击


LINK:https://ask.csdn.net/questions/7598781?answer=53624742
SOURCE:CSDN_ASK
ASK_ID:7598117
ANSWER_ID:53624733
TITLE:sqlzoo懒得复制人名就直接打姓+%为什么显示找不到?
ANSWER:

模糊查找要使用 like ,比如 subject like 'prter%'


LINK:https://ask.csdn.net/questions/7598117?answer=53624733
SOURCE:CSDN_ASK
ASK_ID:7598197
ANSWER_ID:53624724
TITLE:mysql 父节点统计子节点下所有文档数量包括父节点下的文档数量
ANSWER:

由于A表层级不确定,所以肯定要用递归。


如果是8.0版本的mysql,可以使用with递归


CREATE TABLE A表
(
id INT, name VARCHAR(50), pid int
);

CREATE TABLE B表
(
id INT, name VARCHAR(50)
)
;
INSERT INTO A表 VALUES(1 ,‘语文’,0);
INSERT INTO A表 VALUES(2, ‘数学’,0);
INSERT INTO A表 VALUES(3, ‘英语’,0);
INSERT INTO A表 VALUES(4, ‘语文1’, 1);
INSERT INTO A表 VALUES(5, ‘数学1’, 2);
INSERT INTO A表 VALUES(6, ‘英语1’, 3);


INSERT INTO B表 values(1 , ‘aa’);
INSERT INTO B表 values(4 , ‘bb’);
INSERT INTO B表 values(4 , ‘cc’);
INSERT INTO B表 values(2 , ‘dd’);
INSERT INTO B表 values(3 , ‘ee’);
INSERT INTO B表 values(3 , ‘ee1’);
INSERT INTO B表 values(6 , ‘ee2’)

;
with recursive t as
(select a.,1 level,a.name root_name from A表 a where a.pid=0
union all
select a.
,level+1,t.name root_name from A表 a inner join t where a.pid=t.id)
select root_name,count(b.name) from t,B表 b
where t.id=b.id group by root_name;

效果如下


img


LINK:https://ask.csdn.net/questions/7598197?answer=53624724
SOURCE:CSDN_ASK
ASK_ID:7598136
ANSWER_ID:53624625
TITLE:hibernate ORA-01438: 值大于为此列指定的允许精度
ANSWER:

在plsql developer工具中,使用for update粘贴数据进去,如果存在格式异常的值,对应值的字体颜色会变成红色


LINK:https://ask.csdn.net/questions/7598136?answer=53624625
SOURCE:CSDN_ASK
ASK_ID:7597529
ANSWER_ID:53624002
TITLE:存储过程 报 pls-00224
ANSWER:

首先,存储过程中条件判断一般是用if
然后,根据你这些sql来看 ,"BAS_ID_GENERATOR_RULE.OBJECT_RRN"是一个表里面的某个字段名称,不是函数也不是一个值,因此无法用于判断
最后,我猜你是想判断如果远端数据和本地数据不一样,就把远端数据覆盖到本地,但你这个写法已经错得相当离谱了,


如果数据小,我建议你直接用merge into;
如果数据大,这个应该是要做一个增量同步逻辑的,即先识别出哪些记录有变化,再针对有变化的数据去进行处理,这个需要远端提供增量标识


LINK:https://ask.csdn.net/questions/7597529?answer=53624002
SOURCE:CSDN_ASK
ASK_ID:7597859
ANSWER_ID:53623994
TITLE:sql语句,同张表内,两个字段A,B,条件是查出b中多个数据符合a字段的值
ANSWER:
select *
from
where a in (select a
from
where b in (0, 1)
group by a
having count(distinct b) = 2)

LINK:https://ask.csdn.net/questions/7597859?answer=53623994
SOURCE:CSDN_ASK
ASK_ID:7597177
ANSWER_ID:53623411
TITLE:SQL 数据转换问题
ANSWER:

这个问题实际上包含了很多个内容,用倒推的思路来分析,


  1. 要得到最后的结果,一定是需要进行行列转换,如果是oracle中,则可以使用pivot来转换,其他数据库也可以找到类似的操作
  2. 然后前一步一定是得到一个这样的数据
    ID,月份,是否有医疗
    一般用count是否大于0即可判断是否有医疗,再根据需要转换成0或者1显示
  3. 但由于原始数据是一个时间范围,而且判断依据某个月份也是时间范围,两个时间范围只有有任意一天时间重合,就认为满足条件,这个才是这个问题中最复杂的部分,可以使用分类讨论一下,容易得出满足条件的场景为以下两种,A.判断依据的任意一个时间点(即月初或者月末)有落在原始数据的时间范围内;B.判断依据的月初小于原始数据的开始时间且判断依据的月末大于原始数据的结束时间
  4. 最后就是用于判断的这个月份日期值,由于不排除出现原始数据中有月份空缺的情况,所以需要提前准备一张月份记录表,确保月份是完整的

LINK:https://ask.csdn.net/questions/7597177?answer=53623411
SOURCE:CSDN_ASK
ASK_ID:7597028
ANSWER_ID:53623390
TITLE:求解这个为什么不出现输密码那一行吗。
ANSWER:

-U 参数,这个U是大写的


LINK:https://ask.csdn.net/questions/7597028?answer=53623390
SOURCE:CSDN_ASK
ASK_ID:7584062
ANSWER_ID:53622838
TITLE:一个sql优化。求更简单的方法
ANSWER:
select id from table01 group by id having sum(status)=count(status) and sum(status)>0;

LINK:https://ask.csdn.net/questions/7584062?answer=53622838
SOURCE:CSDN_ASK
ASK_ID:7588769
ANSWER_ID:53622833
TITLE:怎么去掉重复列啊,希望得到帮助
ANSWER:

你这对于同一个产品编号的订购数量和单价是有多个值的,你去重后肯定只能留一个值,或者把多个值拼成一个字符串,
所以重点并不是去重,而是后面两个字段留哪个的问题,常见的有直接max、min、avg、sum、count等聚合,但根据经验来看,你的订购数量应该是sum没错,但是单价应该就要先求总价求和再除以求和后的订购数量得平均价了,否则总金额会对不上


LINK:https://ask.csdn.net/questions/7588769?answer=53622833
SOURCE:CSDN_ASK
ASK_ID:7592371
ANSWER_ID:53622828
TITLE:请问下边的程序咋错了,一直找不到,这个咋改咋改,
ANSWER:

你哪里复制的代码,连哪行是要执行的都不知道么?那个query ok是别人执行后返回的结果,你执行它干嘛?


LINK:https://ask.csdn.net/questions/7592371?answer=53622828
SOURCE:CSDN_ASK
ASK_ID:7595002
ANSWER_ID:53622824
TITLE:sql语句执行问题,group by为什么能用select里用过函数生成的字段
ANSWER:

你这里使用的是别名,这个sql会自动重写为下面这个样子再执行


select job,date_format(date,‘%Y-%m’) as mon,sum(num) as cnt
from resume_info
where date>‘2025-01-01’ and date<‘2025-12-31’
group by job,date_format(date,‘%Y-%m’)
order by date_format(date,‘%Y-%m’) desc,cnt desc

LINK:https://ask.csdn.net/questions/7595002?answer=53622824
SOURCE:CSDN_ASK
ASK_ID:7596987
ANSWER_ID:53622801
TITLE:请问如图的sql应该咋写?
ANSWER:

是什么数据库?如果是oracle18c以上的话,你直接把这三个表关联起来,然后查 charge_num, max(money),max(date),listagg(project_num,','),listagg(users,',')
最后加一个 group by charge_num,


如果是18c以下,listagg要加 within group ,
如果是11g以下,还可以用wm_concat
如果是mysql,可以用group_concat
如果是postgresql,也可以用listagg


其实你这个问题就是一个将一行数据中的多个值聚合拼接成一个字符串的问题,主流数据库一般都有函数支持,你去找你对应数据库的函数就行了


LINK:https://ask.csdn.net/questions/7596987?answer=53622801
SOURCE:CSDN_ASK
ASK_ID:7589060
ANSWER_ID:53622572
TITLE:mysql插入的数据中有分号(😉 如何处理呢
ANSWER:

先说明,在插入语句中 ,插入的字符串都是要用单引号包起来的,单引号里有分号没有任何影响,但题主既然这么问了,肯定是在其他地方遇到了问题,误以为是这个原因,所以:
建议题主把sql贴出来看看


LINK:https://ask.csdn.net/questions/7589060?answer=53622572
SOURCE:CSDN_ASK
ASK_ID:7594184
ANSWER_ID:53622563
TITLE:Oracle 函数或者 SQL查询
ANSWER:
–创建测试数据
create table test_a (addr number,start_time date,end_time date);

insert into test_a (ADDR, START_TIME, END_TIME)
values (24, to_date(‘24-01-2021 05:40:00’, ‘dd-mm-yyyy hh24:mi:ss’), to_date(‘24-01-2021 17:00:00’, ‘dd-mm-yyyy hh24:mi:ss’));

insert into test_a (ADDR, START_TIME, END_TIME)
values (24, to_date(‘22-01-2021 06:00:00’, ‘dd-mm-yyyy hh24:mi:ss’), to_date(‘22-01-2021 18:20:00’, ‘dd-mm-yyyy hh24:mi:ss’));

insert into test_a (ADDR, START_TIME, END_TIME)
values (24, to_date(‘25-01-2021 07:20:00’, ‘dd-mm-yyyy hh24:mi:ss’), to_date(‘25-01-2021 20:00:00’, ‘dd-mm-yyyy hh24:mi:ss’));
commit;

–执行查询
with t as
(select 24 addr,
to_date(‘2021-01-22 12:00:00’, ‘yyyy-mm-dd hh24:mi:ss’) st,
to_date(‘2021-01-27 23:45:00’, ‘yyyy-mm-dd hh24:mi:ss’) et
from dual)
,m as (
select a.addr 地址,
min(case
when t.st >= a.start_time then
t.st
else
a.start_time
end) 开始时间,
max(case
when t.et <= a.end_time then
t.et
else
a.end_time
end) 结束时间
from test_a a, t
where a.addr = t.addr
group by a.addr)
select m.,(结束时间-开始时间)24*60 用时 from m;

输出结果


地址开始时间结束时间用时
242021/1/22 12:00:002021/1/25 20:00:004800

LINK:https://ask.csdn.net/questions/7594184?answer=53622563
SOURCE:CSDN_ASK
ASK_ID:7596104
ANSWER_ID:53622530
TITLE:oracle存储过程怎么调用另外一个存储过程
ANSWER:

包里的存储过程在外面调用时,存储过程名称前面要加包名,要不然找不到。另外,这个过程名称也要在包头里声明


create procedure A is 
begin
包名.B;

end;

LINK:https://ask.csdn.net/questions/7596104?answer=53622530
SOURCE:CSDN_ASK
ASK_ID:7596100
ANSWER_ID:53622528
TITLE:oracle未声明绑定变量
ANSWER:

少打了等于号,应该是这样的


new_emp(1).empno :=6800;

LINK:https://ask.csdn.net/questions/7596100?answer=53622528
SOURCE:CSDN_ASK
ASK_ID:7596118
ANSWER_ID:53622524
TITLE:Oracle未声明绑定变量
ANSWER:

你如果是想让 7900作为 emp_number的默认值的话,应该要加个等于,在Oracle中,赋值指令是":="


emp_number  NUMBER(4) :=7900;

LINK:https://ask.csdn.net/questions/7596118?answer=53622524
SOURCE:CSDN_ASK
ASK_ID:7571133
ANSWER_ID:53622516
TITLE:出现符号“”再需要下列之一时:if
ANSWER:

少了个end if,因为你是用的 "else if" 而不是 "elsif"


LINK:https://ask.csdn.net/questions/7571133?answer=53622516
SOURCE:CSDN_ASK
ASK_ID:7576618
ANSWER_ID:53622509
TITLE:Oracle根据月发生额算出每月累计发生额查询该如何写
ANSWER:

很经典的一个开窗函数例子,楼上已有解答


LINK:https://ask.csdn.net/questions/7576618?answer=53622509
SOURCE:CSDN_ASK
ASK_ID:7578981
ANSWER_ID:53622508
TITLE:toad for oracle多个spl窗口查询的结果可以输出成一个文件么
ANSWER:

这个用plsql developer是支持的,全部查询并全部展开后,鼠标右键其中一个查询结果,选择复制到excel-全部复制为excel即可将所有数据保存到一个excel文件内


LINK:https://ask.csdn.net/questions/7578981?answer=53622508
SOURCE:CSDN_ASK
ASK_ID:7583188
ANSWER_ID:53622505
TITLE:Oracle数据库grant不了为什么?
ANSWER:

这个报错就是提示没有SXR这个用户,你可以在这个窗口执行一下


SELECT * FROM ALL_USERS WHERE USER_NAME=‘SXR’ ;

看有没有数据


LINK:https://ask.csdn.net/questions/7583188?answer=53622505
SOURCE:CSDN_ASK
ASK_ID:7589226
ANSWER_ID:53622500
TITLE:关于Oracle的目录路径问题
ANSWER:

不存在out_path,请查询all_directory视图确认正确的目录名称


LINK:https://ask.csdn.net/questions/7589226?answer=53622500
SOURCE:CSDN_ASK
ASK_ID:7595236
ANSWER_ID:53622494
TITLE:Oracle 19C如何操作?
ANSWER:

你既然知道Navicat Premium,那么就用Navicat Premium操作就是了,这个软件支持连接oracle数据库的,而且也提供了导入excel的功能。
oracle数据库不能原生解析excel,要么用三方包,要么就转换成csv这样的文本格式,然后通过sqlldr进行导入


LINK:https://ask.csdn.net/questions/7595236?answer=53622494
SOURCE:CSDN_ASK
ASK_ID:7596659
ANSWER_ID:53622490
TITLE:SQL 能否通过某一列中的值作为表名,一次性关联查询
ANSWER:

写过程套个游标循环,用动态sql处理吧,动态sql你想怎么拼就怎么拼


如果数据库是oracle的话


declare
L_SQL VARCHAR2(4000);
begin
for REC in (SELECT *
FROM TABLE(ora_mining_varchar2_nt(‘TB_A’, ‘TB_B’, ‘TB_C’))) LOOP
L_SQL := L_SQL || ‘SELECT B.BID,T.VALUE_’ ||
SUBSTR(REC.COLUMN_VALUE, -1) || ’ FROM B ,‘ ||
REC.COLUMN_VALUE || ’ T WHERE B.BID=T.TB_‘ ||
SUBSTR(REC.COLUMN_VALUE, -1) || ‘ID’ || ’ UNION ALL’ ||
CHR(10);
END LOOP;
L_SQL := L_SQL || ‘SELECT NULL,NULL FROM DUAL WHERE 1=2’;
DBMS_OUTPUT.put_line(L_SQL);

END;
/

输出


SELECT B.BID,T.VALUE_A FROM B ,TB_A T WHERE B.BID=T.TB_AID UNION ALL
SELECT B.BID,T.VALUE_B FROM B ,TB_B T WHERE B.BID=T.TB_BID UNION ALL
SELECT B.BID,T.VALUE_C FROM B ,TB_C T WHERE B.BID=T.TB_CID UNION ALL
SELECT NULL,NULL FROM DUAL WHERE 1=2

另外,你这3个表的BID有没有可能有重复?如果没有重复,建议直接把这3个表union all起来再去关联B表,这样简单得多


LINK:https://ask.csdn.net/questions/7596659?answer=53622490
SOURCE:CSDN_ASK
ASK_ID:7576069
ANSWER_ID:53602255
TITLE:关于#docker#的问题:我用的windows,自己把docker转到windows container了,但是在运行dpabisurf还是会报linux的错误
ANSWER:

wimdows上的docker是基于的windows内置的linux子系统运行的


LINK:https://ask.csdn.net/questions/7576069?answer=53602255
SOURCE:CSDN_ASK
ASK_ID:901868
ANSWER_ID:53549095
TITLE:Oracle中如何对多个字段的值进行判断并计数
ANSWER:

给你个思路,
1.理论上,你这个每行本身应该有个id,假设没有,就先用rownum 替代id。
2.有6个字段表示日期,这6个字段应该可以做行列转换变成一列。
3.手术级别的6个字段,也同样做行列转换变成一列
4.然后用开窗函数,按id加日期分组,取每组数字最大对应的手术级别,得到3列数据
5.distinct 这3个字段,完成


LINK:https://ask.csdn.net/questions/901868?answer=53549095
SOURCE:CSDN_ASK
ASK_ID:1008661
ANSWER_ID:53548920
TITLE:oracle子查询中,怎么动态拼接子查询的表名??
ANSWER:

从题目描述来看,题主是有一个A表,A表中有很多id,然后每个id有一个对应的CU表。
首先第二步建表这个动作肯定是报错的,先假设你是手动拼接已经建好了,只是要看如何实现查询。
假设你这个数据是用于存储过程中,那么使用动态sql拼接sql的字符串再 execute immediate它就行了。
如果是想直接用于select查询出结果展示,那么有两个方案:
方案一:新建个函数,输入sql返回游标,使用select * from table(函数('sql'))的方式查询;
方案二:对于18c以上版本,可以使用多态表函数功能,和方案一相比 ,使用方式变成了 select * from 函数('sql')


LINK:https://ask.csdn.net/questions/1008661?answer=53548920
SOURCE:CSDN_ASK
ASK_ID:1091852
ANSWER_ID:53545130
TITLE:oracle 提取 sql中的表名
ANSWER:

在python中使用antlr4解析sql并获取所有表名的代码来了



LINK:https://ask.csdn.net/questions/1091852?answer=53545130
SOURCE:CSDN_ASK
ASK_ID:659976
ANSWER_ID:53543042
TITLE:oracle中按列表分区,插入一个新的列值就要增加分区?
ANSWER:

在创建分区的时候,用分区模板来创建,即可实现分区自增,不需要函数或者过程


LINK:https://ask.csdn.net/questions/659976?answer=53543042
SOURCE:CSDN_ASK
ASK_ID:796561
ANSWER_ID:53543041
TITLE:oracle 如何解决关联查询字段有保留字或关键字的问题
ANSWER:

这实际上不是冲突,你看下你的表结构,字段名建成小写了,你把你的字段名改成大写就不报错了


LINK:https://ask.csdn.net/questions/796561?answer=53543041
SOURCE:CSDN_ASK
ASK_ID:1091852
ANSWER_ID:53543040
TITLE:oracle 提取 sql中的表名
ANSWER:

可以看一下我的这篇文章


LINK:https://ask.csdn.net/questions/1091852?answer=53543040
SOURCE:CSDN_ASK
ASK_ID:718567
ANSWER_ID:53543039
TITLE:关于ORACLE视图创建ORA-01031问题
ANSWER:

grant 赋权的时候,后面加上 with grant option


LINK:https://ask.csdn.net/questions/718567?answer=53543039
SOURCE:CSDN_ASK
ASK_ID:382974
ANSWER_ID:53543038
TITLE:oracle如何支持存储emoji表情
ANSWER:

存Unicode编码即可


LINK:https://ask.csdn.net/questions/382974?answer=53543038
SOURCE:CSDN_ASK
ASK_ID:714491
ANSWER_ID:53543037
TITLE:oracle存储过程中如何写循环?
ANSWER:

查DBA分区视图,用你指定的日期条件,得到满足条件的分区名称作为游标,开始循环,拼接动态sql,再execte immediate它,循环结束。注意有锁时的异常处理


LINK:https://ask.csdn.net/questions/714491?answer=53543037
SOURCE:CSDN_ASK
ASK_ID:902102
ANSWER_ID:53543036
TITLE:关于oracle如何将一个表多个行转列
ANSWER:

用wm_concat或者listagg即可,选用适当的分隔符,把后面的内容都放到一列里


LINK:https://ask.csdn.net/questions/902102?answer=53543036
SOURCE:CSDN_ASK
ASK_ID:676565
ANSWER_ID:53543035
TITLE:oracle中 数据链路(DATABASE LINK),如何查出创建者与创建IP
ANSWER:

到数据库服务器上找数据库日志


LINK:https://ask.csdn.net/questions/676565?answer=53543035
SOURCE:CSDN_ASK
ASK_ID:674643
ANSWER_ID:53543033
TITLE:ORACLE Date类型怎么去掉星期
ANSWER:

你在你程序里,每次连上数据库后就跑下这段 alter session set nls_date_format='YYYY-MM-DD HH24:MI:SS'


oracle的日期在存储里其实是没有格式的,这个显示的格式是客户端会话自己进行的格式化


LINK:https://ask.csdn.net/questions/674643?answer=53543033
SOURCE:CSDN_ASK
ASK_ID:675562
ANSWER_ID:53543029
TITLE:本地Oracle数据库访问远程Oracle数据库
ANSWER:

在数据库里访问另一个数据库,最正常的就是用dblink了,也就是题主所说的不希望使用的链路。
其实,还真有办法不使用dblink,oracle是支持java source的,你可以在oracle里跑java,然后java再连接远程数据库操作


LINK:https://ask.csdn.net/questions/675562?answer=53543029
SOURCE:CSDN_ASK
ASK_ID:716647
ANSWER_ID:53543028
TITLE:oracle 如何实现一个table,每个用户select * from 表名;查询的结果不同,注意没有where 条件
ANSWER:

创建一个视图,视图中查询这张表并带上where 操作者=user or user='SYS',然后程序里都改用这个视图。
至于增删改操作,可以使用视图触发器来操作


LINK:https://ask.csdn.net/questions/716647?answer=53543028
SOURCE:CSDN_ASK
ASK_ID:1103881
ANSWER_ID:53543027
TITLE:oracle数据库加条件查询卡死
ANSWER:

问这种查询效率问题的,应该把会话的等待事件和sql的执行计划贴出来


LINK:https://ask.csdn.net/questions/1103881?answer=53543027
SOURCE:CSDN_ASK
ASK_ID:716064
ANSWER_ID:53543026
TITLE:Oracle数据库中如何查询日期大于2018年3月1日的所有数据
ANSWER:

其实吧,这个建议写个函数,遍历所有已知的格式,对传入的字符串进行to_date,报错就换下一种格式,转成功了就return你想要的格式


LINK:https://ask.csdn.net/questions/716064?answer=53543026
SOURCE:CSDN_ASK
ASK_ID:684983
ANSWER_ID:53543025
TITLE:请问oracle多列转多行
ANSWER:

用pivot函数直接转它不香么


LINK:https://ask.csdn.net/questions/684983?answer=53543025
SOURCE:CSDN_ASK
ASK_ID:815006
ANSWER_ID:53543023
TITLE:如何导出Oracle中数据库的同义词?
ANSWER:

SELECT * FROM DBA_SYNONYMS


LINK:https://ask.csdn.net/questions/815006?answer=53543023
SOURCE:CSDN_ASK
ASK_ID:749080
ANSWER_ID:53543022
TITLE:ORACLE触发器如何向客户端抛出自定义错误,同时写表记录该事件?
ANSWER:

单独写个自治事务的过程,过程里写插表和commit,触发器遇到错了就调这个过程。


LINK:https://ask.csdn.net/questions/749080?answer=53543022
SOURCE:CSDN_ASK
ASK_ID:771435
ANSWER_ID:53543021
TITLE:oracle中怎么截取字符串的某个值
ANSWER:

12c以上版本原生支持json查询及操作
如果是11g版本或以下,可以安装开源的pljson组件,来支持json的查询


LINK:https://ask.csdn.net/questions/771435?answer=53543021
SOURCE:CSDN_ASK
ASK_ID:1082030
ANSWER_ID:53543018
TITLE:Oracle 获取上个月最后三天的时间
ANSWER:

trunc(sysdate,'mm')-1,trunc(sysdate,'mm')-2,trunc(sysdate,'mm')-3就行了,to_char自己加。
真不知道那些远古写复杂教程的作者,现在回头看自己写的还有那么多人在死记硬背是什么心态。。。


LINK:https://ask.csdn.net/questions/1082030?answer=53543018
SOURCE:CSDN_ASK
ASK_ID:1097886
ANSWER_ID:53543016
TITLE:oracle查询出重复的名称,怎么通过拼接序号区分重复
ANSWER:

select name||row_number()over(partition by name order by 你排序的字段 ) from tab


LINK:https://ask.csdn.net/questions/1097886?answer=53543016
SOURCE:CSDN_ASK
ASK_ID:887433
ANSWER_ID:53543015
TITLE:oracle update 和order by 问题
ANSWER:

要更新哪些数据,已经被where限定了,要更新成什么值,set里也确定了,此时order by没有意义!


LINK:https://ask.csdn.net/questions/887433?answer=53543015
SOURCE:CSDN_ASK
ASK_ID:716152
ANSWER_ID:53543014
TITLE:关于Oracle依据时间条件查找的问题
ANSWER:

按照你的描述写的就是存储过程。
不过要学会转弯,你想想你这个描述是不是等价于 小于等于指定日期的数据中,日期最大的数据呢?何必写个循环一天天找 ,明明一次性就能找到


LINK:https://ask.csdn.net/questions/716152?answer=53543014
SOURCE:CSDN_ASK
ASK_ID:1105015
ANSWER_ID:53543013
TITLE:oracle 能否使用语句修改存储过程
ANSWER:

如果你是想要在存储过程中修改另一个存储过程,使用动态sql来执行ddl创建或修改命令即可。
如果你是想通过select语句来修改存储过程 ,的确也是可行的,不过先要创建一个自定义的自治事务函数,在函数里执行动态sql,然后select这个函数即可


LINK:https://ask.csdn.net/questions/1105015?answer=53543013
SOURCE:CSDN_ASK
ASK_ID:1103077
ANSWER_ID:53543012
TITLE:Oracle 19C system账号不能登录
ANSWER:

你启动的sqlplus路径可能不对,读到了另一个tnsnames文件,建议找到你能登录的net Manager 所安装的文件夹中里的sqlplus启动


LINK:https://ask.csdn.net/questions/1103077?answer=53543012

从此处向上开始半自动同步



27.https://bbs.csdn.net/topics/600475113

Q:

id i1 i2 i3 i4 i5 i6 i7 i8 i9 i10 i11 i12 i13 flag
25644 0.23 0.25 0.24 0.26 0.24 0.25 0.26 0.24
25655 0.23 0.25 0.24 0.26 0.24 0.25 0.26 0.24 0.25 0.26 0.27 0.24

如表格所示,如何判断一行内的数据连续4个点为空,将连续4个点为空的行,添加标记。

怎么进行判断,谢谢!

A:

假定你的id是唯一键,要判断的字段名称都是i加连续数字,另外也不确定是否存在为0的值,
方案一:
那么最不用思考的做法就是你的提问本身,即一行一行找,然后每四个连续字段判断是否为空,这里就涉及到两个循环了

DECLARE
  I     NUMBER;
  L_SQL VARCHAR2(4000);
begin
  for rec in (select id from test_t) loop
    FOR I IN 1 .. 10 LOOP
      L_SQL := 'update test_t set flag=1 where id=' || to_char(rec.id) ||
               ' and coalesce(' || 'i' || to_char(i) || ',' || 'i' ||
               to_char(i + 1) || ',' || 'i' || to_char(i + 2) || ',' || 'i' ||
               to_char(i + 3) || ') is null';
      execute immediate l_sql;
    end loop;
  end loop;
end;
/

其实代码还能优化,比如某一行已经更新过了就直接跳到下一行,减少无效执行;
如果你要判断的字段名称无规律,那么就结合dba_tab_cols视图来生成动态sql

方案二:
你可以把这些字段名通过unpivot函数转到一列里去,让这些数值都变成一列,然后使用开窗函数count最近四行的值,对这个值进行判断即可(空值不会被count),这样就不用写过程,一个sql就能完成你的要求,你有兴趣可以自己尝试写下

方案三:
另外还有个比较脑洞而且超级简单的做法,大家都知道,空没有长度,几个空拼在一起还是一个空 ,如果使用NVL把空值变成你这个表中不存在的一个值,比如字母"A",然后把这些字段全部用管道符拼成一个字符串,那么就只需要判断这个字符串中是否存在 “AAAA”了,存在的那行就是要标记的那行

update test_t
   set flag = 1
 where INSTR(nvl(to_char(i1), 'A') || nvl(to_char(i2), 'A') ||
             nvl(to_char(i3), 'A') || nvl(to_char(i4), 'A') ||
             nvl(to_char(i5), 'A') || nvl(to_char(i6), 'A') ||
             nvl(to_char(i7), 'A') || nvl(to_char(i8), 'A') ||
             nvl(to_char(i9), 'A') || nvl(to_char(i10), 'A') ||
             nvl(to_char(i11), 'A') || nvl(to_char(i12), 'A') ||
             nvl(to_char(i13), 'A'),
             'AAAA') > 0;

26.https://www.modb.pro/issue/10876

Q:

想把以下的语句,mysql移植到Oracle, 其中的limit offset怎么改呢?

SELECT (SELECT DISTINCT Salary
        FROM Employee
        ORDER BY Salary DESC
        LIMIT 1 OFFSET 1) AS SecondHighestSalary

A:

在oracle12c以后,支持如下写法

select * from emp  fetch first 10 row only;

select * from emp order by sal first fetch 5 row only;

select * from emp order by sal offset 3 rows fetch next 5 rows only;

select * from emp fetch next 0.1 percent rows only;

25.https://www.modb.pro/issue/10647

Q:

image.png

A:

以前我遇到过类似的问题,那个项目中我使用了wm_concat这个函数,sql比较复杂,直接查询没问题,放到存储过程中就报ora-22922,后来换成用listagg就好了,但我不确定题主是不是遇上了同样的问题

24.https://ask.csdn.net/questions/716152

Q:

关于Oracle依据时间条件查找的问题
oracle
我要从Oracle数据库中查询一条数据,SQL语句如下:

    select  
        tb.data1  
    from table tb 
    where to_char(tb.date,'yyyy-MM-dd') = '2018-12-06'

要实现的功能是:

如果2018-12-06这天查出的数据为空,则时间向前推一天继续查找,也就是继续查2018-12-05的数据;
如果还没有查找到,继续向前推一天,知道查到的数据不为空为止。
这个功能该怎么实现???
(不限存储过程、存储函数)

在线等。。。

A:

按照你的描述写的就是存储过程。
不过要学会转弯,你想想你这个描述是不是等价于 小于等于指定日期的数据中,日期最大的数据呢?何必写个循环一天天找 ,明明一次性就能找到

23.https://ask.csdn.net/questions/1097886

Q:

oracle查询出重复的名称,怎么通过拼接序号区分重复
oracle
oracle查询出两个重复书名:book,怎么让这个书名查出来是book1、book2,有多个重复的话序号自增

表结构: name

   book
   pen
   book
   paper
   book

预期的结果 : name

        book1
        pen
        book2
        paper
        book3

A:

select name||row_number()over(partition by name order by 你排序的字段 ) from tab

22.https://ask.csdn.net/questions/1082030

Q:

Oracle 如何获取当前时间的上个月最后三天的日期以yyyy-MM-dd的格式

A:

trunc(sysdate,‘mm’)-1,trunc(sysdate,‘mm’)-2,trunc(sysdate,‘mm’)-3就行了,to_char自己加。

21.https://ask.csdn.net/questions/771435

Q:

oracle中怎么截取字符串的某个值
image.png
oracle中怎么截取红框中的那部分值

A:

12c以上版本原生支持json查询及操作
如果是11g版本或以下,可以安装开源的pljson组件,来支持json的查询

20.https://ask.csdn.net/questions/749080

Q:

ORACLE触发器如何向客户端抛出自定义错误,同时写表记录该事件?
ORACLE建立一个触发器,记录pat_visit 表的某字段被修改的情况,写入tmp_msg表。
记录部分是正常工作的,直到后来为了向客户端抛出错误提示“非法操作,护士……”增加了后面的raise_application_error那一大段。
如果抛出自定义异常的话,前面的记录操作也一同失效,即使是加了commit也不管用。
如何能够即抛出自定义异常同时又能修改(其他表)记录呢?

create or replace trigger TMP_REC_WHO_CHANGE_ADDEPT
  before update of dept_admission_to on pat_visit  
  for each row
--监视pat_visit入院科室改动
declare
  mymsg varchar(2000);
begin
  select ... into mymsg from v$session where audsid=sys_context('USERENV','SESSIONID');
 
  if :old.dept_admission_to <> :new.dept_admission_to then
    insert into tmp_msg(rec_creator,rec_msg) 
      values ('REC_WHO_CHANGE_ADDEPT',mymsg);
    commit; --如果下方向客户端抛出异常,提交也不起作用
 
    if upper(mymsg) like '%NURSE.EXE%' then
      if sysdate - nvl(:old.admission_date_time,sysdate) > 0.25 then
        raise_application_error('-20002', '非法操作,护士站尝试修改入院日期');
      end if;
    end if;
  end if;
end tmp_rec_who_change_ADDEPT;

A:
单独写个自治事务的过程,过程里写插表和commit,触发器遇到错了就调这个过程。

19.https://ask.csdn.net/questions/716064

Q:

Oracle数据库中如何查询日期大于2018年3月1日的所有数据
现Oracle数据库中有一个表T,表中的字段有T_name,T_sex,T_date
其中T_date的数据类型为varchar2,录入的时间格式多样:
2018-08-01 00:00:00
2018-8-1 9:00:00
2018-8-01 9:00:00
2018-08-1 9:00:00
2018/8/1
2018/08/01 00:00:00
2018/8/1 9:00:00
2018/8/1
2018-10-24 星期日 下午 9:00:00
2018-10-24 星期日 下午 23:00:00
且较多的为:2018-08-01 00:00:00
2018-8-1 9:00:00
2018-8-01 9:00:00
2018-08-1 9:00:00
2018/8/1
2018/08/01 00:00:00
2018/8/1 9:00:00
2018/8/1 ,几万条里会有那么3-4个,2018-10-24 星期日 下午 9:00:00
2018-10-24 星期日 下午 23:00:00.
问:如何查询出字段T_date 中日期大于2018年3月1日的所有数据,最低限度是要查出除了含有2018-10-24 星期日 下午 9:00:00
2018-10-24 星期日 下午 23:00:00这两种格式的所有数据

A:

其实吧,这个建议写个函数,遍历所有已知的格式,对传入的字符串进行to_date,报错就换下一种格式,转成功了就return你想要的格式

18.https://ask.csdn.net/questions/716647

Q:

oracle 如何实现一个table,每个用户select * from 表名;查询的结果不同,注意没有where 条件
oracle 如何实现一个table,每个用户进行查询看到的结果不同;只有管理员可以看到所有的内容
比如说:system用户(或sys)创建了一个表 test;
hr,scott,oe 等非dba权限的用户分别进行多次insert操作
scott用户执行 select * from 该表test;(注意没有where条件)只能看见自己dml后的结果,不能看到hr用户执行DML后的数据,只能update ,delete 自己的数据,
hr用户执行 select * from 该表test;(注意也没有where条件)也只能看见自己dml后的结果,不能看见scott用户的操作,只能update ,delete 自己的数据,
sys或system用户 select * from test; 能看见所有用户DML后的操作,
除sys或system用户外,所有的用户都不能drop table test ;只有sys或system才能drop table test
请问 如何实现上述问题,该用 oracle的什么技术实现??

A:

创建一个视图,视图中查询这张表并带上where 操作者=user or user=‘SYS’,然后程序里都改用这个视图。
至于增删改操作,可以使用视图触发器来操作

17.https://ask.csdn.net/questions/902102

Q:

关于oracle如何将一个表多个行转列
遇到一个复杂点的关系,需要建立一个视图去关联主表,但是公司平台方法只支持同一ID的数据一条对一条,所以需要多行去转列,需要建立视图的表大概是这个样子

table:tmp1

ID NAME AGE
1 张三 25
2 李四 27
2 王五 30
3 赵六 29
3 孙七 20
3 周八 28
大致为有1-4条不定的同ID数据(就是ID有一条为1的,也有俩条为2的,三条为三的这个样子),然后需要把同ID的数据合并成一行,大致期望结果为

table:tmp2

ID NAME1 AGE1 NAME2 AGE2 NAME3 AGE3
1 张三 25 null null null null
2 李四 27 王五 30 null null
3 赵六 29 孙七 20 周八 28

期望得到的表其实也不必要非要一致,只要能把同ID的数据后面的信息全部显示出来就可以,来个大神帮忙啊!!

备注:ID实际为uid

A:

用wm_concat或者listagg即可,选用适当的分隔符,把后面的内容都放到一列里

16.https://ask.csdn.net/questions/714491

Q:

oracle存储过程中如何写循环?
我现在需要一个存储过程,这个存过里只存放删除 XXXX_TABLE表 的分区语句,只保留每个月最后一天的分区,我该怎么写啊

A:

查DBA分区视图,用你指定的日期条件,得到满足条件的分区名称作为游标,开始循环,拼接动态sql,再execte immediate它,循环结束。注意有锁时的异常处理

15.https://ask.csdn.net/questions/796561

Q:

oracle 如何解决关联查询字段有保留字或关键字的问题
如一个表叫TEST_TABLE 其中有个字段名是 main_id

main_id貌似和保留字MAIN冲突

SELECT main_id FROM TEST_TABLE

会报错 ORA-00904: “MAIN_ID”: invalid identifier

这样加了双引查询没问题

SELECT  "main_id" FROM TEST_TABLE

但是如果关联查询时候应该怎么写

SELECT 
A."main_id"
FROM TEST_TABLE  A
LEFT JOIN
OTHER_TABLE B
ON A."main_id"=B.other_id

这样报错

SELECT 
"A.main_id"
FROM TEST_TABLE  A
LEFT JOIN
OTHER_TABLE B
ON "A.main_id"=B.other_id

这样也报错

SELECT 
A.'main_id'
FROM TEST_TABLE  A
LEFT JOIN
OTHER_TABLE B
ON A.'main_id'=B.other_id

单引也不行

A:

这实际上不是冲突,你看下你的表结构,字段名建成小写了,你把你的字段名改成大写就不报错了

14.https://ask.csdn.net/questions/1008661

Q:

oracle子查询中,怎么动态拼接子查询的表名??
有一张表A,一张表B表,B表的表名为A表的id+‘CU’,
怎么在子查询的时候拼接表名去做查询。

create table A(
    id varchar2 not null,
    name varchar2 not null,
    PRIMARY KEY ("ID")
);
 
create table  A.ID||'CU'(
    id varchar2 not null,
    num varchar2 not null,
    primary key("id")
);

– 想实现下方这样的动态查询(会报错)

select A.name ,
    (select sum(num) from A.ID||'CU'  )
from A ;

也有使用函数的方式来拼接表名,也行不同,请问各位大佬有什么方法可以解决。

A:

从题目描述来看,题主是有一个A表,A表中有很多id,然后每个id有一个对应的CU表。
首先第二步建表这个动作肯定是报错的,先假设你是手动拼接已经建好了,只是要看如何实现查询。
假设你这个数据是用于存储过程中,那么使用动态sql拼接sql的字符串再 execute immediate它就行了。
如果是想直接用于select查询出结果展示,那么有两个方案:
方案一:新建个函数,输入sql返回游标,使用select * from table(函数(‘sql’))的方式查询;
方案二:对于18c以上版本,可以使用多态表函数功能

13.https://www.modb.pro/issue/8092

Q:

ORACLE子表链接主表,主表的数据只显示在第一行怎么做到
像这种,子表链接主表,主表的数据只显示在第一行。
image.png

A:

一般来说,主表和子表关联,主表的数据会显示和子表一样的行数,而且会重复,我猜你的意思是,对于主表中的每一行记录,在结果中都只保留一条。

先说问题,从你这个格式中来看,如果有人对这个数据进行了排序,那么你就会丢失子表和主表的关系,如果非得用这个格式,建议至少要新增一个行号。

然后解决方案,你想要的是保留一条,换个角度其实就是,不是第一条的全部置为空。

首先用最基本的关联,然后用count() over(partiotion by 单据编号 order by 产品名称) 构造一列,在不改变行数的情况下,得到每张单据的子表行数,

再用decode或者case when 判断这个值,如果是1,那么就显示单据主表的值,如果不是,就显示空。

注意最后一定要按单据编号加产品名称排序

12.https://www.modb.pro/issue/10804

Q:

达梦数据库之间如何进行数据迁移,在2个库都有表结构和数据的情况下?

A:

和oracle的语法几乎一样,导入的时候带上 IGNORE=Y ,即可忽略表对象已存在的情况,直接插入数据

./dimp USERID=SYSDBA/SYSDBA@192.168.0.248:8888 FILE=db_str.dmp DIRECTORY=/mnt/data/dexp LOG=db_str.log FULL=Y IGNORE=Y

参考 https://www.dameng.com/list_110.html 达梦技术手册-DM8_dexp和dimp使用手册.pdf

11.https://www.modb.pro/issue/10584

Q:

navicat操作oracle怎么创建用户设置表的可见以及可不见权限?

A:

ORACLE中的授权,基本都是通过grant命令来执行的

新建一个用户,当仅仅指定了该用户的用户名及密码,该用户几乎无法执行任何操作

需要授权连接、创建会话,指定表空间及可用大小,此时该用户拥有在该用户下创建表和查询表的权限,没有查询其他用户的表的权限

如果需要让这个用户查询到其他用户的表,那么则需要登录到其他用户,执行

grant select on 表名 to 查询用户

10.https://www.modb.pro/issue/10464

Q:

sql查询怎么计算当列空值与非控制比例?

A:

select decode(count(id),0,null, (count(1)-count(id))/count(id)) from t

9.https://www.modb.pro/issue/10478

Q:

MySQL中 varchar 类型的,用max 函数,有没有什么影响?

A:

没有什么影响,如果内容是纯数字,那么建议+0 或者cast成数字再max,如果包含有非数字,就是按从左往右字母依次排序的结果

8.https://www.modb.pro/issue/10525

Q:

Oracle数据库中表关联查询,其中一个字段为空,怎么能显示出来?

A:

假设T1表数据是全的,T2不全

SELECT * FROM T1 ,T2 WHERE T1.A=T2.A(+)

假设两个表都有不全

select * from t1 full join t2 on t1.a=t2.a

假设有三个表可能都不全

select * from t1 full join t2 on t2.a=t1.a full join t3 on t3.a=nvl(t2.a,t1.a)

7.https://www.modb.pro/issue/10583

Q:

oracle一般什么情况下需要使用视图?

A:

以下内容为个人工作经验,非教科书标准答案

1.数据查询权限控制:

比如不想让指定用户看到某些行或者某些列,就可以创建一个这样的视图,然后将这个视图授权给该用户查询,此时用户无原表权限,但是能看这个视图里的数据

2.精简sql或者模块化sql:

有时候sql会写得比较长,影响可读性,可以把一个具有特定意义的子查询变成一个视图,此时其他场景下也只需要引用这个视图而不需要写一大串sql了,常见于报表sql

3.UI应用程序需要:

有些展现程序只能指定表名和字段名来展现数据,此时就必须建立一个视图了

6.https://www.modb.pro/issue/10585

Q:

mysql有没有类似strip()这种类型的函数?
trim只能是空格

A:

trim的语法 TRIM([{BOTH | LEADING | TRAILING} [remstr] FROM] str)

BOTH 首尾

LEADING 首

TRAILING 尾

remstr 要去掉的字符

str 要处理的字符串

SELECT TRIM(BOTH ',' FROM ',,aaaa,,,');

aaaa

5.https://www.modb.pro/issue/10408

Q:

先执行sql语句 A(如果id=1存在,就更新X字段为1,如果不存在就插入),然后不等结果返回(异步执行),立即执行语句B(如果id=1存在,就更新X字段为2,如果不存在,就插入)。 那最后的结果,有没有可能 X 字段是 1 呢?

A:

如果id是唯一键,那么在修改或者插入这行的时候,不管有没有执行完,都会把这行锁起来,另一个会话想插入或者修改都是等待的,直到第一个会话commit。这个时候引入到第二个问题,where 条件 是否会检索未commit的数据?答案是不会。也就是说,只要会话A没提交,那么会话B的where就找不到这笔数据,按照题目来说,此时执行insert,是会被会话A锁的,等会话Acommit,会话B马上报错,提示违反唯一约束。

4.https://www.modb.pro/issue/10548

Q:

oracle表没有date类型的字段可以用在线重定义做range分区吗

数据库有一张表80个G了没做分区,本来打算用重定义转成分区表,看了下字段类型,所有字段类型都是varchar2的,比如createtime、updatetime这些字段的类型都是varchar2的,请问可以用在线重定义转吗

A:

--原表
CREATE TABLE table_o (ID NUMBER PRIMARY KEY, TIME varchar2(20)) 
 ;
--插入测试数据
insert into table_o values(123,'2021-01-03 12:00:00');
 commit;
--新表,用varchar2字段做range分区 
CREATE TABLE table_n (ID NUMBER PRIMARY KEY, TIME varchar2(20)) 
PARTITION BY RANGE (TIME)
 (PARTITION P1 VALUES LESS THAN ('2021-01-01 00:00:00'),
 PARTITION P2 VALUES LESS THAN ('2021-02-01 00:00:00'),
 PARTITION P3 VALUES LESS THAN ('2021-03-01 00:00:00'),
 PARTITION P4 VALUES LESS THAN (MAXVALUE));
 
--校验是否可以重定义
begin
   DBMS_REDEFINITION.CAN_REDEF_TABLE(USER, 'table_o', DBMS_REDEFINITION.CONS_USE_PK);
end;
/

--开始重定义  
begin
    DBMS_REDEFINITION.START_REDEF_TABLE(USER,
                                        'table_o',
                                        'table_n');
end;
/

--模拟增量数据产生
insert into table_o values(456,'2021-02-03 12:00:00');
commit;

--同步增量数据
begin
dbms_redefinition.sync_interim_table(USER, 'table_o', 'table_n');
end;
/

--完成重定义
begin
  DBMS_REDEFINITION.FINISH_REDEF_TABLE(USER, 'table_o', 'table_n');
end;
/

3.https://www.modb.pro/issue/10181

Q:

oracle 怎么模拟增加lob大字段数据
oracle 怎么模拟增加lob大字段数据,我想模拟插入数据增大lob的segment大小,一直不成功

我创建了表:

create table itpux03
( id int,
clog clob
)
lob (clog) store as securefile
(tablespace users)

查入数据

begin
for i in 1..500000 loop
INSERT INTO itpux03 VALUES(i, 'asdasdasdasdasdasdasdasdasdad');
commit;
end loop;
end;
/

检查:

SEGMENT_NAME M
------------------------- ----------
ITPUX01 5245
ITPUX03 987
ITPUX02 96
SYS_LOB0000105311C00002$$ .13
SYS_LOB0000105129C00003$$ .13
SYS_LOB0000105314C00002$$ .13
BIDX .06
SYS_IL0000105311C00002$$ .06
SYS_IL0000105129C00003$$ .06
SYS_IL0000105314C00002$$ .06

表的大小一直增加 但是lob字段的大小一直0.13m,想请教大神们,如何增大lob字段的数据。我也尝试过用

DBMS_LOB.Write也是没有效果。。。如果能附带案列 就十分感谢了

A:

你那个创建新行,实际上是增加新的lob,如果要在原lob上增加,应该使用append,如下,已实测通过

create table itpux03
( id int,
clog clob
);
INSERT INTO itpux03 VALUES(1,1);

DECLARE
  l_line varchar2(4000);
  l_clob clob;
BEGIN
  l_line := 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF';
  SELECT clog
    INTO l_clob
    FROM itpux03
   WHERE id  = 1 for update;
  dbms_lob.open(l_clob, dbms_lob.lob_readwrite);
  for i in 1..5000 loop
  dbms_lob.writeappend(l_clob, lengthb(l_line), l_line);
  end loop;
  dbms_lob.close(l_clob);
  commit;
END;
/

插入第一行时,lob大小为 131072,执行过程块后,lob大小变为 2228224

2.来源:https://ask.csdn.net/questions/901868

Q:

数据库中根据业务表创建了视图,存储有SSRQ1-6、SSJB1-6共12个字段,同时新增了四个字段S1-S4用来存储SSJB1-6中对应数值的计数
图片说明

业务场景为:
每一条数据表示一个个案,需要统计每个个案中各级别手术的个数
image.png
业务需求是:
当SSRQ1-6中任意两个字段有相同值时,取SSJB1-6中数值最大的,在对应的级别下计数+1;
当SSRQ1-6中存在不同值时,每个对应的SJJB都需要取,在对应的级别下计数+1

例如:
image.png
图片说明

28日有二级/三级手术,取三级手术,S3下计数+1;

29日有一级/二级手术,取二级手术,S2下计数+1;

14日有四级手术,S4下计数+1;

汇总后该条个案对应的S1-S4分别为0/1/1/1

求问大神这样用sql语句怎么实现
case when 和decode都试过了

A:

给你个思路,
1.理论上,你这个每行本身应该有个id,假设没有,就先用rownum 替代id。
2.有6个字段表示日期,这6个字段应该可以做行列转换变成一列。
3.手术级别的6个字段,也同样做行列转换变成一列
4.然后用开窗函数,按id加日期分组,取每组数字最大对应的手术级别,得到3列数据
5.distinct 这3个字段,完成

with t as
 (select id, 日期, 级别
    from temp_test1 unpivot((日期, 级别) for dd in((SSRQ1, SSJB1),
                                               (SSRQ2, SSJB2),
                                               (SSRQ3, SSJB3),
                                               (SSRQ4, SSJB4),
                                               (SSRQ5, SSJB5),
                                               (SSRQ6, SSJB6)))),
t2 as
 (select distinct t.id,
                  t.日期,
                  first_value(级别) over(partition by ID, 日期 order by 级别 desc) 级别
    from t)
 

1.来源:https://www.modb.pro/issue/10292

Q:

一个麻烦的UNPIVOT实现
表结构如下:

ENTITY_CODE A公司 B公司
AMOUNT_A_1YUE 100
AMOUNT_B_1YUE 200
AMOUNT_C_1YUE 300
AMOUNT_A_2YUE 150
AMOUNT_B_2YUE 250
AMOUNT_C_2YUE 350

如何转换为

ENTITY_CODE PERIOD(期间) AMOUNT_A AMOUNT_B AMOUNT_C
A公司 1月 100 200 300
B公司 2月 150 250 350

A:

create table test_pivot (ENTITY_CODE varchar2(20),A公司 varchar2(20),  B公司 varchar2(20));

with t1 as
 (select regexp_substr(ENTITY_CODE, '[^_]+', 1, 2) ENTITY_CODE,
         REPLACE(regexp_substr(ENTITY_CODE, '[^_]+', 1, 3), 'YUE', '月') PERIOD,
         A公司,
         B公司
    from test_pivot),
t2 as
 (select * from t1 unpivot(amount FOR 公司 in(A公司, B公司)))
select *
  from t2
pivot (sum(amount) for ENTITY_CODE in('A' AMOUNT_A,
                                 'B' AMOUNT_B,
                                 'C' AMOUNT_C))

;
博主关闭了所有页面的评论