重写HAVING子句和COUNT函数

问题描述:

我想概念地理解如何重写HAVING子句和COUNT函数。重写HAVING子句和COUNT函数

有人问我“查找谁已经贡献了3个以上的收视率全部评论者的名字(作为一个额外的挑战,尝试编写查询,而无需或不计数)。”关于这本简单的数据库:http://sqlfiddle.com/#!5/35779/2/0

带有HAVING和COUNT的查询很容易。没有,我有困难。

帮助将非常感激。谢谢。

+1

包括示例数据而不是链接会很有帮助,设置小提琴会更好:sqlfiddle.com 显示迄今为止您尝试的内容也不错,并且您应该指出正在工作的数据库与,因为解决方案可能会有所不同。 – 2014-12-02 01:10:14

+0

谢谢!这是否工作? http://sqlfiddle.com/#!5/35779/2/0 – Edward 2014-12-02 01:30:46

一种办法是在子查询中使用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每一行和汇总吧。

+0

你能解释一下SUM(1)的总和吗? – Edward 2014-12-02 01:39:50

+0

想想每列只填充1行的列,将所有这些1加在一起就可以在不使用COUNT的情况下获得相当于COUNT的值。不是您在练习中会做的事,但它符合避免“COUNT”的要求。 – 2014-12-02 01:47:39