2014-12-02 38 views
0

我想概念地理解如何重寫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

回答

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每一行和彙總吧。

+0

你能解釋一下SUM(1)的總和嗎? – Edward 2014-12-02 01:39:50

+0

想想每列只填充1行的列,將所有這些1加在一起就可以在不使用COUNT的情況下獲得相當於COUNT的值。不是您在練習中會做的事,但它符合避免「COUNT」的要求。 – 2014-12-02 01:47:39