侧边栏壁纸
  • 累计撰写 129 篇文章
  • 累计创建 13 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

经典问答(QA)-20220630

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

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


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:

点继续,这个页面没有任何报错信息,正常选择高级启动,也可以看到这个界面