2017-08-28 83 views
2

我想獲得重複率大於1的用戶的明顯數量(在Excel中,例如,我將使用countif公式來完成此操作)。訪問SQL:具有子句

我正在使用女士訪問(2016),似乎無法得到此工作。以下查詢的結果爲我提供了與userName和Repeat Rate相同的結果。

SELECT host, department, count([userName]) AS ['Distinct Users'], sum(Logins) AS ['Total Logins'], count([Repeat Rate]) AS ['Repeat Users'] 
FROM (SELECT DISTINCT department, [userName], host,[Repeat Rate], Logins FROM Sheet1) AS x 
GROUP BY department, host 
ORDER BY host, department, 
HAVING COUNT([Repeat Rate]) > 1; 

任何幫助,非常感謝,謝謝!

編輯:

+------+----------+------------+-------------+--+ 
| host | username | Department | Repeat Rate | | 
+------+----------+------------+-------------+--+ 
| x | Kyle  | D1   |   1 | | 
| x | Max  | D1   |   4 | | 
| x | Will  | D1   |   2 | | 
| x | Will  | D1   |   2 | | 
+------+----------+------------+-------------+--+ 

隨着例如上面的表格,我希望它說在部D1主機X,有3個不同的用戶,用戶有重複率大於1。

+------+------------+----------------+-------------+ 
| host | Department | Distinct Users | Repeat Rate | 
+------+------------+----------------+-------------+ 
| x | D1   |    3 |   2 | 
+------+------------+----------------+-------------+ 
+0

'計數(不同[用戶名])'鮮明可以是在整個記錄時的開始或只是內的聚集函數內使用時的單個列放。如果您使用這種方法,我認爲不需要子查詢。然而使用樣本數據的預期結果的樣本數據有助於澄清問題。 https://ozh.github.io/ascii-tables/是一種將數據呈現給SO的好方法,只要您在HTML表格,Excel或其他媒體中使用該數據。 – xQbert

+0

@xQbert我以前嘗試過count(distinct [])方法,但使用microsoft訪問它似乎不工作..不知道爲什麼。我還添加了一些表格,感謝您的建議! – wra

+0

「Kyle」只有一個比率。這使得2個不同的用戶的利率> 1.不是你的輸出示例顯示... – Gustav

回答

2

嘗試此

SELECT host, department, count([userName]) AS ['Distinct Users'], sum(IIF([Repeat Rate]>1,1,0)) AS ['Repeat Users'] 
FROM (SELECT DISTINCT host, department, [userName], [Repeat Rate] FROM Sheet1) AS x 
GROUP BY department, host; 
0

我不知道你已經在您的文章第一部分所示的加入,但是,只考慮你的榜樣,下面的查詢,似乎解決您的問題


SELECT HOST, DEPARTMENT, SUM(DISTINCT_USER) AS DISTINCT_USER, MAX(CNT) AS REPEAT_RATE 
FROM (
    SELECT HOST, DEPARTMENT, COUNT(DISTINCT USERNAME) AS DISTINCT_USER, REPEAT_RATE, COUNT(*) AS CNT 
    FROM 
    GROUP BY HOST, DEPARTMENT, REPEAT_RATE 
) A 
GROUP BY HOST, DEPARTMENT 
1

您可以嘗試這樣的事:

SELECT x.host, x.department, max(users.unique_users) AS ['Distinct Users'], 
    sum(Logins) AS ['Total Logins'], max(repeats.unique_repeats) AS ['Repeat Users'] 
FROM (SELECT DISTINCT department, [userName], host,[Repeat Rate], Logins FROM Sheet1) AS x 
left join (select host, department, count(userName) as unique_users from (select distinct 
    host, department, [userName] from Sheet1)) as users on users.host = x.host and 
    users.department = x.department 
left join (select host, department, count(userName) as unique_repeats 
    from (select distinct host, department, [userName] from Sheet1 where [Repeat Rate] > 1)) 
     as repeats on users.host = x.host and users.department = x.department 
GROUP BY department, host 
ORDER BY host, department; 

計數獨特的價值觀很難在訪問SQL。通常情況下,您會使用count(distinct var)作爲其他建議,但這不適用於您。