本文主要是介绍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。
这篇关于SQL统计一个列中不同值的数量,并且根据这个数量的排序做一些额外的处理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!