2016-12-09 6 views
0

stackoverflowコミュニティ 私はあなたが私を助けてくれることを望むSQLステートメントに問題を導入しました。結合テーブルからの単一行のクエリと結合テーブルの総数

私は2つのテーブル:accountsusersを持っています。 users参照accountsaccount_id。 私は何をしたいことは、クエリが動作するように、次の取得されています

`SELECT accounts.*, count(users.*), user.* 
FROM accounts 
INNER JOIN users on accounts.id = users.account_id 
INNER JOIN users user on accounts.id = user.account_id limit 1 
GROUP BY accounts.id` 

だから、私は次のような結果

`| accounts.id | users_count | user.phone | 
=========================================== 
|  1  |  5  | xxxxxx | 

は基本的に、私はアカウント内のすべてのユーザーの数量と具体的なデータを取得したい取得します1人のユーザーのために。単一のクエリで行うことも可能ですか?

ご回答いただきありがとうございます。

SELECT accounts.id,usercount.usercount,users.phone 
FROM accounts 
INNER JOIN users 
ON accounts.id = users.account_id 
INNER JOIN(
    SELECT count(*) usercount,users.account_id 
    FROM users 
    GROUP BY account_id 
) usercount 
on usercount.account_id = accounts.id 

アカウント内の任意の単一のユーザーのためのデータが必要な場合には、すべてのユーザーを取得するには、Get MAX(users.id)を使用することができます。あなたは次の操作を行うことができ、各ユーザーとアカウントのための単一の行をしたいと仮定すると、

+0

のでaccount.id = 1のために、あなたは、CSVとしてユーザの電話機を持つ各ユーザの携帯電話情報、または単一の行と5行をしたいですか? – ughai

+1

あなたのrdmsは何ですか? – SKLTFZ

+1

各アカウントには複数のユーザーが存在するため、単一のユーザーの電話番号とともにアカウントを一覧表示することは意味がありません。期待される成果をもっと見せるか、質問を明確にしてください。 –

答えて

0

その結果の中でそのユーザーのデータを取得します。

SELECT accounts.id,usercount.usercount,users.phone 
FROM accounts 
INNER JOIN(
    SELECT count(*) usercount,users.account_id,MAX(users.id) as userid 
    FROM users 
    GROUP BY account_id 
) usercount 
on usercount.account_id = accounts.id 
INNER JOIN users 
ON accounts.id = users.account_id AND usercount.userid = users.id 
+0

ありがとう!もう一つは私が探していたものです。私はあなたの助けに多く感謝します。 –

0

SQLサーバーを使用している場合は、これをメモで試すことができます。

SELECT src.*, user.*, userCount.cnt FROM (SELECT DISTINCT id from accounts)src INNER JOIN 
user ON src.id = user1.account_id 
CROSS APPLY 
(SELECT COUNT(1) AS cnt FROM users WHERE account_id = src.id) userCount 

accounts.idでグループ化することは意味がありません。そうしないと、ユーザーのすべての行を持つことができません。 accounts.idと他のユーザーフィールドでグループ化することはできますが、最終的に行数が正しくないことになります。

あなたACCOUNT_IDがアカウントテーブルに重複している場合には、あなたが最初に明確なにそれを必要とする(この例では、それだけではっきりとフェッチされたID、あなたは異なった複数の列に必要がある場合があります。)

あなたが使用することができます
0

SELECT  D1.id, D2.phone, 
      (Select Count(*) From Users D3 where D3.account_id = D1.id) as cnt 
FROM  Accounts D1 
INNER JOIN Users D2 
    ON  D1.id = D2.account_id 
0

これを試してみてください。..

​​
関連する問題