2016-12-21 12 views
2

私はこの答えを探しましたが、何も見つかりませんでした。少しの助けを求めて。MYSQL - 特定の列でのみ変数の出現をカウントする

クエリの必要性:各列に各数値が何回表示されますか。私は私の結果は、各列の各出現のカウントになりたい

+-----+-------+-----------+-------+ 
| key | prime | secondary | third | 
+-----+-------+-----------+-------+ 
| 1 |  6 |   6 |  7 | 
| 2 |  7 |   9 |  9 | 
| 3 |  6 |   9 |  6 | 
| 4 |  9 |   9 |  9 | 
+-----+-------+-----------+-------+ 

= "スケジュール" ...

+--------+------ +-----------+-------+ 
| number | prime | secondary | third | 
+--------+-------+-----------+-------+ 
|  6 |  2 |   1 |  1 | 
|  7 |  1 |   0 |  1 | 
|  9 |  1 |   3 |  2 | 
+-------+-----------+--------+-------+ 

だから#6がある

tableNameのは、2倍を発生します「プライム」列では「セカンダリ」列で1倍、「3列目」列では1倍が発生します。

+0

あなたは何をしようとしたのですか? – Mojtaba

答えて

0
select nall.id, 
    (select count(*) from Schedule where prime = nall.id) as prime, 
    (select count(*) from Schedule where secondary = nall.id) as secondary, 
    (select count(*) from Schedule where third = nall.id) as third 
from 
    (select prime as id from Schedule 
    union 
    select secondary as id from Schedule 
    union 
    select third as id from Schedule) nall; 
+0

助けていただきありがとうございます:)これはうまくいきました... – DTM

1

unionを使用して3つの列からすべての異なる番号を取得します。 left join各列のcountをこれらの数値に変換して最終結果を得ます。

select all_nums.num,coalesce(p_cnt,0), coalesce(s_cnt,0), coalesce(t_cnt,0) 
from 
(select prime as num from t union select secondary from t union select third from t) all_nums 
left join 
(select prime,count(*) as p_cnt from t group by prime) p on p.prime=all_nums.num 
left join 
(select secondary,count(*) as s_cnt from t group by secondary) s on s.secondary=all_nums.num 
left join 
(select third,count(*) as t_cnt from t group by third) t on t.third=all_nums.num 
group by all_nums.num 
+0

ありがとうございました...これは非常にうまくいきました。初心者が質問を解読し、これから学ばなければならないので、クエリはうまく機能しました。 mcNetsはまた、よりシンプルな(理解するための)クエリを作成しました。:)効率/スピードについてはわかりませんが、テーブルは比較的小さいです。mcNetsを受け入れました。もう一度ありがとうございます。 – DTM

関連する問題