0

言葉で説明するのは難しいですが、データをタイプ別にグループ化し、別のテーブルと結合して結果を取得しようとしています。

これが私のSqlFiddleの例です。

以下にデータの例を示します。

(リンクテーブル) [id, type, created]

(1, 1, '2013-01-01')
(2, 1, '2013-01-02')
(3, 2, '2013-01-03')
(4, 4, '2013-01-04')

(情報テーブル) [id、link_id、info_type、tally、tick]

(1, 1,1,10,15)
(1, 2,2,20,17)
(1, 3,1,12,14)
(1, 4,2,18,21)

私が望む結果は次のとおりです。[type_a、type_b、tally、tick]

(1, 1, 30, 32)
(1, 0, 12, 14)
(0, 1, 18, 21)

私が得ている結果

(2, 2, 30, 32)
(1, 1, 12, 14)
(1, 1, 18, 21)

これが私が使用している私のクエリです

SELECT 
    COUNT(i.info_type) as type_a,
    COUNT(i.info_type) as type_b,
    SUM(i.tally) as tally,
    SUM(i.tick) as tick
FROM link l
JOIN info i ON (l.id = i.link_id)
WHERE l.created BETWEEN '2013-01-01' AND '2014-01-01'
GROUP BY l.type

要約すると、日付範囲内のすべてのリンクを取得し、link.type でグループ化してから、type_a として 1 に等しく、type_b として 2 に等しい info_type のカウントと、正しい集計とティックの合計を返します。間違っているのは type_a と type_b の結果だけです。

4

2 に答える 2

0

私はこれがあなたが必要とするものだと思います

SELECT 
    SUM(CASE WHEN MOD(I.INFO_TYPE,2) = 0 THEN 1 ELSE 0 END) as type_B,
    SUM(CASE WHEN MOD(I.INFO_TYPE,2) <> 0 AND MOD(I.INFO_TYPE, 1) = 0
    THEN 1 ELSE 0 END) as type_A,
SUM(I.TALLY) AS TALLY, SUM(I.TICK) AS TICK
FROM link l
JOIN info i ON (l.id = i.link_id)
WHERE l.created BETWEEN '2013-01-01' AND '2014-01-01'
GROUP BY L.TYPE
于 2013-11-14T18:26:26.630 に答える