- ベストアンサー
テーブル内の行から同一データの数を取り出し
たとえば 顔 髪型 ルックス 総合 行→山田太郎 3 3 2 3 というテーブルがあるとして、山田太郎という行から3の数を取り出すにはどうすればいいでしょうか? select count(*) from ~~ where '3'; とすれば取り出せるのでしょうか? 参考サイトなどがあれば、それだけでもいいのでよろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
2です。そうですか^^ 大体想像通りでしたねw 私の脳では データの数=レコード(行)の数 という認識ですので、理解できなかったのですね^^; レコード内の項目で、値が「3」である項目の数を 全レコード分合計したい ってことですよね? >山田太郎 3 3 2 3 >早国矢郎 1 3 3 2 に下で記述したSQLを実行すると 結果 3 (山田太郎のレコードに"3"が入ってる項目数) 2 (早国矢郎のレコードに"3"が入ってる項目数) になります。 この結果を更に集計すれば「5」になります。 Oracle例(めんどいのでこれだけw) SELECT SUM(項目A) FROM ( SELECT DECODE(顔,3,1,0) + DECODE(髪型,3,1,0) + DECODE(ルックス,3,1,0) + DECODE(総合,3,1,0) AS 項目A FROM テーブル名 ) TBLA 以下余談 >>今まで見てきたのは1つに対してのしかないのですが、 >>全フィールドに対してできるのでしょうか? できませんね~ WHERE句で「AND」とか「OR」を使えば複数項目に 条件を記述できますが、今回の集計ではつかえませんね あと、私の記述したSQLはカナーリ複雑ですw 全フィールド(項目)を対象の集計をするのではなく、 フィールド毎の集計をするSQLを考えた方が勉強に なりますので 考えてみてください。 長文駄文失礼しました。
その他の回答 (2)
- mitu_fu
- ベストアンサー率90% (9/10)
ん~? 質問を10回以上読んだのですが・・私の低脳では 理解しきれませんでしたが、想像するに、 レコード内の項目で「3」が入ってる項目数の数を 取得したいのではないですか? それであれば、 Oracle例 SELECT DECODE(顔,3,1,0) + DECODE(髪型,3,1,0) + DECODE(ルックス,3,1,0) + DECODE(総合,3,1,0) FROM テーブル名 SQLSERVER例 SELECT CASE 顔 WHEN 3 THEN 1 ELSE 0 END + CASE 髪型 WHEN 3 THEN 1 ELSE 0 END + CASE ルックス WHEN 3 THEN 1 ELSE 0 END + CASE 総合 WHEN 3 THEN 1 ELSE 0 END FROM テーブル名 こんな感じで取得できるかな~
お礼
低脳などとご謙遜を…それなら私はあなたよりさらに劣るということに…f^^ 項目の数ではなくて、データの数です。 例えば 顔 髪型 ルックス 総合 山田太郎 3 3 2 3 早国矢郎 1 3 3 2 となると「3」の入ってる項目数は4ですが、「3」というデータの数は5になります。 こんな感じでやりたいと思っています。 もし私のいいたいことをおっしゃっていたらすみませんでした。
- FLA-SE
- ベストアンサー率32% (33/103)
ちなみに、どこの3が欲しいのでしょうか?顔?髪型? それとも3の項目全てが欲しいのですか? ちなみにselect countでは行数しかとれません。 >select count(*) from ~~ where '3'; where句は「XXXが3のもの」っていう条件を指定します。ですから、あなたの式は何が3なのかわかりませんよね。 こちらで勉強されるといいですよ。 http://www.ann.hi-ho.ne.jp/hirok/sql/ 大変ですが、頑張ってくださいね。
お礼
ありがとうございます。勉強してみますね。 ちなみに項目全てが欲しいのです。 そのサイトの勉強前に考えてみてこういう風にしてみようと思ったのですが select * from ~~; で全検索して、出てきたデータのなかに、例えば3というデータがあれば、そのデータの数を出力するという考えで行こうと思っています。 あと、 >where句は「XXXが3のもの」っていう条件を指定します。 とありますが、例えば select count(*) from ~~ where '髪型'=3;(構文間違ってるかも) のように、XXXはフィールド1つに対してしか検索されないのでしょうか? 今まで見てきたのは1つに対してのしかないのですが、全フィールドに対してできるのでしょうか?
お礼
>>今まで見てきたのは1つに対してのしかないのですが、 >>全フィールドに対してできるのでしょうか? >できませんね~ >WHERE句で「AND」とか「OR」を使えば複数項目に >条件を記述できますが、今回の集計ではつかえません>ね そうですか…残念です >フィールド毎の集計をするSQLを考えた方が勉強に >なりますので 考えてみてください。 わかりました。今までアドバイスありがとうございました。