我需要找到10岁年龄范围内的最常见事件,这些年龄范围可以是年龄2至22岁,15至25岁,10至20岁等,其中name
& age
找到一个年龄跨度的平均年龄范围
我创建了返回的平均年龄在SQL:
SELECT age, count(age)
FROM member
GROUP BY age
ORDER BY COUNT(age) DESC
LIMIT 1
感谢您的帮助!
我需要找到10岁年龄范围内的最常见事件,这些年龄范围可以是年龄2至22岁,15至25岁,10至20岁等,其中name
& age
找到一个年龄跨度的平均年龄范围
我创建了返回的平均年龄在SQL:
SELECT age, count(age)
FROM member
GROUP BY age
ORDER BY COUNT(age) DESC
LIMIT 1
感谢您的帮助!
创建一个表ages
举行的年龄范围,你有兴趣与age_lower
,age_upper
场和显示名称age_range
如“2至22”
加入表与放一个WHERE
条款年龄在下限和上限之间。
SELECT `age_range`, COUNT(`age`) AS age_count
FROM `member` INNER JOIN `ages`
ON age BETWEEN age_lower AND age_upper
GROUP BY age_range
ORDER BY COUNT(`age`) DESC, `age_range` ASC
我会试试这个谢谢! – user3014571
@ user3014571 - 我更正了SQL,它有语法错误,并添加了一个示例SQL小提琴。 – Tony
不幸的是,这仍然使用该方案中定义的预定年龄范围。 1-10,11-20等我需要它来生成这些范围。年龄2至22岁,15至25岁,10至20岁等。 – user3014571
这可能会解决这个问题。我添加的唯一东西是一张表,其值为1..x,其中x是您的存储桶数量。 @T可以很容易地替换为你的MySQL表名。每个年龄的结果都是可能的年龄数据。然后统计多少个相等的集合。
--IGNORE BUILDING TEST DATA IN SQL SERVER
DECLARE @T TABLE(member INT,age INT)
DECLARE @X INT
SET @X=1
WHILE(@X<=100) BEGIN
INSERT INTO @T SELECT @X, CAST(RAND() * 100 AS INT)
SET @[email protected]+1
END
DECLARE @MinAge INT=1
DECLARE @MaxAge INT=100
--YOUR SET TABLE. TO MAKE LIFE EASY YOU NEED A TABLE OF 1..X
DECLARE @SET TABLE (Value INT)
DECLARE @SET_COUNT INT =10
DECLARE @LOOP INT=1
WHILE(@LOOP<[email protected]_COUNT) BEGIN
INSERT @SET SELECT @LOOP
SET @[email protected]+1
END
SELECT
MinAge,
MaxAge,
SetCount=COUNT(CountFlag)
FROM
(
SELECT
MinAge=AgeMinusSetCount,
MaxAge=AgePlusSetCount,
CountFlag=1
FROM
(
SELECT DISTINCT
ThisAge,
AgeMinusSetCount=(AgeMinusSetCount-1) + Value,
AgePlusSetCount=CASE WHEN (AgeMinusSetCount-1) + Value + @SET_COUNT > @MaxAge THEN @MaxAge ELSE (AgeMinusSetCount-1) + Value + @SET_COUNT END
FROM
(
SELECT
ThisAge=age,
AgeMinusSetCount=CASE WHEN (age - @SET_COUNT) < @MinAge THEN @MinAge ELSE (age) - @SET_COUNT END
FROM
@T
)RANGES
LEFT OUTER JOIN (SELECT Value FROM @SET) AS FanLeft ON 1=1
)AS DETAIL
)AS Summary
GROUP BY
MinAge,
MaxAge
ORDER BY
COUNT(CountFlag) DESC
我不相信你可以用一个SQL调用来做到这一点。您可能想要对存储过程和Transact SQL进行一些研究(取决于您使用的服务器) –
添加您的表并显示一些示例数据 – e4c5
@PaulColdrey - Transact SQL不会很有用,因为它们已标记问题'mysql' – Tony