我想概念地理解如何重寫HAVING子句和COUNT函數。重寫HAVING子句和COUNT函數
有人問我「查找誰已經貢獻了3個以上的收視率全部評論者的名字(作爲一個額外的挑戰,嘗試編寫查詢,而無需或不計數)。」關於這本簡單的數據庫:http://sqlfiddle.com/#!5/35779/2/0
帶有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