有一个表
成员:
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 - 如果cnt在10-19之间,则为"imageA.gif",如果介于20-29之间,则为"imageB.gif",如果大于29,则为"imageC.gif";
(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 之间。
请帮助实现上述结果,谢谢。
试试这个:
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