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 に答える