0

私は2つのテーブルを持っていCompanyますCompanyLike

CompanyLike

  1. Id
  2. RatingStar
  3. カウント
  4. Companyid

CompanyとCompanyLikeには1 to Many関係があります。1つの会社が多くのいいねを持つことができます

テーブルのような会社はこのようになります

+----------------------------+
| ID  RatingStar   Companyid |
+----------------------------+
| 1      5           5636    |
| 2      5           5636    |
| 3      1           101     |
| 4      2            959    |
+----------------------------+

5今、私は、RatingStarが何回であるか、そして2すべてのCompanyidに対して何回評価スターであるかをカウントしたいと思います。

私の現在の仕事は

 SELECT RatingStar AS RatingStar,com.id AS Companyid , c.Id AS Id ,
        com.Name AS CompanyName, Count(RatingStar) AS ratingCount
   FROM CompanyReviewLike AS c
   INNER JOIN Company AS com ON com.id = c.Companyid
   GROUP BY RatingStar ,com.Name , com.id ,c.Id
4

3 に答える 3

1

c.idクエリから削除したいだけだと思います。

select RatingStar as RatingStar,com.id as Companyid  ,com.Name as  
         CompanyName ,  

 Count(RatingStar) as Count,MIN(c.ID) as Id
     from CompanyReviewLike as c
   inner join Company as com on com.id = c.Companyid
 Group By 
 RatingStar ,com.Name , com.id

行ごとに異なるためc.id、グループ化に含めると、すべてのグループに含まれる行は1つだけになります。結果に1つの 値を含める場合はid、適切な集計(MINまたはMAX頭に浮かぶ)を選択して、グループから1つを選択します。


フィドル。結果:

RATINGSTAR  COMPANYID   COMPANYNAME COUNT
1           101         CompanyB    1
2           959         CompanyC    1
5           5636        CompanyA    2
于 2013-02-13T08:17:35.853 に答える
1

星5と2のカウントのみを気にする場合は、これを確認してください

SELECT COM.Name AS CompanyName, C.RatingStar AS RatingStar, COUNT(*) AS RatingCount
FROM CompanyLike AS C
INNER JOIN Company AS COM ON COM.id = C.Companyid
GROUP BY C.RatingStar ,COM.Name 
HAVING C.RatingStar IN (5,2)

この最新のものをチェックしてください

SELECT C.id,COM.Name AS CompanyName, C.RatingStar AS RatingStar, COM.RatingCount AS RatingCount
    FROM CompanyLike C
    INNER JOIN ( SELECT COM.Name AS CompanyName,C.CompanyId, C.RatingStar AS RatingStar, COUNT(*) AS RatingCount
                FROM CompanyLike AS C
                INNER JOIN Company AS COM ON COM.id = C.Companyid
                GROUP BY C.RatingStar ,COM.Name ,C.CompanyId
                HAVING C.RatingStar IN (5,2)) COM
    ON C.RatingStar = Com.RatingStar AND C.CompanyId = COM.id
于 2013-02-13T08:50:26.510 に答える
0

データをピボットする必要があります。あなたのテーブルは次のようになります。

create table compa ( id int, name varchar(10) );
create table likes (idComp int, rating int);
create table rates ( id int);

次に、クエリは次のとおりです。

select * 
from (
    select r.id as rate, 
         c.id as comp,
         l.idComp as n
  from compa c
  cross join rates r
  left join likes l
     on l.rating = r.id
        and c.id = l.idComp
) as src
PIVOT
(
count( n )
FOR rate IN ( [1], [2], [3], [4], [5] )
) as pvt ;

そして結果

| COMP | 1 | 2 | 3 | 4 | 5 |
----------------------------
|    1 | 3 | 1 | 0 | 0 | 1 |
|    2 | 0 | 3 | 0 | 0 | 0 |

説明

レートの生データを取得するには、テーブル間の内部クエリ結合結果を選択します。ピボット句はデータをカウントし、行データを列に移動して、会社ごとに列のみを取得します。

通知レートは、会社からすべてのレートを取得するためにクロスジョインします。また、レートなしの会社を取得するために左ジョインします。

楽しみ。

于 2013-02-13T08:26:40.940 に答える