1

私はレストランの評価とレビューのデータベースを持っており、各レストランには 1 から約 1000 のレビューがあります。

最初に、コメントに「タコ」という単語が含まれている、評価が最も高い 4 つ以上のレビューを持つレストランを見つけようとしました。以下のコードで動作するようになりました。

    select id, count(id) from test where (comment like '%taco%') AND rating >= 3 group by id order by count(id) DESC;

たとえば、レストラン X に「タコス」を含む 4 以上の評価のレビューが 30 件ある場合、その行には「X|30」と表示されます。

次の 2 つの機能を追加したいと考えています。

  1. 各レストランのレビューの総数をリストします (無条件)。
  2. 「タコス」を含むすべてのレストランのレビューの平均評価を入力してください。

レストラン X に合計 150 件のレビューがあり、そのうち 30 件が「タコ」を含む 4+ 評価で、これら 30 件のレビューの平均評価が 2.5 である場合、次のようになります。

'X|30|150|2.5|'

この結果を得るにはどうすればよいですか?

4

4 に答える 4

6

このようなものがうまくいくかもしれません。

select id
, count(*) totalreviews
, sum(case when rating >= 3 and comment like '%taco%' then 1 else 0 end) ratings4plus
, avg(case when rating >= 3 and comment like '%taco%' then rating else null end) avgratings4plus
from test
group by id
于 2013-03-11T19:50:50.950 に答える
2

これはテストされていませんが、次のようなものを試すことができます

select id,
       count(id), 
       sum(case when (comment like '%taco%' and rating >=3) then 1 
                else 0 end) taco_rating, 
       avg(case when comment like '%taco%' then rating else null end ) avg_taco
  from test
 group by id
于 2013-03-11T19:52:06.783 に答える
1

の場合4+、テストはでrating > 3はなく行う必要がありますrating >= 3が、これで次のようになります。

select
    id,
    sum(case when comment like '%taco%'
            AND rating > 3 then 1 else 0 end) as rating4plus_count,
    count(*) as all_ratings_count,
    avg(case when comment like '%taco%'
            AND rating > 3 then rating else null end) as rating4plus_avg
from test
group by id
order by 1 DESC;

省略形order by 1に注意してください。これは、「列番号1」による順序付けのSQL標準の方法です(順序付け句で列1の式を繰り返す代わりに)。

于 2013-03-11T19:55:26.553 に答える
1

サブクエリを使用します。

SELECT id,
       (SELECT COUNT(*)
        FROM test
        WHERE id = t1.id
          AND comment LIKE '%taco%'
          AND rating >= 3),
       (SELECT COUNT(*)
        FROM test
        WHERE id = t1.id),
       (SELECT AVG(rating)
        FROM test
        WHERE id = t1.id
          AND comment LIKE '%taco%'
          AND rating >= 3),
FROM (SELECT DISTINCT id
      FROM test) AS t1
于 2013-03-11T19:50:46.983 に答える