0

can beのようなremarks列を持つテーブルがありますが、サブクエリがない場合 にクエリが次の列を返すようにします。id, story_id, like+1-1
selectstory_id, total, n_like, n_disliketotal = n_like + n_dislike

私は現在、次のような出力を私に与えているgroup byオンlikeselecting を行っていますlike as like_t, count(like) as total

-- like_t --+ --- total --
    -1      |      2
     1      |      6

結果セットに2行を返します。しかし、私が欲しいのは、n_dislikeがどこにあるかという1行を取得することです。n_like is 62total8

4

1 に答える 1

1

まず、LIKEPostgreSQL の予約語なので、二重引用符で囲む必要があります。この列には、より適切な名前を選択する必要があるかもしれません。

CREATE TABLE testbed (id int4, story_id int4, "like" int2);
INSERT INTO testbed VALUES
    (1,1,'+1'),(1,1,'+1'),(1,1,'+1'),
    (1,1,'+1'),(1,1,'+1'),(1,1,'+1'),
    (1,1,'-1'),(1,1,'-1');

SELECT
    story_id,
    sum(CASE WHEN "like" > 0 THEN abs("like") ELSE 0 END) AS n_like,
    sum(CASE WHEN "like" < 0 THEN abs("like") ELSE 0 END) AS n_dislike,
    count(story_id) AS total
    -- for cases +2 / -3 in the "like" field, use following construct instead
    -- sum(abs("like")) AS total
  FROM testbed
 GROUP BY story_id;

私はあなたがあなたの列にまたはをabs("like")持っている場合に使用しました。+2-3"like"

于 2012-04-18T06:58:05.033 に答える