有一张桌子
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之间。
请帮助实现上述结果,谢谢。
答案 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