最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

mySQL count多個(gè)表的數(shù)據(jù)實(shí)例詳解

 更新時(shí)間:2016年11月02日 08:44:24   投稿:daisy  
這篇文章通過實(shí)例給大家介紹了mySQL中count多個(gè)表的數(shù)據(jù),也就是多個(gè)表如何聯(lián)合查詢,文中通過項(xiàng)目中遇到的一個(gè)問題進(jìn)行分析和實(shí)現(xiàn),給出了詳細(xì)的示例代碼,相信對(duì)大家的理解和學(xué)習(xí)很有幫助,有需要的朋友們下面來一起看看吧。

一、實(shí)現(xiàn)需求

最近在做成就系統(tǒng),成就中有很多維度都和數(shù)量有關(guān),比如用戶粉絲數(shù)達(dá)到多少50個(gè),授予 名揚(yáng)四海 稱號(hào),用戶點(diǎn)贊達(dá)到 100 次,授予 點(diǎn)贊圣手 稱號(hào)等等。

粉絲數(shù)在 user_relation

點(diǎn)贊數(shù)在 user_praise

按照以往的做法,如果需要查詢用戶的這些數(shù)據(jù),又因?yàn)閿?shù)據(jù)是在不同的表中,所以往往會(huì)分開多條 SQL 查詢,比如:

SELECT count(*) mysh FROM user_relation WHERE other_uid =123456;
SELECT count(*) dzss FROM user_praise WHERE praise_uid = 123456;

然后將查詢出的數(shù)據(jù)封裝在一個(gè)對(duì)象中,返回給客戶端或者另做他用,如果需要統(tǒng)計(jì)的表少點(diǎn)還可以,但是像成就系統(tǒng)中,往往有各種各樣的成就,我們現(xiàn)在涉及到 12 張表,如果按照這種來查詢,那么就要寫 12 條 SQL 查詢 12 次,這讓人有點(diǎn)不爽。

二、能否用一條 SQL 語(yǔ)句實(shí)現(xiàn)呢

答案是肯定的

像這種將多個(gè)表不同的數(shù)據(jù),整合在一個(gè)表中的時(shí)候,我們可以采用 UNION 操作。

首先將使用 UNION 改寫以上語(yǔ)句:

SELECT wrzm,mysh,sgbh FROM (

 SELECT count(*) wrzm,0 mysh,0 sgbh FROM user_witness WHERE plan_uid = 123456

 UNION ALL

 SELECT 0 wrzm,count(*) mysh,0 sgbh FROM user_relation WHERE other_uid = 123456

 UNION ALL

 SELECT 0 wrzm,0 mysh,count(*) sgbh FROM plan_stage WHERE uid = 123456 AND status = 1

) t;

按照上面查詢出來的結(jié)果為:


mysql_count_results

我們發(fā)現(xiàn)這個(gè)結(jié)果已經(jīng)有點(diǎn)像樣了,如果能將表中 wrzm ,mysh ,sgbh 的數(shù)據(jù)三行變成一行,那就好了。于是我們很自然可以想到用 SUM (當(dāng)然一開始我沒想到,經(jīng)過朋友提醒),于是改寫上面的 SQL :

SELECT sum(wrzm) wrzm,sum(mysh) mysh,sum(sgbh) sgbh FROM (

 SELECT count(*) wrzm,0 mysh,0 sgbh FROM user_witness WHERE plan_uid = 123456

 UNION ALL

 SELECT 0 wrzm,count(*) mysh,0 sgbh FROM user_relation WHERE other_uid = 123456

 UNION ALL

 SELECT 0 wrzm,0 mysh,count(*) sgbh FROM plan_stage WHERE uid = 123456 AND status = 1

) t;

然后得出的結(jié)果為:


mysql_count_result_2

至此,得到了我們想要的結(jié)果,在一條 SQL 語(yǔ)句中實(shí)現(xiàn)了多個(gè)表的 count 統(tǒng)計(jì)。

三、拓展

如圖,我們能獲取到的僅僅是一個(gè)用戶的數(shù)據(jù),但是我們需要統(tǒng)計(jì)的是 user_info 中的所有用戶,那么也很簡(jiǎn)單,我們?cè)俅芜M(jìn)行改寫:

SELECT uid,sum(wrzm) wrzm,sum(mysh) mysh,sum(sgbh) sgbh FROM (

 SELECT plan_uid uid,count(*) wrzm,0 mysh,0 sgbh FROM user_witness
  GROUP BY plan_uid

 UNION ALL

 SELECT other_uid uid,0 wrzm,count(*) mysh,0 sgbh FROM user_relation
  GROUP BY other_uid

 UNION ALL

 SELECT uid,0 wrzm,0 mysh,count(*) sgbh FROM plan_stage WHERE status = 1
  GROUP BY uid

) t GROUP BY uid;

查詢結(jié)果為:


mysql_count_results_3

在這個(gè)結(jié)果中,如果我們需要查看具體某一個(gè)用戶,那么在最后加上
WHERE uid = 123456 即可,如果要排序的話,那么直接加上 ORDER BY 即可。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家在使用或者學(xué)習(xí)mysql的時(shí)候能有所幫助,如果有疑問大家可以留言交流。

相關(guān)文章

  • 在MySQL中創(chuàng)建帶有IN和OUT參數(shù)的存儲(chǔ)過程的方法

    在MySQL中創(chuàng)建帶有IN和OUT參數(shù)的存儲(chǔ)過程的方法

    這篇文章主要介紹了在MySQL中創(chuàng)建帶有IN和OUT參數(shù)的存儲(chǔ)過程的方法,在一定程度上簡(jiǎn)化了操作,需要的朋友可以參考下
    2015-06-06
  • CentOS7.5 安裝 Mysql8.0.19的教程圖文詳解

    CentOS7.5 安裝 Mysql8.0.19的教程圖文詳解

    這篇文章主要介紹了CentOS7.5 安裝 Mysql8.0.19的教程,本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-01-01
  • 一次mysql的.ibd文件過大處理過程記錄

    一次mysql的.ibd文件過大處理過程記錄

    mysql數(shù)據(jù)庫(kù)的每個(gè)表都有ibd和frm兩種格式的文件,ibd文件是表的數(shù)據(jù)文件,存放表的數(shù)據(jù),修改文件后綴,無法在MySQL數(shù)據(jù)庫(kù)中查詢表數(shù)據(jù),這篇文章主要給大家介紹了關(guān)于一次mysql的.ibd文件過大處理過程的相關(guān)資料,需要的朋友可以參考下
    2022-06-06
  • Java將excel中的數(shù)據(jù)導(dǎo)入到mysql中

    Java將excel中的數(shù)據(jù)導(dǎo)入到mysql中

    這篇文章主要介紹了Java將excel中的數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫(kù),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,需要的朋友可以參考借鑒
    2018-05-05
  • MySQL物理備份與恢復(fù)工具XtraBackup使用小結(jié)

    MySQL物理備份與恢復(fù)工具XtraBackup使用小結(jié)

    本文主要介紹了MySQL物理備份與恢復(fù)工具XtraBackup使用小結(jié),借助Percona XtraBackup工具實(shí)現(xiàn)MySQL的物理備份與恢復(fù),相當(dāng)于將整個(gè)MySQL進(jìn)行了復(fù)制,再粘貼到其他地方運(yùn)行,感興趣的可以了解一下
    2024-07-07
  • NaviCat連接時(shí)提示"不支持遠(yuǎn)程連接的MySql數(shù)據(jù)庫(kù)"解決方法

    NaviCat連接時(shí)提示"不支持遠(yuǎn)程連接的MySql數(shù)據(jù)庫(kù)"解決方法

    前段時(shí)間,因?yàn)橐豁?xiàng)目,需要做MYSql的數(shù)據(jù)同步服務(wù),但由于網(wǎng)站空間服務(wù)供應(yīng)商不提供遠(yuǎn)程連接MYSql,所以無法利用NaviCat客戶端通過填寫服務(wù)器地址來連接遠(yuǎn)程服務(wù)器,在網(wǎng)上找到了SSH方式連接,但經(jīng)過測(cè)試后發(fā)現(xiàn)依舊無法連接。
    2011-08-08
  • MySql5.7.21安裝要點(diǎn)記錄筆記

    MySql5.7.21安裝要點(diǎn)記錄筆記

    這篇文章主要介紹了mysql5.7.21安裝要點(diǎn)記錄筆記,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • mysql5.5中文亂碼問題解決的有用方法

    mysql5.5中文亂碼問題解決的有用方法

    在使用MYSQL時(shí)遇到中文亂碼的問題,表現(xiàn)為插入數(shù)據(jù)后查詢時(shí)輸出為??(亂碼),下面這篇文章主要給大家介紹了關(guān)于mysql5.5中文亂碼問題解決的有用方法,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2022-05-05
  • Mysql binlog日志文件過大的解決

    Mysql binlog日志文件過大的解決

    本文主要介紹了Mysql binlog日志文件過大的解決,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • MySQL 遷移后無法快速導(dǎo)數(shù)據(jù)問題解決

    MySQL 遷移后無法快速導(dǎo)數(shù)據(jù)問題解決

    這篇文章主要為大家介紹了MySQL 遷移后無法快速導(dǎo)數(shù)據(jù)問題解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10

最新評(píng)論

泗阳县| 永丰县| 盘山县| 疏附县| 通道| 咸宁市| 台东市| 宁乡县| 东光县| 乐陵市| 佛学| 高碑店市| 吴旗县| 关岭| 且末县| 普兰县| 苏尼特右旗| 桂东县| 柳州市| 会理县| 景泰县| 青田县| 呼伦贝尔市| 左云县| 广水市| 东兰县| 东源县| 松原市| 普洱| 遂昌县| 新乐市| 吴堡县| 永定县| 留坝县| 泽州县| 虹口区| 文昌市| 浪卡子县| 塔河县| 龙南县| 西华县|