php– 显示数据库表中的动态范围并计算每个范围内的行数

php– 显示数据库表中的动态范围并计算每个范围内的行数,第1张

概述我有这样的数据库表:我想显示不同的5岁年龄段以及该范围内的学生人数,如下所示:在这里,最低年龄是10岁,所以我们首先计算10-15的范围.该范围内有5名学生.对于第二个范围,我们需要找到年龄≥15的18岁.因此,第二个范围是18-23,依此类推.如果有自动计算范围并计算该范围内的数据,我将不胜感激.最佳答案您可以使用SUM()语句中的条件来获取该条件所在的计

我有这样的数据库表:

我想显示不同的5岁年龄段以及该范围内的学生人数,如下所示:

在这里,最低年龄是10岁,所以我们首先计算10-15的范围.该范围内有5名学生.对于第二个范围,我们需要找到年龄≥15的18岁.因此,第二个范围是18-23,依此类推.如果有自动计算范围并计算该范围内的数据,我将不胜感激.

最佳答案您可以使用SUM()语句中的条件来获取该条件所在的计数.我会计算年龄是BETWEEN()必要范围的条件.试试这个:

SELECT   SUM(age BETWEEN 10 AND 15) AS '10-15',SUM(age BETWEEN 18 AND 23) AS '18-23',SUM(age BETWEEN 26 AND 31) AS '26-31',SUM(age BETWEEN 34 AND 39) AS '34-39'FROM mytable;

这只会返回一行,但它会包含您需要的所有内容.这是一个SQL Fiddle的例子.

编辑我误解了你的问题,以自动计算各种范围.我将在此留下我之前的答案,因为它可能对寻找硬编码范围的未来读者有益.为此,您必须设置变量.我做了一种运行总类型的方法来获得组.我开始在查询之前将@a设置为0.然后,我需要获得两个值:

>年龄>表的最小年龄@一个
> 5大于该变量.

我通过在必要时更改@a的值来做到这一点:

> @a:=(SELECT MIN(年龄)FROM mytable WHERE年龄> = @a)
> @a:= @a 5

然后,我将它们包含在一个CONCAT()块中,并将这些值作为字符转换,以获得我需要的组.它可能看起来很复杂,所以我希望我解释了这个概念:

SELECT CONCAT   (CAST(@a := (SELECT MIN(age) FROM mytable WHERE age > @a) AS CHAR),' - ',CAST((@a := @a + 5) AS CHAR)) AS ageRangeFROM mytableWHERE @a <= (SELECT MAX(age) FROM mytable);

这样做给了我四行,每行都有你期望的年龄范围.我不得不添加where子句,否则我会为表中的每一行得到一个结果行,这会给我们几个空行.

最后,我添加了一个子查询,以获得年龄在必要范围内的学生的数量.注意,第一部分改变了@a的值,所以不是从@a检查到@a 5,而是从@ a-5检查到@a.这是最后的查询:

SET @a = 0;SELECT CONCAT(CAST(@a := (SELECT MIN(age) FROM mytable WHERE age > @a) AS CHAR),CAST((@a := @a + 5) AS CHAR)) AS ageRange,(SELECT COUNT(*) FROM mytable WHERE age BETWEEN @a - 5 AND @a) AS numStudentsFROM mytableWHERE @a <= (SELECT MAX(age) FROM mytable)GROUP BY ageRange;

它在SQL Fiddle工作得很漂亮.完全动态并返回5个不同的组,而不知道要采取哪些组. 总结

以上是内存溢出为你收集整理的php – 显示数据库表中的动态范围并计算每个范围内的行数全部内容,希望文章能够帮你解决php – 显示数据库表中的动态范围并计算每个范围内的行数所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1166421.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存