2016-05-31 60 views
3

我對SQL沒有太多經驗,我似乎無法弄清楚這個問題。SQL爲每個值獲取不同行的數量

如果我有這樣的一個表:

安裝

id user 
1 bob 
2 carl 
2 carl 
2 charles 
3 bill 
3 bill 

,另一個是這樣的:

應用

id name 
1 app1 
2 app2 
3 app3 

我怎麼會得到一些像這樣的事情?:

name distinct_users 
app1 1 
app2 2 
app3 1 

我已經試過這樣:

select apps.name, count(distinct installs.user) 
from installs, apps 
where installs.id = apps.id; 

但僅產生一排,因爲它是計數安裝不同用戶的總數。

app1 4 
+1

您沒有PRIMARY KEY。這可能會有問題。 – Strawberry

回答

3

你缺少一個group by子句,以獲得導致每個應用

​​

注意,順便說一下,隱式連接(在from子句中有多個表已經將被取消。相當長的一段時間,現在取而代之的是,我們建議您使用顯式連接:

SELECT apps.name, COUNT(distinct installs.user) 
FROM  installs 
JOIN  apps ON installs.id = apps.id; 
GROUP BY apps.name 
0
SELECT `apps`.`name`, COUNT(DISTINCT(`installs`.`user`)) 
FROM `installs`, `apps` 
WHERE `installs`.`id` = `apps`.`id` 
GROUP BY `apps`.`id`; 

看到這個fiddle

+0

我其實挺贊你的,另外兩個人肯定是低調的。你的回答很有幫助,謝謝。 – User9123

+0

@ User9123謝謝先生剛纔回覆,我的評論不適合你,我在回答中還有一個查詢因爲錯誤而被刪除。我發佈後5分鐘刪除它,因爲我沒有獲取正確的結果。我無法理解爲什麼(只有當這個查詢被留下時)有人會投票贊成一些有用的東西! –

2

使用GROUP BY和COUNT(*)

Select apps.name, count(*) 
from installs 
inner join apps on installs.id = apps.id 
group by apps.name; 
1

您需要添加GROUP BY
更多避免逗號分隔的表概念,並使用JOIN與ON。
爲每個表添加別名以提高可讀性。

SELECT A.name, COUNT(DISTINCT I.user) 
FROM apps A 
INNER JOIN installs I ON I.id = A.id 
GROUP BY A.name;