SQL統計一個列中不同值的數量,並且根據這個數量的排序做一些額外的處理
阿新 • • 發佈:2019-02-17
假設有這個幾個表:
userex:
servers:
現在我們要統計servers中配置的各種worldID來查詢其在userex中已經擁有的user數量,並統計出符合條件的擁有user數量最少的worldID。
首先根據userex中worldID的值來統計已經有資料的worldID的數量:
SELECT WorldID,count(*) num1 FROM userex GROUP BY WorldID ORDER BY num1, WorldID
然後我要根據上一步查找出來的worldID和num聯合servers來進一步判斷條件,state狀態為1:
SELECT servers.WorldID, if(num1, num1, 0) AS num FROM servers LEFT JOIN (SELECT WorldID,count(*) num1 FROM userex GROUP BY WorldID ORDER BY num1, WorldID) AS t ON servers.WorldID=t.WorldID WHERE servers.State=1
這個時候我們就已經得到了servers中所配置並且狀態state為1的worldID在userex中已經有用的數量num,如果我們要選擇最少的那個只需要:
SELECT servers.WorldID, if(num1, num1, 0) AS num FROM servers LEFT JOIN (SELECT WorldID,count(*) num1 FROM userex GROUP BY WorldID ORDER BY num1, WorldID) AS t ON servers.WorldID=t.WorldID WHERE servers.State=1 ORDER BY num, WorldID LIMIT 1;
if(num1, num1, 0)
的意思是如果num1為true(num1<>0 and num1<>NULL),則if返回值為num1,否則返回0。也可以用
ifnull(num1, 0)
num1不為NULL則返回num1,否則返回0。