MySql查询根据范围计算和分配常量

时间:2014-03-03 14:27:10

标签: mysql

有一张桌子

MEMBERS:
id - 会员ID,
dt_activate - 成员加入unix日期时间,
id_inviter - 邀请当前成员的成员ID(如果成员自己加入,则为0)

尝试编写一个Select,返回以下多行结果,其中每行包含:
(1)id - 会员ID;
(2)cnt - MEMBERS表中的行数,其中“id”出现在id_inviter字段中,同时dt_activate应该在常量dt_start和dt_end之间;
(3)img - “imageA.gif”如果cnt在10-19之间,“imageB.gif”如果在20-29之间,“imageC.gif”如果大于29;
(4)奖励 - 如果cnt在10-19之间则为常数X,如果在20-29之间为Y,如果大于29则为Z

不幸的是,我的知识并没有让我超越简单的选择:

SELECT id_inviter, sum(1) AS cnt
FROM members
WHERE dt_activate>=$dt_start AND dt_activate<=$dt_end
GROUP BY id_inviter
HAVING cnt>=10

MEMBERS表的估计记录数可能在10-50k之间。

请帮助实现上述结果,谢谢。

1 个答案:

答案 0 :(得分:0)

试试这个:

SELECT id_inviter, count (*) AS cnt, 
case when count (*) <20 then 'imageA.gif' 
when count (*) <30THEN 'imageB.gif' else 'imageC.gif' end as image, 
case  when count (*) <20 then 'X' 
when count (*) <30 THEN 'Y' else 'Z' end as reward
FROM members
WHERE dt_activate>=$dt_start AND dt_activate<=$dt_end
GROUP BY id_inviter
HAVING cnt>=10