假设这是示例表
统计 money 范围在 1-2 的人
那么
[王] 应该是 1
[李] 应该是 1
[马] 应该是 0
就是说只要在范围内,不管出现几次,都统计为一次。
1
liprais 2019-02-19 18:11:01 +08:00 1
把 money 弄成区间不就行了
case when money > 1 and money < 2 then 'a' 这样 |
2
771456556 OP @liprais 现在的需求比这个复杂,不定区间查询(可能会有十几个区间查询),最后还要汇总数据,我想着发个帖子,看有没有人实现一下,然后我根据他的代码再改改。
|
3
Mistwave 2019-02-19 18:56:50 +08:00 via iPhone 1
可以用 sgn
-- MySQL SELECT user, sign(count(*)) FROM your_table WHERE money >= 1 AND money <= 2 GROUP BY user |
5
TommyLemon 2019-02-20 10:34:47 +08:00 1
你的表述有问题。按照下方的示例,应该是根据用户名(user)来分组。
SELECT count(*) FROM 表名 WHERE money BETWEEN 1 AND 2 GROUP BY user |
6
TommyLemon 2019-02-20 10:55:23 +08:00 1
@TommyLemon
看错你的意思了,#3 楼方法测试可行。还可以 SELECT user,EXISTS(SELECT 1 FROM 表名 AS U2 WHERE U2.user=U1.userAND sex=1) FROM 表名 AS U1 GROUP BY user |
7
TommyLemon 2019-02-20 10:56:16 +08:00 1
@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 |
8
771456556 OP @TommyLemon #5 谢谢谢谢,是我的问题,mysql 不够熟练。把事情想复杂了
|
9
771456556 OP @TommyLemon #5 您第一个方法也可以,
select count(*) as total from ( SELECT * FROM `u` WHERE money BETWEEN 3 AND 5 GROUP BY user) a 这样直接可以计算出符合区间内所有人的总数量。 3#的方法也不错。 |
10
771456556 OP @771456556
select count(*) as total from ( SELECT * FROM 表名 WHERE money BETWEEN 1 AND 2 GROUP BY user) a |
11
771456556 OP 解决了,其实本质就是去重。。。当时想歪了,可以直接筛选出在范围内的人,然后用 group by 或者 count DISTINCT 来去重。
|
12
Chenamy2017 2019-02-20 16:55:15 +08:00
group
|