1. 程式人生 > >SQL統計一個列中不同值的數量,並且根據這個數量的排序做一些額外的處理

SQL統計一個列中不同值的數量,並且根據這個數量的排序做一些額外的處理

假設有這個幾個表:

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。