国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

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

2024-07-24 12:53:27
字體:
來源:轉載
供稿:網友

一、實現需求

最近在做成就系統,成就中有很多維度都和數量有關,比如用戶粉絲數達到多少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;
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 罗山县| 黑山县| 平遥县| 曲沃县| 永登县| 黔东| 余江县| 西充县| 凤翔县| 天津市| 泽库县| 新蔡县| 德庆县| 桦南县| 阜南县| 修文县| 大城县| 周口市| 酉阳| 斗六市| 庄河市| 读书| 安仁县| 四川省| 罗源县| 芷江| 霍邱县| 昌黎县| 琼海市| 朝阳市| 新泰市| 鱼台县| 庆安县| 寿阳县| 西乌珠穆沁旗| 大悟县| 星子县| 武平县| 岳西县| 昭苏县| 临武县|