为什么即使我已经按列分组,我仍然收到相同的列值? [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
这是我在 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