1. 程式人生 > >MySQL常用及高階語法集錦

MySQL常用及高階語法集錦

一、前言

本文記錄專案需求中遇到過的MySQL語法例項,持續更新。

二、語法例項

0x01 常用語法

留個沙發空位

0x02 根據外來鍵關聯錶轉移欄位

表T1中有個t2_id欄位,想將關聯表T2中對應的欄位內容轉移到t1中來

UPDATE t1 LEFT JOIN t2 ON t1.t2_id = t2.id 
    SET  t1.name=t2.name,t1.phone=t2.phone where t1.t2_id>0;

表T2
name,phone

場景:此處有這個需求,是因為前面開發人員訂單設計時關聯的是一個地址表id,使用者已經提交訂單,但修改地址後還會導致訂單地址更改。訂單設計時應該建立資料快照,防止其他表的更改導致快照更改,以免與使用者產生糾紛。

0x03 無規則欄位批量修改資料

根據給定的一些無規則id批量修改資料

UPDATE user SET is_pass=0 WHERE id IN(1,2,7,9);

場景:前期後臺功能並不完善,一些機器需要更改資料庫修改狀態。顯然在這裡'IN'比'='要省事。

0x04 一小時內的平均值/總和等統計

#每分鐘內的平均值
SELECT DATE_FORMAT(FROM_UNIXTIME(`time`),'%Y-%m-%d %H:%i') AS TIME,AVG(tx_kb) 
    FROM traffic WHERE machine_id=1234 GROUP BY DATE_FORMAT(FROM_
UNIXTIME(`time`),'%Y-%m-%d %H:%i'); #每小時內的平均值 SELECT DATE_FORMAT(FROM_UNIXTIME(`time`),'%Y-%m-%d %H') AS TIME,AVG(tx_kb) FROM traffic WHERE machine_id=1234 GROUP BY DATE_FORMAT(FROM_UNIXTIME(`time`),'%Y-%m-%d %H');

場景:假設機器每隔10秒流量上傳一次流量。(正常情況下不會那麼頻繁不然伺服器受不了) 我們需要檢視某臺機器一天24個小時時間段的流量統計圖,進而分析日使用高峰。

0x05 一對多關係分組統計

SELECT machine.id,machine.name,COUNT(bind.user_id) AS user_num FROM machine,bind
    WHERE machine.id=bind.machine_id GROUP BY machine.id;

假設機器A、B、C、D,每臺機器綁定了若干使用者,我們統計每臺機器繫結使用者數

0x06 按日期分類統計使用者

SELECT FROM_UNIXTIME(regdate,'%Y-%m-%d') days,COUNT(id) num 
    FROM USER GROUP BY days ORDER BY days DESC;

0x07 使用者金幣TOP10排行榜

SELECT user_id,nickname,img,SUM(gold) AS gold FROM gold_log 
    LEFT JOIN user ON user.id=user_id WHERE GROUP BY user_id ORDER BY gold DESC LIMIT 0,10;

0x08 遷移表字段資料

INSERT INTO  user2(`u_id`,`name`) SELECT `id`,`name`  FROM user;