2017-07-21 11 views
0

に同じ行にCOUNT、 - 私は、同じ行に同じクライアントからのすべてのトランザクションのSUMやCOUNTを表示しようとしていますトランザクションのタイプはわかりませんが、グループ化する方法はわかりません。そのため、1つのクライアントの合計を表示し、次の行では、別のクライアントがそれを返すようにします。あなたの時間をありがとう。選択SUMと私は2つのテーブル、<strong>クライアント</strong>と<strong>取引</strong>を持っているPHPとMySQL

テーブルクライアント

id_client - クライアント名

テーブルtransacctions

id_transaction - のclient_id - 日 - タイプ - 量

$query = " SELECT * FROM transacctions, clients 
    WHERE (transacctions.date BETWEEN '$date1' AND '$date2') 
    AND transactions.client_id = clients.id_client 
    AND transactions.type = '$type' ; " 


    <th>Client Name</th> 
    <th>Transaction Type</th> 
    <th>Number of Transactions</th> 
    <th>total amount</th> 


     $output.='<td>'.$row['client_name'].'</td>'; 
     $output.='<td>'.$row['type'].'</td>'; 
     $output.='<td>'.$row['SUM(amount)'].'</td>'; 
     $output.='<td>'.$row['COUNT(amount)'].'</td>'; 
+1

「取引」のスペルが間違っていて、1か所で修正されています。 – Difster

+0

https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple-sql-クエリ – Strawberry

答えて

1

グループのクライアントIDによると量とトランザクションIDの数の合計を選択:また

$query = " SELECT clients.client_name, transacctions.type 
SUM(transacctions.amount) AS sum_amount, 
COUNT(transacctions.id_transaction) AS transaction_count 
FROM transacctions, clients 
WHERE (transacctions.date BETWEEN '$date1' AND '$date2') 
AND transactions.client_id = clients.id_client 
AND transactions.type = '$type' 
GROUP BY clients.id_client; " 

を、結合を使用することをお勧めします。

$query = " SELECT clients.client_name, transacctions.type 
SUM(transacctions.amount) AS sum_amount, 
COUNT(transacctions.id_transaction) AS transaction_count 
FROM clients 
INNER JOIN transacctions ON transactions.client_id = clients.id_client 
WHERE (transacctions.date BETWEEN '$date1' AND '$date2') 
AND transactions.type = '$type' 
GROUP BY clients.id_client; " 

そして、あなたが取引を持っていないものも含めてすべてのクライアントを、見たいならば、LEFT JOININNER JOINを変更します:

$query = " SELECT clients.client_name, transacctions.type 
SUM(transacctions.amount) AS sum_amount, 
COUNT(transacctions.id_transaction) AS transaction_count 
FROM clients 
LEFT JOIN transacctions ON transactions.client_id = clients.id_client 
WHERE (transacctions.date BETWEEN '$date1' AND '$date2') 
AND transactions.type = '$type' 
GROUP BY clients.id_client; " 

注:これは、あなたと同じ結果が得られますIタイプミスか、テーブルに実際にその名前があるかわからなかったので、クエリで "トランザクション"のスペルミスを修正しませんでした。

+0

ありがとう、それは、SUMとCOUNTをもたらすが、それらの値だけ、同じ行にも "client_name"とトランザクション "タイプ"をもたらす方法を知っていますか? – Raychu150

+0

それらを 'SELECT'に追加するだけです。私の更新された答えを見てください。 –

+0

ありがとう、ただ仕事を保存してください。 – Raychu150

関連する問題

 関連する問題