mysql - 有数量范围的计数和总和
问题描述
我有一个purchases
包含user_id
and的表items_amount
。
每次客户购买东西时,都会有他的id和物品数量的新记录。
现在我需要查看有多少人购买了 1000+ 件商品,有多少人购买了 1000-900 件商品等等。
我现在有点迷失了分组,计数和总结。
它实际上计算了用户,但向我显示了一些(随机?)数量作为总和,所以我不完全了解有多少人买了什么。有什么办法可以做得更好吗?我的查询错了吗?这让我很困惑
SELECT count(*), sum(items_amount) as amount
FROM `purchases`
WHERE 1
GROUP BY user_id
HAVING amount >= 1000
OR amount BETWEEN 1000 AND 900
OR amount BETWEEN 900 AND 800
OR amount BETWEEN 800 AND 700
OR amount BETWEEN 700 AND 600
OR amount BETWEEN 600 AND 500
OR amount BETWEEN 500 AND 400
OR amount BETWEEN 400 AND 300
OR amount BETWEEN 300 AND 200
OR amount BETWEEN 200 AND 100
OR amount BETWEEN 100 AND 1
输出现在看起来像这样,但这个数量是我不明白的:
COUNT(*) AMOUNT
125 94969
4 2267
69 1352
148 2123
667 13695
433 1099
629 1482
697 1228
303 1633
415 1719
我想看到的或多或少是:
count(*) amount
125 1000+
4 1000-900
69 900-800
148 800-700
667 700-600
433 600-500
....
我知道它看起来不会完全像这样,但我需要在这些项目范围内获得大量人员。
解决方案
如果没有任何样本数据可以工作,很难确定,但我认为你想要的是这样的东西。它需要你的总和,然后按范围对它进行items_amounts
分组:user_id
amount
SELECT
CASE WHEN amount >= 1000 THEN '>=1000'
ELSE CONCAT('BETWEEN ', (amount DIV 100) * 100, ' AND ', (amount DIV 100) * 100 + 99)
END AS amt,
COUNT(p.user_id) AS num_users
FROM (SELECT SUM(items_amount) AS amount
FROM `purchases`
WHERE 1
GROUP BY user_id) p
GROUP BY amt
推荐阅读
- node.js - 在 setup() 中有返回值的 Joi 验证器扩展不调用 validate()
- html - 使用带有嵌套文本的 HTML标记来呈现图标
- oracle - 我可以使用“where”插入一个值吗
- c# - 将线程限制到数据库的最佳方法,同时允许更大的最大线程
- c++ - 计日和星期几(C++)
- asp.net-core - 创建基于路由参数的 ASP.Net Core IAuthorizationRequirement
- javascript - 使用 Mongoose 更新包含唯一值的对象数组
- c - OpenGL 使用 DSA(直接状态访问)渲染到立方体贴图
- javascript - 为什么这个重定向/函数返回 if 语句不起作用?
- html - 如何创建