为什么即使我已经按列分组,我仍然收到相同的列值? [SQLite]

Why did I keep receiving the same value for columns even though i already group by it? [SQLite]

这是我在 Whosebug 中的第一个问题。希望有人能提供帮助。

为什么我一直在 'Total Love Review' 和 'Total Hate Review' 上收到相同的值,即使我按 is_open 分组?

这是我的桌子

商业

id name is_open stars
1 Business A 1 5
2 Business B 0 3.8
3 Business C 1 5
4 Business D 1 4
5 Business E 0 3.2

回顾

reviewId business_id text
1 1 Love review
2 1 Love review
3 1 Love review
4 2 Hate review
5 3 Love review
6 3 Love review
7 4 Love review
8 5 Love review

这是查询

select business.is_open
    ,(select count (review.text)
    from review
    where review.text like '%love%') as 'Total Love Review'
    ,(select count (review.text)
    from review
    where review.text like '%hate%') as 'Total Hate Review'
,avg(business.stars) as 'Avg Stars'
from business
left join review on business.id = review.business_id
group by is_open

这是结果

is_open Total Love Review Total Hate Review Avg Stars
0 7 1 3.5000
1 7 1 4.8333

预期结果:

is_open Total Love Review Total Hate Review Avg Stars
0 1 1 3.5000
1 6 0 4.8333

db<>fiddle here

why did I keep receiving the same value...

子查询未按 is_open 分组。因此,table 中显示的字段将相同。也许尝试这样的事情:

    Select business.is_open
      , review.review_text As Review
      , count(review.review_text) As ReviewCount
      , Avg(stars) As AvgStars
    FROM business
    LEFT JOIN review
    ON business.business_id = review.business_id
    GROUP BY is_open
      , review_text

这会给出如下结果:

_____________________________________________________
| is_open | Review | ReviewCount | AvgStars         |
|_________|________|________________________________|
|    0    | Hate   |    5        | 1.4              |
|_________|________|________________________________|
|    0    | Love   |    12       | 4.33333333333333 |
|_________|________|________________________________|
|    1    | Hate   |    9        | 1.44444444444444 |
|_________|________|________________________________|
|    1    | Love   |    19       | 4.42105263157895 |
_____________________________________________________

另外,这里不需要子查询。使用条件 SUM() 按类型计算评论数。

 select b.is_open
     , sum( case when r.text like '%love%' then 1 else 0 end ) AS 'Total Love Review'
     , sum( case when r.text like '%hate%' then 1 else 0 end ) AS 'Total Hate Review'
     , avg(b.stars) as 'Avg Stars'
 from  business b
         left join review r on b.id = r.business_id
 group by b.is_open

结果:

is_open | Total Love Review | Total Hate Review |       Avg Stars
------: | ----------------: | ----------------: | --------------:
      0 |                 1 |                 1 |             3.5
      1 |                 6 |                 0 | 4.8333333333333

db<>fiddle here