0

次の SQL ステートメントは、次に示す結果を生成します。質問は、各 post_id の合計を提供するようにこのステートメントを変更するにはどうすればよいですか? たとえば、post_id 1 は = 25、post_id 2 は = 758 にする必要があります。

SELECT t.post_id,
SUM(maxpostmetric) as sumvalue 
  FROM ( 
    SELECT post_metrics.post_id, 
    post_metrics.post_metric_type_id, 
    MAX( post_metrics.value ) maxpostmetric 
    FROM post_metrics 
    INNER JOIN posts ON posts.id = post_metrics.post_id 
    WHERE posts.channel_id = 2268
    GROUP BY post_metrics.post_id, post_metrics.post_metric_type_id 
    ORDER BY post_metrics.id 
  )t 
INNER JOIN post_metric_types ON post_metric_types.id = t.post_metric_type_id 
GROUP BY t.post_id, t.post_metric_type_id 

post_id:値; 1:0; 1:25; 1:0; 2:110; 2:588; 2:60;

1 = 25; 2 = 758。

ありがとう

4

2 に答える 2

2

2 回集計する必要はありません。

SELECT post_metrics.post_id, MAX( post_metrics.value ) maxpostmetric 
FROM post_metrics INNER JOIN
     posts
     ON posts.id = post_metrics.post_id 
WHERE posts.channel_id = 2268
GROUP BY post_metrics.post_id 
ORDER BY post_metrics.id 
于 2013-02-07T02:21:17.430 に答える
0

これは、post_metric_type_id によってもグループ化しているためです。そのフィールドへの結合とグループ化の目的は何ですか? 結果にそのフィールドを含めたい場合は、select ステートメントに追加します。

ただし、post_id の SUM を取得するには、それを GROUP BY 句から削除してください。

SELECT t.post_id,
       SUM(maxpostmetric) as sumvalue 
  FROM ( 
    SELECT post_metrics.post_id, 
    post_metrics.post_metric_type_id, 
    MAX( post_metrics.value ) maxpostmetric 
    FROM post_metrics 
    INNER JOIN posts ON posts.id = post_metrics.post_id 
    WHERE posts.channel_id = 2268
    GROUP BY post_metrics.post_id, post_metrics.post_metric_type_id 
    ORDER BY post_metrics.id 
  )t 
INNER JOIN post_metric_types ON post_metric_types.id = t.post_metric_type_id 
GROUP BY t.post_id

INNER JOIN も削除できる場合があります-必要に応じて異なります。

幸運を。

于 2013-02-07T02:10:55.077 に答える