重写HAVING子句和COUNT函数

时间:2014-12-02 01:04:22

标签: sql sqlite count rewrite having

我正在尝试从概念上理解如何重写HAVING子句和COUNT函数。

我被问到“查找已经提供三个或更多评级的所有评论者的姓名。(作为一项额外的挑战,尝试编写查询而不使用或不使用COUNT。”)关于这个简单的数据库:{{3} }

使用HAVING和COUNT的查询很简单。没有,我有困难。

非常感谢帮助。谢谢。

1 个答案:

答案 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并对其进行汇总。