0

对于我网站上的页面,我需要获取所有不同用户名的列表,按已删除推文的百分比降序排列。对于deleted1 列,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
);

编辑:附加说明:我需要按百分比排序的用户名列表,以及每个用户的百分比。百分比计算为用户删除的推文/该用户的推文总数,而不是用户删除的推文/所有用户的推文总数。

4

1 回答 1

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子句中。

最后,如果您希望将其表示为带有百分号的百分比,那么您需要将数字转换为字符串并附加一个'%'.

于 2013-07-22T00:37:21.547 回答