我正在尝试从概念上理解如何重写HAVING子句和COUNT函数。
我被问到“查找已经提供三个或更多评级的所有评论者的姓名。(作为一项额外的挑战,尝试编写查询而不使用或不使用COUNT。”)关于这个简单的数据库:{{3} }
使用HAVING和COUNT的查询很简单。没有,我有困难。
非常感谢帮助。谢谢。
答案 0 :(得分:2)
一种选择是在子查询中使用SUM(1)
代替COUNT
,并使用WHERE
代替HAVING
:
SELECT b.name
FROM (SELECT rID,SUM(1) Sum1
FROM rating
GROUP BY rID
)a
JOIN reviewer b
ON a.rID = b.rID
WHERE Sum1 >= 3
演示:SQL Fiddle
更新:对SUM(1)
的一些解释:
向SELECT
语句添加常量将导致为返回的每一行重复该值,例如:
SELECT rID
,1 as Col1
FROM rating
返回:
| rID | Col1 |
|-----|------|
| 201 | 1 |
| 201 | 1 |
| 202 | 1 |
| 203 | 1 |
| 203 | 1 |
......
SUM(1)
正在为每一行应用常量1
并对其进行汇总。