对于我网站上的页面,我需要获取所有不同用户名的列表,这些用户名按已删除推文的百分比递减。对于列删除1 1表示已删除的推文,0表示未删除(推文存在),2表示未知。所以我知道这是GROUP BY的复杂查询...我可以使用帮助。
这是表格:
CREATE TABLE twitt_tb (
link TEXT PRIMARY KEY NOT NULL,
username TEXT NOT NULL,
content TEXT NOT NULL,
datum INTEGER NOT NULL,
avatar TEXT NOT NULL,
nik TEXT NOT NULL,
deleted1 INTEGER CHECK (deleted1 IN (0, 1, 2)) NOT NULL
);
编辑:补充说明:我需要按百分比排序的用户名列表,以及每个用户的百分比。百分比计算为用户删除的推文/该用户的推文总数,而不是用户删除的推文/全部用户推文。
答案 0 :(得分:1)
以下为用户提供已删除推文的比例 - 已知用户的所有推文。
select username,
(sum(case when delete1 = 1 then 1.0 else 0.0 end) /
sum(case when delete1 in (0, 1) then 1.0 else 0.0 end)
) as pdeleted
from twitt_tb t
group by username
order by pdeleted desc;
如果您想为用户添加所有推文,可以将其表述为:
(sum(case when delete1 = 1 then 1.0 else 0.0 end) /
count(*)
) as pdeleted
或更简单地说:
avg(case when delete1 = 1 then 1.0 else 0.0 end) as pdeleted
这包括输出中的比例。如果您只想要没有比例的用户名,则将公式放在order by
子句而不是select
子句中。
最后,如果您希望将其表示为带百分号的百分比,则需要将数字转换为字符串并附加'%'
。