-
mysql cross join 實(shí)現(xiàn)行轉(zhuǎn)列
查看全部 -
DELETE a?
FROM
user1_test a
JOIN (
SELECT
user_name,
COUNT( * ),
MAX( id ) AS id?
FROM
user1_test?
GROUP BY
user_name?
HAVING
COUNT( * ) > 1?
) b ON a.user_name = b.user_name?
WHERE
a.id < b.id;
查看全部 -
select user_name ,count(*) from? user1_test group_by user_name having count(*)>1
查看全部 -
alter table user1 add column mobile varchar(100)
查看全部 -
select sum(case when user_name='孫悟空' then kills end) as ‘孫悟空’,sum(case when user_name=‘豬八戒’ then kills end) as ‘豬八戒’,sum(case when user_name=‘沙僧’) as '沙僧' from user1 a join user_kills b on a。id=b.user_id
查看全部 -
select a.'user_name',sum(kills) from user1 a join user_kills b on a.id=b.userId groub by a.user_name
查看全部 -
select a.'user_name',kills from user1 a join user_kills b on a.id=b.userId
查看全部 -
show tables 展示表
查看全部 -
行轉(zhuǎn)列的場景
查看全部 -
需要使用唯一序列號的場景:
1. 作為數(shù)據(jù)庫主鍵。
2. 業(yè)務(wù)序列號。
生成序列號的方法:
- MySQL:AUTO_INCREMENT
- SQLServer:IDENTITY/SEQUENCE
- Oracle:SEQUENCE
- PgSQL:SEQUENCE
如何選擇生成序列號的方式:
【原則】:優(yōu)先選擇系統(tǒng)提供的序列號生成方式。
【優(yōu)點(diǎn)】:
1. 控制并發(fā);
2. 不重復(fù),保證序列號的唯一性。
【缺點(diǎn)】:序列號不連續(xù)(數(shù)據(jù)空洞),例如 1、2、4。
【原因】:對已有的數(shù)據(jù)的刪除,以及事務(wù)回滾等方式不會影響自增長的序號,例如已有數(shù)據(jù) 1、2、3,刪除 3 號數(shù)據(jù)。之后再插入一條數(shù)據(jù),此時(shí)數(shù)據(jù)表的數(shù)據(jù)為 1、2、4。
查看全部 -
需要使用唯一序列號的場景:
1. 作為數(shù)據(jù)庫主鍵。
2. 業(yè)務(wù)序列號:如發(fā)票號、車票號、訂單號等。
生成序列號的方法:
- MySQL:AUTO_INCREMENT
- SQLServer:IDENTITY/SEQUENCE
- Oracle:SEQUENCE
- PgSQL:SEQUENCE
如何選擇生成序列號的方式:
【原則】:優(yōu)先選擇系統(tǒng)提供的序列號生成方式。
【優(yōu)點(diǎn)】:
1. 控制并發(fā);
2. 不重復(fù),保證序列號的唯一性。
【缺點(diǎn)】:
1. 序列號不連續(xù)(數(shù)據(jù)空洞),例如 1、2、4。
【原因】:對已有的數(shù)據(jù)的刪除,以及事務(wù)回滾等方式不會影響自增長的序號,例如已有數(shù)據(jù) 1、2、3,刪除 3 號數(shù)據(jù)。之后再插入一條數(shù)據(jù),此時(shí)數(shù)據(jù)表的數(shù)據(jù)為 1、2、4。
查看全部 -
需要使用唯一序列號的場景:
1. 作為數(shù)據(jù)庫主鍵。
2. 業(yè)務(wù)序列號:如發(fā)票號、車票號、訂單號等。
生成序列號的方法:
- MySQL:AUTO_INCREMENT
- SQLServer:IDENTITY/SEQUENCE
- Oracle:SEQUENCE
- PgSQL:SEQUENCE
如何選擇生成序列號的方式:
【原則】:優(yōu)先選擇系統(tǒng)提供的序列號生成方式。
【優(yōu)點(diǎn)】:
1. 控制并發(fā);
2. 不重復(fù),保證序列號的唯一性。
【缺點(diǎn)】:
1. 序列號不連續(xù)(數(shù)據(jù)空洞),例如 1、2、4。
【原因】:對已有的數(shù)據(jù)的刪除,以及事務(wù)回滾等方式不會影響自增長的序號,例如已有數(shù)據(jù) 1、2、3,刪除 3 號數(shù)據(jù)。之后再插入一條數(shù)據(jù),此時(shí)數(shù)據(jù)表的數(shù)據(jù)為 1、2、4。
查看全部 -
再看一遍查看全部
-
1.分別查出數(shù)列的結(jié)果然后用cross jion 連接 2.用case when查看全部
-
CREATE TABLE order_seq(
timestr INT UNSIGNED,
order_sn INT UNSIGNED,
);
DELIMITER //
CREATE PROCEDURE seq_no()?
BEGIN
DECLARE v_cnt INT;
DECLARE v_timestr INT;
DECLARE rowcount BIGINT;
SET v_timestr = DATE_FORMAT(NOW(),'%Y%m%d');
SELECT ROUND(RAND()*100,0)+1 INTO v_cnt;
START TRANSACTION;
UPDATE order_seq SET order_sn = order_sn + v_cnt WHERE timestr = v_timestr;
IF ROW_COUNT() = 0 THEN
INSERT INTO order_seq(timestr,order_sn) VALUES(v_timestr,v_cnt);
END IF;
SELECT CONCAT(v_timestr,LPAD(order_sn,7,0))AS order_sn
FROM order_seq WHERE timestr = v_timestr;
COMMIT;
END//
DELIMITER ;
CALL seq_no();·
查看全部 -
@MySQL---刪除復(fù)雜的重復(fù)數(shù)據(jù)
#準(zhǔn)備好要用的表 create?table?user1_practice( id?int?not?null?auto_increment?primary?key, user_name?varchar(3), over?varchar(5), mobile?varchar(100)); insert?into?user1_practice(user_name,over,mobile)? values?('唐僧','旃檀功德佛','12112345678,14112345678,12112345678'); insert?into?user1_practice(user_name,over,mobile)? values?('豬八戒','凈壇使者','12144643321,14144643321'); insert?into?user1_practice(user_name,over,mobile)? values?('孫悟空','斗戰(zhàn)勝佛','12166666666,14166666666,18166666666,18166666666'); insert?into?user1_practice(user_name,over,mobile)? values?('沙僧','金身羅漢','12198343214,14198343214'); #建一個(gè)序列表 create?tb_sequence(id?int?not?null?auto_increment?primary?key); insert?into?tb_sequence?values(),(),(),(),(),(),(),(),(); #列轉(zhuǎn)行后的表user1_trans1 create?table?user1_trans1?as? select?a.id,user_name,over,replace(substring( substring_index(mobile,',',a.id), char_length(substring_index(mobile,',',a.id-1))+1),',','')?as?mobile? from?tb_sequence?a? cross?join(select?user_name,over,concat(mobile,',')?as?mobile, length(mobile)-length(replace(mobile,',',''))+1?as?size? from?user1_practice?b)?b?on?a.id?<=?b.size; #刪除user1_trans1表中的重復(fù)記錄 delete?a?from?user1_trans1?a? join?(select?user_name,over,mobile,count(*),max(id)?as?id? from?user1_trans1?? group?by?user_name,over,mobile?having?count(*)?>?1??)?b on?a.user_name?=?b.user_name?and?a.over?=?b.over?and?a.mobile?=?b.mobile? where?a.id?<?b.id; #用group_concat函數(shù)將mobile轉(zhuǎn)化成以逗號分隔的字符串 create?table?user1_trans2?as? select?user_name,over,group_concat(mobile)?as?mobile? from?user1_trans1?group?by?user_name,over; #對原表user1_practice進(jìn)行關(guān)聯(lián)更新 update?user1_practice?a? inner?join?user1_trans2?b?on?a.user_name?=?b.user_name set?a.mobile?=?b.mobile;
查看全部 -
@MySQL---利用主鍵處理重復(fù)數(shù)據(jù)
1.查詢數(shù)據(jù)是否重復(fù)
SELECT?user_name,COUNT(*) FROM?user1_test GROUP?BY?user_name?HAVING?COUNT(*)>1;
2.刪除重復(fù)數(shù)據(jù),對于相同數(shù)據(jù)保留ID最大的
DELETE?a?FROM?user1_test?a?JOIN( ?SELECT?user_name,COUNT(*),MAX(id)?AS?id ?FROM?user1_test ?GROUP?BY?user_name?HAVING?COUNT(*)>1)?b? ON?a.user_name=b.user_name WHERE?a.id<b.id;
查看全部
舉報(bào)