運營中sql
① 商業數據分析--使用sql計算復購周期
評價一個商業產品好不好,我們可以使用NPS、退款率、產品的使用效果等指標。
還有一個指標,能夠很好的體現產品效果--- 復購 。復購是指用戶多次購買。如果用戶不滿意,那肯定不會多次購買(剛需品除外)。復購的維度比較多,比如金額、品類等,這里主要討論周期。
如果我們能夠計算出大部分用戶的復購周期,那麼,我們就能精細化運營。當到達一定的周期時,就可以通過發優惠券或是其他的運營方式觸達用戶。下面給大家分享一下怎麼用sql計算用戶的復購周期。
下表是不同用戶在不同時間的下單情況。 表名 :order_user, 欄位名稱 :a.用戶名稱---customer_name,b.訂單時間---order_date
思路:
使用lag函數進行位移。lag(order_date,1)中兩個參數,第一個參數是需要位移的欄位,第二個欄位是位移幾行,在這里讓訂單時間往後位移一行得到lag1欄位。
以customer_name進行開窗,然後以order_date進行排序,可以看到用戶的每個訂單時間都往後移動了一行。
然後使用訂單時間減去位移後的時間,得到了周期。
最後以周期進行聚合,求次數,得到了不同周期的次數。注意:
完整版的SQL中,我使用了with創建了一個臨時表,表名就是order_user,大家可以在網上搜索一下,如果有疑問可以私信我。
得到了周期分布,就可以交付給運營同學,針對不同的用戶進行精細化運營。
② 店鋪運營情況分析-MqSQL
本項目對某線上店鋪在三四月份的銷售情況進行分析,從整體銷售情況、用戶消費行為兩個方向進行分析。其中用戶消費行為中,對用戶忠誠度、性別分布、年齡分布和生命周期進行了深入分析,用來幫助運營人員明確後續工作方向。
從整體銷售情況和用戶消費行為兩個方面開始分析。針對於用戶來說,從忠誠度、性別分布、年齡分布、用戶生命周期等指標分析用戶消費情況。
源數據分為兩個表orderinfo表(訂單詳情表)和userinfo表(用戶信息表)
可以看出4月份的訂單量和銷售額比三月份少了將近一半,具體原因需要結合業務深入分析。
由於源數據只有3月和4月的,所以我們這里分析3月份的復購率和回購率。
復購率:當月購買了多次的用戶占當月用戶的比例
本月回購率:本月購買用戶中有多少用戶下個月又再次購買
由於源數據信息有限,這里只分析男女用戶消費頻次差異;
查詢結果顯示,男女生消費頻次幾乎相等,證明性別對該商品的銷售情況無影響。
age列表示年齡除以10之後,向上取余的結果。所以4表示在[30-40)歲之間,以此類推。
由於源數據臟數據太多了,這個結果無法直觀的看出年齡分布情況,這里只是了解下分析方法。
用戶生命周期為多次消費的用戶,第一次和最後一次消費間隔是多少天;
③ 運營必看的SQL(中)
寫在前面:如果你是一名程序員又恰好是一名SQLBOY的話,那麼請移步,因為下面講的實在太精彩但不專業;如果你是一名想學會寫好SQL的運營,那麼你一定要認真來讀。
本文用形象的的語言介紹寫好SQL六大必須掌握的招式,每一式都是你寫好SQL的關鍵。可能你之前只是會用之前的一招或者兩招,下面教你的是如何六招聯用,發揮無窮法力。
中文意思,「在哪?哪裡?」那在SQL裡面where 主要用來幹嘛呢?主要用來過濾數據集,所謂的過濾就是把不符合一定規則的數據給幹掉,同時把符合條件的數據保留下來,這就是過濾的意思。
寫在SQL裡面 where 後面一般是接布爾表達式,例如:where name='張三' 表示如果name(姓名)是張三的就保留下來,其他的舍棄。
這是SQL中使用最多最常見的一式,因為我們取數據也都是取我們想要的數據大部分情況下不會是所有的數據。
顧名思義,「連接」的意思,所謂連接就是把兩個原本分開的物體結合起來,這種結合要麼通過一定的介質把二者粘合起來要麼通過暴力手段硬憑借在一起。
舉一個不那麼恰當的例子,好比兩個人結婚,如果是通過媒人介紹的那就是有介質把兩個人連接在一起,通過暴力連接的就類似於強扭的瓜,硬扯到一起的。
那麼這兩種「連接」有什麼不同呢,通過介質的連接我們需要在SQL中把介質體現出來,如 a join b on a.id=b.id,這里所謂的id就是介質,通過暴力手段連接起來有個學名叫做「笛卡爾積」,用數學方法來解釋就是假如a表有m行數據,b表中有n行數據,那麼笛卡爾積的效果就是m*n行的數據集合,也就是說把a表的每一行都與b表的每一行做連接,這樣連接以後是一個龐大的數據集,特別是多個表做笛卡爾積時往往會把機器跑死就是這個原因。
join 細分又分為 left out join(left join), full out join(full join),inner join(join),right out join(right join) 這幾種join的區別,可以用下面一組簡單的漫畫體現:
join常用的場景就是你需要提取的內容(數據列)不能完全從一個表中獲取,而是 分布在不同的表中 (你可能會問為什麼設計表的時候不把所有的列設計到一個表中,這就牽涉到 範式 要求了,後面我們再聊。),這個時候你就需要把不同的表連接(join)起來,然後分別從這些表中提取你需要用到的數據列(連接後的多張表,你可以認為就是一張大寬表了)。
上面是連接,下面是聯合,從字面意思大家也略微能體會到二者的差異, 連接是在拓寬了長度,二聯合這是增加了寬度 (厚度)。
舉個形象一點的例子,join是把一根折斷的筷子給接起來拼接成一根完整的筷子,二union是把兩根筷子握在一起,形成一雙筷子。
根據這個列子我們也很容易得出二者的一些語法差異,join對「連接」起來的多個數據表沒有列數的要求,而union則必須要求「聯合」起來的兩個或者多個數據集保持相同的列數。
union 還有一個兄弟叫 union all ,所謂all就是把數據完全揉和在一起,二不帶all的通常會把多個數據集中重復的數據行(每一列的值都相同)去重,只保留一行。
union 常用的情景是:多個數據集之間沒有明顯的關聯(join)關系而你要的內容又分布在這些數據集中,這種情況下就需要union出場了。一般來說使用union就夠了,因為沒有必要保留兩個完全相同的數據行。
group,分組的意思,這一招是分析師最常用的。在什麼情況下我們會用到分組呢,當我們想按照某個維度查看數據情況時,
比如查看每個學生的高考總分,各科中的 最高分,最低分,平均分 時都要用到分組這個概念。
總結一下,如果你的需求中有 」每「,」總「,」最大「,」最小「 ,」平均「這幾個關鍵字時,大概率是要用group的。
分組用來分析一般有兩層意思,一是計算用來分組的維度上的統計量(計數、求和、均值等),二是比較不同組在這些分組維度上量的差異,便於對比。
group by後面的關鍵字就是你想要分組的維度,如城市、班級、日、月、年等。
這一招是必須緊跟上面一招才能發出來的,但是它的威力也是巨大的,用的好的話可以起到 事半功倍 的效果。
這一招的效果其實跟第一招where有點類似, 只不過where一般來說是對原始數據的單條數據進行過濾,而having則是對分組(group)聚合後的數據結果進行過濾 。比如我們想取出本省高考總成績大於600分的同學,這個時候having就排上用場了。當然你也可以用where,只不過會復雜一些,我們這里就不提倡了。
前面也說了,這一招是緊跟在group by後面使用的,所以在寫法上也必須在group by 後面,如:group by student_name having sum(score)>600。
這一招通常適用的場景就是分組聚合後,分的組過多,而且有些組並不是關心的數據,這時候你就要想到having了。
這是最後一招,這一招可能不是最厲害的一招,但是確實最傷元氣的一招。為什麼說他耗費元氣呢,舉個例子:上體育課,體育老師要求按照男生、女生分成兩組。大家是不是很快就分好了;但是如果老師說不同組內在按照身高排序列隊,是不是就很耗費時間了。
同樣order排序雖然不是人來執行,但是計算機也要比較每一條記錄的大小,在數據量很大的情況下,計算機它也快不了。
排序有什麼用呢?其實用到的地方還是挺多的,比如統計各省的高考狀元、榜眼、探花,女生最高分,男生最高分;本月內業績最好的員工,入職最早的員工等,都要用到order by。
總結來說,order及可以對原始數據按照某一列排序,也可以對統計後的結果排序。
默認的排序是升序,就是按照從小到大的順序排列,通過指定關鍵字desc 可以降序排序,順序與前者相反。另外如果指定的排序列是數值型的列則按照數值的大小排序,如果指定的列是字元型的列則按照字典的順序進行排列。
看完後,這SQL的六脈神劍你學會了嗎?下次試試六式齊發,一招制敵吧。
④ 資料庫牛人是如何進行SQL優化的
SQL 查詢優化減少了查詢所需的資源並提高了整體系統性能,在本文中,我們將討論 SQL 查詢優化、它是如何完成的、最佳實踐及其重要性。
SQL 查詢優化是編寫高效的 SQL 查詢,並在執行時間和資料庫表示方面 提高查詢性能 的迭代過程,查詢優化是幾個關系資料庫管理系統 (RDBMS) 的一項重要功能。
查詢是對來自資料庫的數據或信息的問題或請求,需要編寫一組資料庫可以理解的預定義代碼,結構化查詢語言 (SQL) 和其他查詢語言旨在檢索或管理關系資料庫中的數據。
資料庫中的查詢可以用許多不同的結構編寫,並且可以通過不同的演算法執行,寫得不好的查詢會消耗更多的系統資源,執行時間長,並可能導致服務損失,一個完美的查詢可以減少執行時間並帶來最佳的 SQL 性能。
SQL查詢優化的主要目的是:
確保查詢處於最佳路徑和形式非常重要,SQL 查詢過程需要最好的執行計劃和計算資源,因為它們是 CPU 密集型操作,SQL 查詢優化通過三個基本步驟完成:
解析確保查詢在語法和語義上都是正確的,如果查詢語法正確,則將其轉換為表達式並傳遞到下一步。
優化在查詢性能中扮演著重要的角色,並且可能很困難,任何考慮優化的查詢執行計劃都必須返回與之前相同的結果,但優化後的性能應該會有所提高。
SQL 查詢優化包括以下基本任務:
最後,查詢執行涉及將查詢優化步驟生成的計劃轉化為操作,如果沒有發生錯誤,此步驟將返回結果給用戶。
一旦用戶確定某個查詢需要改進以優化 SQL 性能,他們就可以選擇任何優化方法——優化 SQL 查詢性能的方法有很多種,下面介紹了一些最佳實踐。
提高查詢性能的一種簡單方法是將 SELECT * 替換為實際的列名,當開發人員在表中使用 SELECT * 語句時,它會讀取每一列的可用數據。
使用 SELECT 欄位名 FROM 而不是 SELECT * FROM 時,可以縮小查詢期間從表中提取的數據的范圍,這有助於提高查詢速度。
循環中的 SQL 查詢運行不止一次,這會顯著降低運行速度,這些查詢會不必要地消耗內存、CPU 能力和帶寬,這會影響性能,尤其是當 SQL 伺服器不在本地計算機上時,刪除循環內的查詢可提高整體查詢性能。
使用SQL 伺服器索引可以減少運行時間並更快地檢索數據,可以使用聚集和非聚集 SQL 索引來優化 SQL 查詢,非聚集索引單獨存儲,需要更多的磁碟空間,因此,了解何時使用索引很重要。
該OLAP功能「擴展了SQL解析函數的語法。」 SQL 中的 OLAP 功能更快且易於使用,熟悉這些語法的 SQL 開發人員和 DBA 可以很容易地適應和使用它們。
OLAP 函數可以創建所有標准計算度量,例如排名、移動聚合、份額、期初至今、前期和未來期、平行期等。
查詢優化器使用統計信息來確定如何最好地連接表、何時應該使用索引以及如何訪問這些索引等,無論是手動還是自動,SQL 伺服器統計信息都應該保持最新。
過時的 SQL Server 統計信息會影響表、索引或列統計信息,並導致查詢計劃性能不佳。
SQL 查詢優化可以輕松提高系統性能,從而節省成本,優化 SQL 查詢可以提高運營效率並加快性能,從而提高系統上線進度。
SQL 查詢優化很重要,原因有很多,包括:
組織可以通過更快的響應時間獲得可靠的數據訪問和高水平的性能,優化 SQL 查詢不僅可以提高整體系統性能,還可以提高組織的聲譽,最終,SQL 查詢優化的最佳實踐幫助用戶獲得准確、快速的資料庫結果。
⑤ 產品運營需要學sql嗎
首先先說觀點, 產品和運營都有學SQL的必要.
無論公司里是不是有BI 亦或者有很成熟的數據報告體系,多掌握一門SQL語言還是有一定必要的.
公司的數據報表都是以全局緯度數據作為體現的. 想要一個個體緯度數據, 就需要到資料庫里去提取.
這時候SQL的作用就能體現了. 學會了SQL可以自己去拿數據.工作效率更高.
再不濟,了解一定的SQL知識,至少不會被技術,BI 忽悠.
對開展工作有非常大的好處
⑥ 店鋪運營管理系統(SQL)會員資料都是以什麼形式保存的文件對於這個文件怎樣打開並修改裡面數據呢
保存在資料庫中的。
具體文件格式看是什麼資料庫。
可以用對應的資料庫軟體去看,去改。
比如MySQL,SQLServer,Oracle