当前位置: 首页 > 面试题库 >

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

宋子辰
2023-03-14
问题内容

在这里,最低年龄是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。然后,我需要获取两个值:

  • 表中的最小年龄,其中年龄> @a
  • 比该变量大5。

我通过根据需要更改@a的值来做到这一点:

  • @a:=(从年龄> = @a的myTable中选择最小(年龄)
  • @a:= @a + 5

然后,我将它们包含在一个CONCAT()块中,并将这些值转换为char类型,以获取所需的组。它可能看起来很复杂,所以我希望我能解释一下这个概念:

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个不同的组,而无需事先了解要使用哪个组。



 类似资料:
  • 我参加了一个编程比赛,我无法解决问题,问题是: 给定一个n个整数的数组A,我需要计算给定范围内求逆的次数。提供一个整数m,它表示范围的数量,然后是m行,在每一行中给出两个整数li和ri。 我们必须只计算指定范围内的反转,即从li到ri(包括0)的反转(基于0的索引)。 如果 A[i] 两个元素 A[i] 和 A[j] 添加到反演中 反转是: 输入: 输出: 约束: 我知道在整个数组上计算O(nlo

  • 我的方法是生成所有素数直到(埃拉托色尼筛),并检查给定范围内的每个数是否可被素数的平方整除。这些数字的计数从范围的长度中减去,以给出平方自由数。 但是这种方法在复杂度上超时了,请建议一些其他的方法

  • 问题内容: 我有一个NumPy值数组。我想计算在特定范围内有多少这些值,例如x <100和x> 25。我已经读过有关计数器的信息,但它似乎仅对指定值有效,对值范围无效。我已经搜索过,但是没有发现有关我的特定问题的任何信息。如果有人可以指出适当的文档,我将不胜感激。谢谢 我已经试过了 但这只是给我25到99之间的数字。 编辑 我正在使用的数据是由另一个程序创建的。然后,我使用脚本读取数据并将其存储为

  • 假设您有一个间隔列表,例如[(0 4),(1 3),(2 5),(2 6)]。此列表未排序。然后给您一个范围,如[1 5]。您必须返回适合范围内的间隔数。在这个问题中,它将返回2。((1 3)和(2 5)) 间隔列表保持不变,但我们最多得到100000个查询,每个查询由一个范围组成。对于每个范围查询,我们必须返回适合其中的间隔数。 在研究之后,我读到了间隔树。但是,您只能查询与任何给定范围重叠的间

  • 问题内容: 我正在制作一个要使用范围滑块的网站(我知道它仅支持Webkit浏览器)。 我已经将其完全集成并且可以正常工作。但我想使用a 来显示当前的幻灯片值。 我的意思是,如果最初滑块的值为5,那么在文本框中它应显示为5,当我滑动文本框时,其值应更改。 我可以仅使用还是使用。我想避免。可能吗? 问题答案: 这使用javascript,而不直接使用jquery。它可能有助于您入门。

  • 问题内容: 我有一个从或指令属性或任何其他属性中获得的字符串,我想基于此在作用域上创建一个变量。所以: 但是,如果字符串包含一个或多个点,我想将其拆分并实际上“向下钻取”到作用域中。所以应该成为。这意味着简单版本不起作用! 在读取基于字符串的变量时,您可以通过做来获得这种行为,但是在分配值时如何实现呢? 问题答案: 我发现的解决方案是使用$ parse。 “将Angular表达式转换为函数。” 如