gpt4 book ai didi

mysql - 为什么这两个看似相似的 MySQL 查询返回完全不同的结果?

转载 作者:行者123 更新时间:2023-11-29 16:10:21 25 4
gpt4 key购买 nike

我想提取总体评分低于 4 的单位列表。第一个查询返回 1760 行,其中的数据在交叉引用时似乎可以检查出来。第二个查询仅返回 434 行。为什么会这样呢?我不完全理解“Group By”和“Having”子句,所以我猜它与这些有关。

'''
SELECT u.unitid
,AVG(r.overall) AS AverageRating
, u.ratingcount

FROM reviews r

LEFT JOIN units u
ON u.unitid = r.unitid

-- only retrieve active, non-terminated units set to display
WHERE u.active = 1
AND u.display = 1
AND u.terminated = 0

GROUP BY u.unitid

HAVING AverageRating < 4
;
```
```
SELECT u.UnitID
, u.rating
, u.ratingcount

from units u

WHERE u.rating < 4

-- only retrieve active, non-terminated units set to display
and u.active = 1
and u.display = 1
and u.terminated = 0
;
```

最佳答案

您的第一个查询查看所有记录并按单位 ID 计算平均评分,然后 HAVING 子句将最终结果限制为按单位平均评分的记录ID小于4。

您的第二个查询列出了评分低于 4 的所有记录,仅此而已。它没有平均任何东西。

以下是我通过快速 Google 找到的几个还过得去的教程:

HAVING 过滤聚合值,例如 SUMAVGMINMAX等。它与 WHERE 类似,但 WHERE 仅过滤非聚合值。你可以这样做:

SELECT UnitId, AVG(Rating)
FROM MyTable
GROUP BY UnitId
HAVING AVG(Rating) < 4 -- Good: HAVING is for filtering on aggregate values

但是你不能这样做(与上面的唯一区别是最后一行中的 WHERE 而不是 HAVING):

SELECT UnitId, AVG(Rating)
FROM MyTable
GROUP BY UnitId
WHERE AVG(Rating) < 4 -- Bad: WHERE is for the raw values, before they're aggregated

坚持下去。你会到达那里:)

关于mysql - 为什么这两个看似相似的 MySQL 查询返回完全不同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55318723/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com