濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > mySQL count多個(gè)表的數(shù)據(jù)實(shí)例詳解

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

熱門標(biāo)簽:如何辦理400客服電話 西藏地圖標(biāo)注改進(jìn)點(diǎn) 地圖標(biāo)注什么軟件好用 神行者百貨商場(chǎng)地圖標(biāo)注 地圖標(biāo)注專員入駐 外呼系統(tǒng)線路經(jīng)常出問(wèn)題嗎 外呼系統(tǒng)怎樣才能不封號(hào) 安陽(yáng)手機(jī)自動(dòng)外呼系統(tǒng)原理是什么 地圖標(biāo)注百度競(jìng)價(jià)

一、實(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 張表,如果按照這種來(lái)查詢,那么就要寫 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;

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


mysql_count_results

我們發(fā)現(xiàn)這個(gè)結(jié)果已經(jīng)有點(diǎn)像樣了,如果能將表中 wrzm ,mysh ,sgbh 的數(shù)據(jù)三行變成一行,那就好了。于是我們很自然可以想到用 SUM (當(dāng)然一開始我沒(méi)想到,經(jīng)過(guò)朋友提醒),于是改寫上面的 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í)候能有所幫助,如果有疑問(wèn)大家可以留言交流。

您可能感興趣的文章:
  • MySQL 大表的count()優(yōu)化實(shí)現(xiàn)
  • MySQL中聚合函數(shù)count的使用和性能優(yōu)化技巧
  • 關(guān)于mysql中innodb的count優(yōu)化問(wèn)題分享
  • 聊聊MySQL的COUNT(*)的性能
  • 詳解 MySQL中count函數(shù)的正確使用方法
  • 淺談MySQL 統(tǒng)計(jì)行數(shù)的 count
  • mysql count提高方法總結(jié)
  • MySQL中無(wú)過(guò)濾條件的count詳解
  • MySQL中count(*)、count(1)和count(col)的區(qū)別匯總
  • MySQL COUNT函數(shù)的使用與優(yōu)化

標(biāo)簽:張掖 AXB 阜陽(yáng) 萍鄉(xiāng) 衡水 貴港 酒泉 雞西

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《mySQL count多個(gè)表的數(shù)據(jù)實(shí)例詳解》,本文關(guān)鍵詞  mySQL,count,多個(gè),表,的,數(shù)據(jù),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《mySQL count多個(gè)表的數(shù)據(jù)實(shí)例詳解》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于mySQL count多個(gè)表的數(shù)據(jù)實(shí)例詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    安岳县| 昌邑市| 海宁市| 西安市| 旬阳县| 定结县| 南木林县| 莱州市| 磐安县| 津市市| 垦利县| 房产| 资阳市| 金溪县| 浪卡子县| 大丰市| 桂阳县| 抚顺县| 东至县| 谷城县| 临颍县| 应城市| 无锡市| 鸡东县| 睢宁县| 农安县| 梅州市| 石城县| 兖州市| 永兴县| 始兴县| 临汾市| 惠水县| 内江市| 磴口县| 峨眉山市| 肥乡县| 贞丰县| 巢湖市| 西昌市| 三台县|