重写HAVING子句和COUNT函数
我想概念地理解如何重写HAVING子句和COUNT函数。重写HAVING子句和COUNT函数
有人问我“查找谁已经贡献了3个以上的收视率全部评论者的名字(作为一个额外的挑战,尝试编写查询,而无需或不计数)。”关于这本简单的数据库:http://sqlfiddle.com/#!5/35779/2/0
带有HAVING和COUNT的查询很容易。没有,我有困难。
帮助将非常感激。谢谢。
一种办法是在子查询中使用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
每一行和汇总吧。
你能解释一下SUM(1)的总和吗? – Edward 2014-12-02 01:39:50
想想每列只填充1行的列,将所有这些1加在一起就可以在不使用COUNT的情况下获得相当于COUNT的值。不是您在练习中会做的事,但它符合避免“COUNT”的要求。 – 2014-12-02 01:47:39
包括示例数据而不是链接会很有帮助,设置小提琴会更好:sqlfiddle.com 显示迄今为止您尝试的内容也不错,并且您应该指出正在工作的数据库与,因为解决方案可能会有所不同。 – 2014-12-02 01:10:14
谢谢!这是否工作? http://sqlfiddle.com/#!5/35779/2/0 – Edward 2014-12-02 01:30:46