2016-05-31 5 views
3

私はSQLの経験が豊富で、この問題を把握していないようです。SQL各値の別個の行の数を取得する

私はこのようなテーブルがある場合:

アプリ

id name 
1 app1 
2 app2 
3 app3 

どのように私はいくつかになるだろう。このような

をインストール

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

と他の

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

をそれがインストール中に個別のユーザーの合計数をカウントしているためという1行のみが得られます。このようなものは、私はこれを試してみました

name distinct_users 
app1 1 
app2 2 
app3 1 

?:します。

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

私は実際にあなたをupvoted、他の2人はdownvotedしている必要があります。あなたの答えは役に立ちました、ありがとう。 – User9123

+0

@ User9123あなたに返事をしてくれてありがとう、私のコメントはあなたのためではありません。私は正しい結果を得ていないので、投稿してから5分後に削除しました。私はちょうどundestandことができませんなぜ(このクエリが残っていた)誰かが働く何かをダウン投票するだろう! –

2

使用グループを

により、カウント(*):かなりしばらくの間、今代わりに、あなたが明示的に参加使用をお勧めします
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; 
関連する問題