2017-03-26 107 views
1

我不會給選擇funcionario.name WHERE COUNT()> AVG()GROUP BY funcionarioSELECT funcionario.name WHERE COUNT()> AVG()GROUP BY funcionario

funcionario =僱員

cliente =客戶端

SELECT funcionario.nome 
FROM cliente 
INNER JOIN funcionario ON cliente.nr_funcionario = funcionario.nr_funcionario 
WHERE 
((SELECT COUNT(*) 
    FROM cliente 
    INNER JOIN funcionario ON cliente.nr_funcionario = funcionario.nr_funcionario 
    GROUP BY funcionario.nome) > 
(SELECT AVG(total) 
FROM 
    (SELECT COUNT(*) AS total 
    FROM cliente 
    INNER JOIN funcionario ON cliente.nr_funcionario = funcionario.nr_funcionario 
    GROUP BY funcionario.nome))) 
GROUP BY funcionario.nome 
+1

你忘了問你的問題。 –

+1

放一些樣品日期,預計產量也:-) – Pons

+0

我問權之上下來表決的問題 喜愛 我不會來選擇funcionario.name WHERE COUNT()> AVG()GROUP BY funcionario.nome –

回答

1

我得到你感到困惑如何在查詢中放置一個約束在一個給定的感。 HAVING關鍵字用於此目的,可以認爲這是WHERE子句對單個記錄做的事情,除了它代替組記錄的行爲。然而,使用公共表表達式,可以大大簡化查詢到以下幾點:

WITH cte AS (
    SELECT f.nome, COUNT(*) AS total 
    FROM cliente c 
    INNER JOIN funcionario 
     ON c.nr_funcionario = f.nr_funcionario 
    GROUP BY f.nome 
) 
SELECT t.nome 
FROM cte t 
WHERE t.total > (SELECT AVG(total) FROM cte) 
+0

不工作(:( –

+0

'不工作'不能幫助我或其他人回答你的問題。請發送樣品數據和你的預期輸出。 –

+0

畢竟,有一件事是失蹤的,現在它的工作。Thx爲代碼 –

1

由於我沒有實際的表來測試, 而是使用了以下概念,你一定會得到正確的結果

declare @average int; 
    SELECT @average= AVG(count (*)) 
    FROM 
     FROM cliente 
     INNER JOIN funcionario ON cliente.nr_funcionario = funcionario.nr_funcionario 
     GROUP BY funcionario.nome 


     SELECT funcionario.nome 
    FROM cliente 
    INNER JOIN funcionario ON cliente.nr_funcionario = funcionario.nr_funcionario 
     GROUP BY funcionario.nome 
having count(functionario.nome)>@average 
1

我認爲最好的辦法是使用窗口功能:

select nome 
from (select f.nome, count(*) AS total, 
      avg(count(*) * 1.0) over() as avg_total 
     from cliente c join 
      funcionario f 
      on c.nr_funcionario = f.nr_funcionario 
     group by f.nome 
    ) fc 
where total > avg_total; 

這應該比引用CTE版本更好的性能不止一次。

+0

我同意你的表現參數+1。話雖如此,我的查詢可能會更容易閱讀和維護。這也可能很重要。 –

+0

@TimBiegeleisen。 。 。其實,我覺得這更容易。但我很習慣窗口函數以及如何使用它們。 –