0

私はこのテーブルを持っています:

テーブル

この選択は、さまざまな var_lines (データの 1 行または調査の回答者としてほとんど機能します) および set_codes (さまざまな調査コード) に対して何度も複製されます。

このクエリでは:

SELECT
    *, COUNT(*) AS total
FROM
    `data`
WHERE
    `var_name` = 'GND.NEWS.INT'
AND(
    `set_code` = 'BAN11A-GND'
    OR `set_code` = 'BAN09A-GND'
    OR `set_code` = 'ALG11A-GND'
)
AND `country_id` = '5'
GROUP BY
    `data_content`,
    `set_code`
ORDER BY
    `set_code`,
    `data_content`

クエリは基本的に、特定の質問に対する回答の数をカウントします。次に、アンケートをグループ化します (set_code)。

私が必要とするのは、GND.NEWS.INT のグループ化されたdata_content回答のそれぞれが、同じ var_line を持つすべての対応する GND_WT の合計も表示することです。

たとえば、これがあった場合:

data_id    data_content    var_name    var_line
1          2               GND.NEW.INT 1
2          1.4             GND_WT      1
3          2               GND.NEW.INT 2
4          1.6             GND_WT      2
5          3               GND.NEW.INT 3
6          0.6             GND_WT      3

私はこのようなものを得るでしょう:

data_id    data_content    var_name      var_line   total   weight
1          2               GND.NEW.INT   1          2       3
5          3               GND.NEW.INT   3          1       0.6

助けてくれてありがとう。

4

2 に答える 2

2

あなたの要件は正確には明確ではありませんが、次のものがあなたが望むものを与えると思います:

select d1.data_id,
  d1.data_content,
  d1.var_name,
  d1.var_line,
  t.total,
  w.weight
from data d1
inner join
(
  select data_content,
    count(data_content) Total
  from data
  group by data_content
) t
  on d1.data_content = t.data_content
inner join
(
  select var_line,
    sum(case when var_name = 'GND_WT' then data_content end) weight
  from data
  group by var_line
) w
  on d1.var_line = w.var_line
where d1.var_name = 'GND.NEW.INT'

デモで SQL Fiddle を参照してください

于 2012-10-25T11:02:25.323 に答える
1

このクエリは、特定の例に適しています。

select st.data_id, 
    st.data_content, 
    st.var_name, 
    st.var_line, 
    count(st.data_id) as total,
    sum(st1.data_content) as weight
from data st
left join data st1 on st1.var_name = 'GND_WT' AND st1.var_line=st.var_line
where st.var_name='GND.NEW.INT'
group by st.data_content

よろしく、

ルイス。

于 2012-10-25T13:14:22.097 に答える