2

私のテーブルには、、、が含まれてpk_idreviewer_idますrating。評価は4種類。

1-very good.
2-good.
3-bad.
4-very bad.

各レビュアーの評価を計算したい。意味: ID 200 の Akee が別のコードに 2 つの非常に良い、4 つの良い、3 つの悪い、非常に悪い 0 の評価を与えた場合。

結果が欲しい

  count--- rate

   2---------1

   4---------2

   3---------3

   0---------4

私のクエリは

SELECT COUNT(RATE),RATE
  FROM CODE_REVIEW WHERE CODE_REVIEWER_ID= 200
 GROUP BY RATE;

結果表示中です

  count--- rate

   2---------1

   4---------2

   3---------3

4 評価ゼロの 4 行目を表示したいと思います。それはどのように行うことができますか??

4

6 に答える 6

1

Rate が別のテーブルの主キーでない場合は、MySQL が順列が何であるかを認識できるように、独自の料金リストを定義する必要がありますrate

SELECT  Rates.Rate,
        COUNT(Code_Review.Rate) AS CountOfRate
FROM    (   SELECT 1 AS Rate UNION ALL
            SELECT 2 AS Rate UNION ALL
            SELECT 3 AS Rate UNION ALL
            SELECT 4
        ) AS Rates
        LEFT JOIN Code_Review
            ON Code_Review.Rate = Rates.Rate
            AND CODE_REVIEWER_ID = 200
GROUP BY Rates.Rate
于 2012-07-04T07:45:03.393 に答える
0

あなたはこのようなことをすることができます

SELECT
            rates.RATE
            , SUM(COUNT) COUNT
   FROM
           (
           SELECT 1 RATE, 0 COUNT UNION ALL
           SELECT 2 RATE, 0 COUNT UNION ALL
           SELECT 3 RATE, 0 COUNT UNION ALL
           SELECT 4 RATE, 0 COUNT
           ) Rates
       LEFT JOIN
           (
               SELECT
                         RATE
                       , COUNT(RATE) COUNT 
                   FROM
                       CODE_REVIEW 
                   WHERE
                       CODE_REVIEWER_ID= 200
                   GROUP BY RATE
           ) Ratings200
           ON Ratings200.RATE = Rates.RATE
于 2012-07-04T07:45:05.463 に答える
0

このクエリを試してください:

SELECT coalesce(c.cnt, 0), r.rate
  FROM (SELECT 1 AS rate UNION ALL SELECT 2
        UNION ALL SELECT 3 UNION ALL SELECT 4) AS r
  LEFT JOIN (SELECT COUNT(RATE),RATE
          FROM CODE_REVIEW WHERE CODE_REVIEWER_ID= 200
         GROUP BY RATE) AS c
    ON r.rate = c.rate;
  1. 最初のサブクエリは、可能なレートのリストを作成します。すべてのレートを定義するテーブルがある場合は、これを回避できます。
  2. 2 番目のサブクエリはあなたのものです。
  3. LEFT JOINすべての料金が表示されることを保証します。
  4. coalesce()NULLを 0に変換する必要があります。
于 2012-07-04T07:46:10.813 に答える
0

Assuming that you do not have a separate table where the rates are defined.

SElECT * from (
  SELECT distinct(m.rate), countrate from code_review m 
  LEFT JOIN
  (SELECT COUNT(rate) as countrate,rate FROM code_review 
     WHERE code_reviewer_id=200 GROUP BY rate) t 
  ON m.rate=t.rate) a
于 2012-07-04T07:41:56.323 に答える
0

可能であれば、次のように簡単なので、プッシュして列形式で取得する必要があります。

SELECT
    SUM(rate = 1) AS 1,
    SUM(rate = 2) AS 2,
    SUM(rate = 3) AS 3,
    SUM(rate = 4) AS 4
FROM
    code_review
WHERE
    code_reviewer_id = 200

しかし、行フォーマットが本当に必要な場合は、次のようにすることができます。

SELECT
    a.rate,
    COUNT(b.rate) AS cnt
FROM
    (
        SELECT 1 AS rate UNION ALL
        SELECT 2 AS rate UNION ALL
        SELECT 3 AS rate UNION ALL
        SELECT 4 AS rate
    ) a
LEFT JOIN
    code_review b ON a.rate = b.rate AND code_reviewer_id = 200
GROUP BY
    a.rate
于 2012-07-04T07:42:23.550 に答える
0
SELECT 
    Rate,
    totCount
FROM 
(
    Select
        Rate,
        count(Rate) as totCount
    from
        Code_Review 
    where 
        CODE_REVIEWER_ID  = 200  
    group by 
        Rate
    union
    select  4, 0  
    union
    select  3, 0  
    union
    select  2, 0  
    union
    select  1, 0 
) AS T 
group by  
    T.Rate
于 2012-07-06T05:28:47.483 に答える