加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

php – 表现数据库表中的动态范畴并计较每个范畴内的行数

发布时间:2021-03-06 01:52:45 所属栏目:编程 来源:网络整理
导读:我有这样的数据库表: 我想表现差异的5岁年数段以及该范畴内的门生人数,如下所示: 在这里,最低年数是10岁,以是我们起首计较10-15的范畴.该范畴内有5名门生.对付第二个范畴,我们必要找到年数≥15的18岁.因此,第二个范畴是18-23,依此类推.假若有自动计较范畴

我有这样的数据库表:

我想表现差异的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 ageRange
FROM myTable
WHERE @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 numStudents
FROM myTable
WHERE @a <= (SELECT MAX(age) FROM myTable)
GROUP BY ageRange;

它在SQL Fiddle事变得很大度.完全动态并返回5个差异的组,而不知道要采纳哪些组.

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读