程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> mySQL count多個表的數據實例詳解

mySQL count多個表的數據實例詳解

編輯:MySQL綜合教程

mySQL count多個表的數據實例詳解。本站提示廣大學習愛好者:(mySQL count多個表的數據實例詳解)文章只能為提供參考,不一定能成為您想要的結果。以下是mySQL count多個表的數據實例詳解正文


一、完成需求

最近在做成就零碎,成就中有很多維度都和數量有關,比方用戶粉絲數到達多少50個,授予 名揚四海 稱號,用戶點贊到達 100 次,授予 點贊聖手 稱號等等。

粉絲數在 user_relation

點贊數在 user_praise

依照以往的做法,假如需求查詢用戶的這些數據,又由於數據是在不同的表中,所以往往會分開多條 SQL 查詢,比方:

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

然後將查詢出的數據封裝在一個對象中,前往給客戶端或許另做他用,假如需求統計的表少點還可以,但是像成就零碎中,往往有各種各樣的成就,我們如今觸及到 12 張表,假如依照這種來查詢,那麼就要寫 12 條 SQL 查詢 12 次,這讓人有點不爽。

二、能否用一條 SQL 語句完成呢

答案是一定的

像這種將多個表不同的數據,整合在一個表中的時分,我們可以采用 UNION 操作。

首先將運用 UNION 改寫以上語句:

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;

依照下面查詢出來的後果為:


mysql_count_results

我們發現這個後果曾經有點像樣了,假如能將表中 wrzm ,mysh ,sgbh 的數據三行變成一行,那就好了。於是我們很自然可以想到用 SUM (當然一開端我沒想到,經過冤家提示),於是改寫下面的 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;

然後得出的後果為:


mysql_count_result_2

至此,失掉了我們想要的後果,在一條 SQL 語句中完成了多個表的 count 統計。

三、拓展

如圖,我們能獲取到的僅僅是一個用戶的數據,但是我們需求統計的是 user_info 中的一切用戶,那麼也很復雜,我們再次停止改寫:

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;

查詢後果為:


mysql_count_results_3

在這個後果中,假如我們需求檢查詳細某一個用戶,那麼在最後加上
WHERE uid = 123456 即可,假如要排序的話,那麼直接加上 ORDER BY 即可。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家在運用或許學習mysql的時分能有所協助,假如有疑問大家可以留言交流。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved