那些年我看到的奇怪sql

2021-07-29 21:37:03 字數 2509 閱讀 5274

基礎表:日誌表+臨時表+物件表+流水表+歷史記錄表 

create table `顧客待裁決` (

`顧客編號` int(11) unsigned not null auto_increment,

`許可` varchar(20) default null,

`顧客姓名` varchar(30) default '' comment '姓名/公司名字',

`**號碼` varchar(20) default '',

`銷售顧問` varchar(50) default null,

`所屬銷售顧問` varchar(50) default null comment '解決歸屬權問題', 

`更新時間` timestamp null default current_timestamp on update current_timestamp, 

`crm戰敗確認` int(2) default null comment '0-crm確認戰敗;1-待sm分配;2-分配完成',

primary key (`顧客編號`)

1.少見的sql ,              

select  

sum( a.**號碼=12345678955)

from 

`顧客待裁決` a  ---- 算這個**號碼有多少的數量

2.   去重

select count(distinct a.**號碼) ,

a.顧客姓名 from

`顧客待裁決` a 

group by a.**號碼

3. 兩個**相等會怎麼樣

if( format(a.**,4)=format(b.**,4) ,'已確認','待確認' ) 

4.  把結果集的某一列當成是查詢條件

select  

sum( a.**號碼=12345678955), 

( select b.顧客姓名 from 顧客記錄彙總 b

where b.**號碼=  a.**號碼) as 顧客姓名

from 

顧客待裁決 a 

5.一句話查詢出所有角色的許可權

角色表   :角色編號+角色

許可權表: 許可權編號+許可權名字

角色許可權表: 角色編號+許可權編號 --------------------  許可權名字為0 的證明沒有這個許可權

select  c.角色, 

max(  case    許可權名字 when  b.許可權名字  then a.角色編號 else 0  end  )   許可權名字

from 角色表 c 

left  join 角色許可權表 a

left join 許可權表 b  

group by c.角色

5.遇到多表關聯時,選取的主表一定要是資料**,是直接輸入的第一手資料,

利用主表再去做各種關聯,

6.強行關聯

union用的比較多union all是直接連線,

取到得是所有值,記錄可能有重複   

union 是取唯一值,記錄沒有重複  

select a.**號碼 ,a.銷售顧問, ''  所屬銷售顧問  from  

`顧客待裁決` a 

union 

select a.**號碼 ,a.銷售顧問 ,a.所屬銷售顧問 from  

`顧客記錄彙總` a 

7. group_concat就是 把某一列的資訊全部都拼接在一行

6. 使用分組後就會是每個組的拼接

時間函式:

year(`日期`) =:year and month(`日期`)=:month
where `開始日期`<=curdate() and `結束日期`>=curdate()
8. 當a表 ---b和c都關聯

或者 a會被 b 的a,b兩個不同的列做關聯,要十分的注意,

最好乙個在  from後做關聯,

乙個在from前 結果集的 查詢b.b做關聯,把結果當條件

那些年意外看到的方法

學習 1 學習 2 關於樹狀陣列,顧名思義,就是數形狀的陣列,主要用於查詢任意兩位之間的所有元素之和,但是每次只能修改乙個元素的值。概述圖如下 以陣列c代指樹狀陣列,以陣列a代指原陣列 可看出 c1 a1 c2 a1 a2 c3 a3 c4 a1 a2 a3 a4 c5 a5 c6 a5 a6 c7...

那些年我看到過的牛逼設計

redux 只有action reducer和store。看起來就是flux的變種 vuex同樣是單中心store 單線資料流 事件驅動。特點在於把業務邏輯也分了層 actions和mutations,action是業務邏輯,mutation是資料邏輯。沒見過大專案,不知道這個分層好處在哪,但是 似...

那些年,我的Git Cheat Sheet

1.版本穿梭 head指向的版本就是當前版本。git允許我們在版本的歷史之間穿梭,使用命令git reset hard commit id。穿梭前,用git log可以檢視提交歷史,以便確定要回退到哪個版本。要重返未來,用git reflog檢視命令歷史,以便確定要回到未來的哪個版本。2.檢視某一行...