2017-12-02 7 views
0

Start_Stop_IDとEnd_Stop_IDをすべて1つのIDカラムに結合する必要がありますが、各Stop_IDのStartとEndの数を別々のカラムに数える必要があります。MySQL Select Query:カウントを計算して合計を得る

Start_Stop_IDの各行にはCurrent_Fareがあります。 End_Stop_IDではなく、Start_Stop_IDに関連付けられたCurrent_Fareの合計を計算する必要があります。

 
The columns would be: 
ID | Start | END | TOTAL 

Example: 
There would be rows such as 
E1  | 1 | 0 | 3.50 
BUSDOME | 3 | 0 | 18.50 (BUSDOME has 3 Start_Stop_ID, 10.50, 4.00 and 4.00) 
N4  | 1 | 3 | 1.50 
E5  | 2 | 0 | 6.00 (E5 has 2 Start_Stop_ID, 3.00 and 3.00) 
E7  | 0 | 1 | 0.00 

旅行表

Trip Table

答えて

2

これは私のソリューションです:

SELECT i.ID, SUM(i.Start) Start, SUM(i.End) End, SUM(i.Total) Total FROM (
    SELECT Start_Stop_ID ID, COUNT(Start_Stop_ID) AS Start, 0 AS End, SUM(Current_Fare) AS Total 
    FROM trip_table GROUP BY ID 
    UNION ALL 
    SELECT End_Stop_ID ID, 0 AS Start, COUNT(End_Stop_ID) AS End, 0 AS Total 
    FROM trip_table WHERE End_Stop_ID IS NOT NULL GROUP BY ID 
    ORDER BY ID ASC) i 
GROUP BY i.ID 

何このクエリがないことStart_Stop_IDに基づいて結果を作成することで、End_Stop_IDに基づいて別の結果セットが、その後、前にそれらを一緒に結合するUNION ALLを使用しています合計を合計する。

最初の結果セットを作成するとき、開始停止IDを数えているだけなので、Endは0になります。 2つ目の結果セットを作成する場合、Startは0になり、合計(運賃)も0になります。料金は開始結果セットにのみ関連付けられているためです。

*クエリのタイプミス

1

これは料金の合計を計算し、カウントを実行し、他のカラム|End|の論理は明らかではないであろう。

select Start_Stop_ID, count(*) num_stops, sum(Current_Fare) AS total 
from trip_tableclear 
group by Start_Stop_ID 
+0

を私が最初の列がEnd_Stop_ID内の各IDの数Start_Stop_IDの各IDの数と第二であると思います。したがって、N4はStart_Stop_IDに1回、End_Stop_IDに3回存在します。それから、:N4 | 1 | 3 | 1.50 合計は、最初の列にあるIDのCurrent_Fareのみに基づいているようです。 – Arcesilas

+0

End_Stop_IDの合計数を計算して列に入れるが、Start_Stop_IDのカウントと同じ行になる。 –

+0

@Arcesilas氏によると、Current_Fareの合計はStart_Stop_ID –

0

ソリューションクエリ修正:

SELECT Start_Stop_ID as 'ID', count(num_stops) as 'Count', SUM(Current_Fare) as 'Total Fare' FROM trip_tableclear GROUP BY Start_Stop_ID;