MySQL 相同用户不同的金额 如果在一个区间中 统计为一次应该怎么写?

2019-02-19 18:09:00 +08:00
 771456556

假设这是示例表

统计 money 范围在 1-2 的人

那么

[王] 应该是 1

[李] 应该是 1

[马] 应该是 0

就是说只要在范围内,不管出现几次,都统计为一次。

3689 次点击
所在节点    MySQL
12 条回复
liprais
2019-02-19 18:11:01 +08:00
把 money 弄成区间不就行了
case when money > 1 and money < 2 then 'a' 这样
771456556
2019-02-19 18:44:57 +08:00
@liprais 现在的需求比这个复杂,不定区间查询(可能会有十几个区间查询),最后还要汇总数据,我想着发个帖子,看有没有人实现一下,然后我根据他的代码再改改。
Mistwave
2019-02-19 18:56:50 +08:00
可以用 sgn

-- MySQL
SELECT user, sign(count(*))
FROM your_table
WHERE money >= 1 AND money <= 2
GROUP BY user
771456556
2019-02-19 20:29:32 +08:00
@Mistwave #3 谢谢您,明天我上班试试
TommyLemon
2019-02-20 10:34:47 +08:00
你的表述有问题。按照下方的示例,应该是根据用户名(user)来分组。
SELECT count(*) FROM 表名 WHERE money BETWEEN 1 AND 2 GROUP BY user
TommyLemon
2019-02-20 10:55:23 +08:00
@TommyLemon
看错你的意思了,#3 楼方法测试可行。还可以
SELECT user,EXISTS(SELECT 1 FROM 表名 AS U2 WHERE U2.user=U1.userAND sex=1) FROM 表名 AS U1 GROUP BY user
TommyLemon
2019-02-20 10:56:16 +08:00
@TommyLemon
SELECT user,EXISTS(SELECT 1 FROM 表名 AS U2 WHERE U2.user=U1.user AND money BETWEEN 1 AND 2) FROM 表名 AS U1 GROUP BY user
771456556
2019-02-20 11:03:47 +08:00
@TommyLemon #5 谢谢谢谢,是我的问题,mysql 不够熟练。把事情想复杂了
771456556
2019-02-20 11:08:45 +08:00
@TommyLemon #5 您第一个方法也可以,

select
count(*) as total
from
( SELECT * FROM `u`
WHERE money BETWEEN 3 AND 5 GROUP BY user) a


这样直接可以计算出符合区间内所有人的总数量。
3#的方法也不错。
771456556
2019-02-20 11:15:43 +08:00
@771456556

select
count(*) as total
from
( SELECT * FROM 表名
WHERE money BETWEEN 1 AND 2 GROUP BY user) a
771456556
2019-02-20 15:48:46 +08:00
解决了,其实本质就是去重。。。当时想歪了,可以直接筛选出在范围内的人,然后用 group by 或者 count DISTINCT 来去重。
Chenamy2017
2019-02-20 16:55:15 +08:00
group

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/536648

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX