我有一个表purchases
,其中包含user_id
和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
....
我知道它看起来不会完全像这样,但是我需要让这些项目范围内的人数增加。
答案 0 :(得分:1)
很难确定没有任何示例数据可以使用,但是我认为您想要的是这样的东西。它将您的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