mysql 统计_告别硬编码,mysql 如何实现按某字段的不同取值进行统计
上周我突然意識(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)題。
- 上一篇: midjourney iw指令怎么用?
- 下一篇: oracle 根据值不同具有不同的搜索条