sql - TSQL,帮助进行有关用户年龄的小查询

标签 sql sql-server t-sql

我有一个包含注册用户的表,其中我将年份保存为 varchar 值,只是因为我只用了一年。我想创建包含年龄的饼图,以显示哪些用户更有可能注册。

下面的查询给出了在表中出现超过 5 次的用户年龄的计数,以避免结果过小。虽然这些小结果低于“having ount(userID)>5”,但我想显示为其他人。我应该添加什么到这个查询或者可能重新设计它。我可以创建愚蠢的解决方案,例如获取初始查询中出现的所有年份,然后选择除这些年份之外的所有年份,但必须有更好、更有创意的方式来编写此查询。

所以结果会是这样的 1990年1月10日 2 4 1980 3 10 其他

select count(userID) ageCount,userBirthYear from Users
group by userBirthYear
having count(userID)>5
order by count(userID) desc

谢谢

最佳答案

这是一个重新分组解决方案(无联合)以避免重复 IO。

基本思想是您希望每条记录都对结果做出贡献,因此不应有 WHERE 或 HAVING 子句。

SELECT
  SUM(sub.ageCount) as ageCount,
  sub.userBirthYear
FROM
(
  SELECT Count(userId) ageCount,
    CASE WHEN COUNT(userID) > 5)
         THEN userBirthYear
         ELSE 'Other'
    END as userBirthYear
  FROM Users
  GROUP BY userBirthYear
) as sub
GROUP BY sub.userBirthYear

关于sql - TSQL,帮助进行有关用户年龄的小查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3101653/

相关文章:

sql查询以查找所有行的总和和重复数

sql - 何时在sql server中使用Money数据或Decimal数据类型来存储成本值?

arrays - 如何使用服务器 2016 中的新 tsql json 获取结果中的 json 数组值?

xml - 如何使用 XQuery/T-SQL 解析包含嵌套默认命名空间的客户 xml

sql - GROUP BY ROLLUP 生成不必要的行

SQL Server : running every sql script in a directory

MySQL:如果另一列在联结表中有两个确定的值,则从一列中选择不同的值

sql - 如何在 Oracle SQL Developer 中指定 Java Home/JDK?

sql - 创建表 : "There is already an object named ... in the database", 但未创建具有该名称的对象时出错

sql - SQL中如何查看删除一张表后会影响多少个存储过程