こんばんは。まず始めに申し上げておきますと
この質問は、できるかどうかすらもわかりません。
できなければ「できない」とお答えいただけるだけでも助かります。
では本題です。
SQLのDBで
data1|data2
----+-------
1   | 1
1   | 2
2   | 2
2   | 4
というようにデータが存在したとします。
ここで、data1=data2の場合、同じデータとしてカウントは「1」とされ、data1!=data2の場合にはそれぞれにカウントします。
つまり、ここで望む結果は以下のようになります。
data |count
----+-------
1   | 2
2   | 3
4   | 1

どうでしょうか?
こんなことできるのでしょうか?
もし何らかの方法が存在するならばお教えください。
宜しくお願いします。

A 回答 (5件)

再びstorkです。



>使用しているのはpostgreSQLです..
前回のSQLは試して見ましたか?
postgres使用したことがないんですが、おそらく大丈夫だと思います。

ひっかかるとすればunion句をネストしているところかな(?)
試してみてひっかかったところを補足してもらえば、解決できるかも知れません。

>postgresでvalueは使えないですよね?
valueは単なる別名なので関係ないです。
もし、予約語でひっかかる場合は適当な文字に置き換えてください。
    • good
    • 0
この回答へのお礼

まだまだ理解できない個所はありますが何とか以下の方法でできました。
select data1 as value, count(*)
from (select data1 from test where data1=data2 union all select data1 from test where data1!=data2
union all select data2 from test where data1!=data2)
as tmp group by value;

storkさんのを見本にして少し手を加えたらできました。
「DataCount」というものが結局わからなかったのですが、とりあえず置いときます。(まだまだ勉強が足りん...)
ではありがとうございました。皆さん、本当に感謝してます!

お礼日時:2001/11/29 19:13

下の感じでいかがでしょうか


SQLのDBってMS-SQLserverと言うことですか?

データを3つのセクションに分けて抽出してカウントします。
1.data1=data2のデータ
2.data1<>data2のdata1
3.data1<>data2のdata2

<SQLserverの例>----------------------------------
SELECT value data, COUNT(value) DataCount
FROM (SELECT data1 value FROM table1 WHERE data1 = data2
    UNION ALL
    SELECT data1 FROM table1 WHERE data1 <> data2
    UNION ALL
    SELECT data2 FROM table1 WHERE data1 <> data2) AS tableA
GROUP BY tableA.value
------------------------------------------------
後学のために、差し支えない範囲でどのようなことで使用されるのか教えていただけませんか?

この回答への補足

使用しているのはpostgreSQLです...。
postgresでvalueは使えないですよね?ちょっと良くわかりませんが、、、。valuesは使うんですけど。
>後学のために、差し支えない範囲でどのようなことで使用されるのか教えていただけませんか?
これはちょっと控えさせていただけないでしょうか?
すみません。。。m(_ _)m
どんなシステムかだけ申しますと、ある商品の出荷入荷情報を統計に取るシステムです。
これだけでどうかご勘弁を。。。
もしpostgreSQLでの方法もご存知でしたらお手数ですがお教えいただけないでしょうか?
宜しくお願いいたします。

補足日時:2001/11/29 11:27
    • good
    • 0

シングルクォーテーションを忘れた・・・(^ ^;



SELECT data, Count(data) 'count'
FROM (SELECT data1 'data' from hoge
union all select data2 from hoge where hoge.data1 <> hoge.data2)
GROUP BY data

すいませんでした。m(_ _)m

この回答への補足

すみません、できませんでした。いろいろ調べたり、試してみたりしたんですが、、、。
試してみたといっても書かれている内容を把握できませんので正直「下手な鉄砲」です。
もしよろしければ説明を加えていただけると非常にありがたいのですが、、、。
わがまま言って申し訳ありません。

補足日時:2001/11/29 09:52
    • good
    • 0

動作確認はしていない為、別名の指定にてエラーが起きるかもしれませんが、



SELECT data, Count(data) count
FROM (SELECT data1 data from hoge
union all select data2 from hoge where hoge.data1 <> hoge.data2)
GROUP BY data

で、如何でしょうか?
尚、テーブル名は「hoge」とさせて頂きました。
    • good
    • 0

「望む結果」のdataとcountがどう対応しているのかよくわかりません。


例えば、「望む結果」の1行目のdata 1 とcount 2 は何を指していますか?
count 2 は、多分、一致するレコードがテーブル例の1行目と3行目の2件あるという意味なのだと思うのですが。。。
補足説明をお願いします。

この回答への補足

せ、説明が難しい...。
え~、ではデータが数値だとわかりにくいので、ちょっとテーブル例を文字に変えて1行目から説明します。
data1|data2
----+-------
A   | A
A   | B
B   | B
B   | C

まずはdata1=A,data2=A、これは両方AなのでAが1件(count)となります。
次にdata1=A,data2=Bなので先程のAが++され2になり、
Bが1件countされます。
3行目は両方Bなので先程のBに1件++され、2件になります。
最後にdata1=B,data2=CなのでBは3件になって、Cが1件となり、以下の結果になります。
data |count
----+-------
A   | 2
B   | 3
C   | 1
おわかりいただけたでしょうか?何かいい策をお待ちしております。

補足日時:2001/11/29 09:25
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード


人気Q&Aランキング

おすすめ情報