日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

mysql 统计_告别硬编码,mysql 如何实现按某字段的不同取值进行统计

發(fā)布時(shí)間:2024/8/5 数据库 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql 统计_告别硬编码,mysql 如何实现按某字段的不同取值进行统计 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

上周我突然意識(shí)到,我在grafana上寫的 sql 語(yǔ)句存在多處硬編碼。這篇筆記將記錄如何實(shí)現(xiàn)沒(méi)有硬編碼的sql語(yǔ)句,以及自學(xué)編程過(guò)程中如何應(yīng)對(duì)自己的笨拙代碼和難題不斷的狀況。

1、有效但粗笨的硬編碼

所謂硬編碼,大意是指代碼中出現(xiàn)很多具體的取值,每個(gè)取值都是手動(dòng)賦值的。比如:

-- 達(dá)成某個(gè)成就的用戶數(shù) selectcount(user_id) as 用戶數(shù) from achivement_table whereachivement_name= '牛刀小試'

以我家產(chǎn)品 xue.cn 的成就系統(tǒng)為例,我們首個(gè)版本僅有10個(gè)成就,我要拷貝粘貼修改成就名稱達(dá)10次。最近成就升級(jí)到V2版本,有17個(gè)成就,未來(lái)還會(huì)有更多成就。再比如習(xí)題和章節(jié),每本書的章節(jié)數(shù)和習(xí)題數(shù),都是幾十個(gè)起。至于統(tǒng)計(jì)每本書的閱讀用戶數(shù),每個(gè)章節(jié)的留言數(shù),每個(gè)成就的達(dá)成用戶數(shù)……這類實(shí)現(xiàn)太頻繁了。

如果全部采用硬編碼,我意識(shí)到這將低效粗笨。

在初學(xué)編程時(shí),你我總會(huì)寫出一些低效但生效的代碼。隨著編程水平提升或需求變得復(fù)雜,我們將有機(jī)會(huì)迭代自己的代碼。迭代是好事,但這不意味著之前的低效但有效的代碼是壞事。——**接納自己早期的笨拙,并追求持續(xù)的進(jìn)步。咱們不需要為自己初學(xué)階段的代碼感到不好意思或羞愧,而是要視之為提升的機(jī)會(huì)。**這個(gè)心態(tài)令我在自學(xué)編程的路上幾乎無(wú)所畏懼。

2、知道,但用時(shí)忘

如何實(shí)現(xiàn)代碼自動(dòng)獲取每個(gè)取值,并按該值分別統(tǒng)計(jì)呢?我搜索到一些代碼,卻看不懂:

不得已,我準(zhǔn)備好問(wèn)題描述,并發(fā)紅包在編程學(xué)習(xí)群里請(qǐng)教。群友給出的答案讓我哭笑不得:

特么這方法我不是會(huì)嗎!?鬼打墻啦。

這種現(xiàn)象在初學(xué)技能時(shí),是不是挺常見(jiàn)的!?知道,但不熟練。知道知識(shí)點(diǎn),但實(shí)戰(zhàn)時(shí)可能想不起來(lái)。或者知道某一種實(shí)戰(zhàn)情境,換到其它實(shí)戰(zhàn)情境就忘了……嗯,本質(zhì)上還是重復(fù)的不夠,熟練度不行啊。

既然是我已知的知識(shí)點(diǎn),立即實(shí)操吧。

情境A:字段取值范圍在同一表格

想要統(tǒng)計(jì)的原數(shù)據(jù),和該字段的所有取值范圍,在同一張數(shù)據(jù)表時(shí),代碼簡(jiǎn)單如下。

-- 所有成就的完成用戶數(shù) selectachivement_name as 成就名稱,count(user_id) as 用戶數(shù) from achivement_table group by成就名稱 order by成就名稱

情境B:字段取值范圍在另一表格

想要統(tǒng)計(jì)的原數(shù)據(jù),和該字段的所有取值范圍,不在同一張數(shù)據(jù)表時(shí),代碼僅稍微復(fù)雜一點(diǎn)點(diǎn)。

-- 所有成就的完成用戶數(shù) selectachivements.name as 成就名稱,count(achivement_event.user_id) as 用戶數(shù) from achivement_event,achivements whereachivement_event.name = achivements.name group by成就名稱 order by成就名稱

3、解決一個(gè)難題,新的困惑到來(lái)

硬編碼的問(wèn)題現(xiàn)在倒是解決了,但實(shí)現(xiàn)數(shù)據(jù)可視化時(shí),又有新的情況產(chǎn)生。

之前的硬編碼風(fēng)格,在 grafana 上通過(guò) add query 完成,該操作是新增數(shù)據(jù)列,使得數(shù)據(jù)結(jié)果是一行多列,每個(gè)成就名就是一列。

這種數(shù)據(jù),用 grafana 的 bar gauge 圖表類型展示效果很不錯(cuò)。

之后沒(méi)有硬編碼的sql語(yǔ)句,得到的數(shù)據(jù)結(jié)果是多行2列,首列是成就名,次列是用戶數(shù)。相當(dāng)于之前數(shù)據(jù)結(jié)果的倒置。

行列倒置在 python pandas中,就是對(duì)dataframe數(shù)據(jù)一個(gè)T操作而已。但在 grafana 上如何靈活地操作行列,我還有不少困惑要解決。——這并非我的不足,這是我將要提升的機(jī)會(huì),對(duì)不?

小結(jié)

在這篇筆記中,我不僅記錄了自己如何完成按某個(gè)字段的取值范圍進(jìn)行統(tǒng)計(jì)的需求,既有早期的硬編碼風(fēng)格,也有升級(jí)版的語(yǔ)句。其中我還分享了自己如何看待初學(xué)編程時(shí)的笨拙代碼,如何應(yīng)對(duì)一個(gè)難題接著一個(gè)難題的編程自學(xué)過(guò)程。

希望我的筆記,帶給你啟發(fā)和力量。

總結(jié)

以上是生活随笔為你收集整理的mysql 统计_告别硬编码,mysql 如何实现按某字段的不同取值进行统计的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。