下記のようなテーブルから重複なくSELECTしたいと考えています。

temp_table
------------------------
| id | name_1 | name_2 |
------------------------
| 1 | aaaaaa | bbbbbb |
| 2 | cccccc | dddddd |
| 3 | cccccc | dddddd |
| 4 | aaaaaa | bbbbbb |
| 5 | cccccc | jjjjjj |
------------------------

SELECT結果が下記の要になるのが理想です。
DISTINCTを利用して
SELECT DISTINCT id, name_1 || name_2 AS name FROM temp_tableとしましたがダメでした。

---------------------
| id | name     |
---------------------
| 3 | ccccccdddddd |
| 4 | aaaaaabbbbbb |
| 5 | ccccccjjjjjj |
---------------------

よい方法をご存じの方、宜しくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

distinct の使い方が間違ってます。


select distinct on (name_1, name_2) id, name_1, name_2 from temp_table;
    • good
    • 0

idが邪魔ですね



SELECT DISTINCT name_1 || name_2 AS name FROM temp_table

なら大丈夫です
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す

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

このQ&Aと関連する良く見られている質問

Qコマンドプロンプトのdelと削除ソフトについて

ファイルを強制的に削除するソフトがありますが、それはコマンドプロンプトで「del」コマンドを打ったものと同じ操作をするのでしょうか?
それと、ファイルを右クリックして「削除」するのと、コマンドプロンプト上から「del」コマンドにより削除するのは同じ動作でしょうか?
コマンドプロンプトからなら削除できないファイルが削除できると聞くので違うと思うのでですが?
ご存知あれば教えていただければ幸いです。

Aベストアンサー

全く自信なくて、私が勝手に思い込んでることだけど。
なので、回答と呼べるものとは言えないと思うけど、一応ね。(^.^)

>コマンドプロンプトからなら削除できないファイルが削除できると聞くので違うと思うのでですが?
これはほとんどが動画ファイルの付属情報の破損からだったと思う。
以前調べたものだと、エクスプローラーで対象のフォルダを開いたとき、動画ファイルの属性(だったかな?)の情報を取りにいって、そのままの状態を保持してしまい、ファイルを掴んじゃって削除できないってものだったと思う。
これは、そのフォルダを開くたびに掴みにいくから、エクスプローラーでは削除できない(だったとおもう)
つまり、エクスプローラーを介さずに、コマンドプロンプトから削除すれば、エクスプローラーがその破損情報を掴みにいかないので、ファイルがフリー状態になり削除が可能になる。(のかなぁ?)
ただ、上書きは可能なこと多いんだよなぁ~・・・。

とすると、最終的にOSへの削除命令伝達における命令が通る系統が違うんじゃないかなぁ~と個人的には思う。
つまり、エクスプローラーというシェルを使うのか使わないのかの違いじゃないかな?
もっとも、コマンドプロンプトで削除命令をエクスプローラー経由でOSに伝えてるかもしれないけど・・・ね。(^_^;)

全く自信なくて、私が勝手に思い込んでることだけど。
なので、回答と呼べるものとは言えないと思うけど、一応ね。(^.^)

>コマンドプロンプトからなら削除できないファイルが削除できると聞くので違うと思うのでですが?
これはほとんどが動画ファイルの付属情報の破損からだったと思う。
以前調べたものだと、エクスプローラーで対象のフォルダを開いたとき、動画ファイルの属性(だったかな?)の情報を取りにいって、そのままの状態を保持してしまい、ファイルを掴んじゃって削除できないってものだった...続きを読む

QSelect結果をSelect

お世話になります。

以下のSQL文のイメージでselectの結果をさらにselectしたいのですが”subquery has too many columns”というエラーを吐かれます。
Postgreに合った書き方がお分かりでしたら教えてください。
よろしくお願いします。


select *
from [DB名]
where [パスワード] = 'test'
IN ( select * from [DB名] where [ユーザID]='1111' order by [更新日] desc limit 3)


[やりたいこと]
テストDBからユーザIDが1111の行を更新日をキーに降順で並べ、先頭から3行分を取り出す。
その3行からパスワードが"test"のものをselectしたい。

Aベストアンサー

select *
from ( select * from [DB名] where [ユーザID]='1111' order by [更新日] desc limit 3)
where [パスワード] = 'test'

って感じでしょうか。
手元にテスト環境が無いので未検証です。

Qコマンドプロンプトで、特定の文字を削除したい。

お世話になります。

コマンドプロンプトで、ファイル内の特定の文字を削除したいのですが、どのようにすればよいでしょうか。

deleteコマンドなど、ファイル自体を削除するものは見つけられたのですが、ファイル内の文字を消すコマンドが見つけることができませんでした。。。

Aベストアンサー

ファイルの中にコマンドプロンプトの特殊記号が含まれていないとすると、

del outfile.txt 2>NUL
for /f "usebackq delims=" %%A in (somefile.txt) do call :sub "%%A"
元のファイルを置き換えるなら move outfile.txt somefile.txt
goto :EOF
:sub
set A=%~1
>>outfile.txt echo %A:keshitaimojiretsu=%

元のファイルの中に含まれている内容が把握できる場合でないと危険です。
そうでないとすると、VBScript等できちんとやらないといけない。

Q無視されるdistinct

お世話になります

 大規模商談をまとめた営業のリストを作るSQLを書こうとしています。
 
営業部員テーブル (test.person)

id | name
----+------
1 | 山田
2 | 高橋
3 | 田中

商談テーブル (test.deal)

id | person_id | customer | amount
----+-----------+----------+--------
1 | 1 | XX商事 | 20000
2 | 3 | BB電機 | 10000
3 | 2 | ZZ不動産 | 2000
4 | 1 | RR証券 | 8000


期待している検索結果

name | amount | customer
------+--------+----------
山田 | 20000 | XX商事
田中 | 10000 | BB電機
高橋 | 2000 | ZZ不動産

下記のようなSQLを書きました。

select distinct name,amount,customer
from test.deal,test.person
where person.id=deal.person_id
order by amount desc

 しかし、nameをdistinctしているにもかかわらず、結果は下記の通り、「山田」が重複しています。

name | amount | customer
------+--------+----------
山田 | 20000 | XX商事
田中 | 10000 | BB電機
山田 | 8000 | RR証券
高橋 | 2000 | ZZ不動産

いろいろと調べて、group by を使えばいい、というようなやり方を示している例も多かったのですが、それもうまくいきません。(必要であれば載せます)

期待通りの結果を得るにはどのようなSQLを書けばよろしいでしょうか。
よろしくお願いいたします。

お世話になります

 大規模商談をまとめた営業のリストを作るSQLを書こうとしています。
 
営業部員テーブル (test.person)

id | name
----+------
1 | 山田
2 | 高橋
3 | 田中

商談テーブル (test.deal)

id | person_id | customer | amount
----+-----------+----------+--------
1 | 1 | XX商事 | 20000
2 | 3 | BB電機 | 10000
3 | 2 | ZZ不動産 | 2000
4 | 1 | RR証券 | 8000


期待している検索結果

...続きを読む

Aベストアンサー

SQLの基本操作の一つである「group by」を、理解できていませんね。
基本操作から、しっかり勉強すべきです。

>実はgroup by も試してみたのですが、どうもうまくいきません。
>とりあえず、下記のようなSQLを書いてみました。
>select name,max(amount),customer
>from test.deal,test.person
>where person.id=deal.person_id
>group by name
>order by max(amount) desc

理解できていないまま、いい加減なことをやっていますよ?

> ERROR: column "deal.customer" must appear in the GROUP BY clause or be >used in an aggregate function;
>言われるままに、group byの中にcustomerを入れると下記のような結果に
>なり、group byを付けても付けなくても同じになります

エラーの内容を取り違えて、デタラメな対処を行っていますよ?

>group by を使用するとして、名前の重複を避けるにはどのようにしたら

名前の重複を起こさない(つまり、どのデータを活かすか?)が、不明瞭だし、SQLとして指定されていないのですよ。
どうしたい(どのデータを活かしたい)のですか?

また、得たい結果(仕様)で、まだまだ不明瞭な点があります。

person_id毎に、最大のamountを得るのは簡単です。
しかし、同じperson_idで求めた最大のamountが、二箇所以上のcustomerで記録されていた場合、どういう結果を得たいのでしょうか?

理解できていないのに、デタラメの上にさらにデタラメを繰り返すのでなく、簡単なクエリから順次、組み立てていきましょう。

今回のクエリは、次の(1)~(3)の順に組み立てていくと、具体的な仕様が明確でない部分が明確になり、SQLの理解も進むと思います。

(1)test_deal表で、person_id毎に最大のamountを得る
(2)(1)に該当するtest_deal表のidを得る
 →全idとするのか、最大のidあるいは最小のidとするのか、仕様の明確化が必要
(3)(2)のidと、test_person表を結合する

SQLの基本操作の一つである「group by」を、理解できていませんね。
基本操作から、しっかり勉強すべきです。

>実はgroup by も試してみたのですが、どうもうまくいきません。
>とりあえず、下記のようなSQLを書いてみました。
>select name,max(amount),customer
>from test.deal,test.person
>where person.id=deal.person_id
>group by name
>order by max(amount) desc

理解できていないまま、いい加減なことをやっていますよ?

> ERROR: column "deal.customer" must appear in the GROUP BY...続きを読む

Qscpコマンドでリモートサーバのファイルを削除したい

winscpでリモートサーバのファイル削除が出来るので、てっきりscpコマンドでオプションがあるのかと思ったのですが、見当たりません。scpコマンドでリモートファイルの削除は可能でしょうか?誰か教えて!

Aベストアンサー

1番の方と同じ意見ですが、
ssh ホスト名 コマンド
でリモートサーバ上でコマンドが実行できますので

ssh SSH_SERVER "rm testfile"

のように実行するの一般的かと。

Q|| の意味とは?

CASE WHEN a.image_name1 IS NOT NULL THEN '".BASE_DIR_NAME."' || a.image_dir1||'s'|| a.image_name1";

この中の||とはどういう意味なのでしょうか?
PHP でいう $a.'bcd'.$d みたいなものなのでしょうか?

Aベストアンサー

文字連結です。

Qコマンドプロンプトで完全削除

パソコンの中身を完全削除したいと思い、以前コマンドプロンプトでのやり方を教えてもらったのですが、「cipherは内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチファイルファイルとして認識されていません。」とメッセージが出ます。

どの様に削除すればいいのでしょうか?
詳しい方宜しくお願いします。

Aベストアンサー

エラー表示になります?。まず最初に再起動後、C・Dドライブのエラーチェックしてデフラグを実行して下さい。
それからコマンド入力します。それでもエラーが表示されれば、/の後ろのwを入れないで、/cで実行して下さい。
もし、それでも同じ症状なら、何らかのファイルが壊れていると思われますので、このやり方では削除は無理と考えて下さい。
フリーソフトでの削除をお願いします。

参考URL:http://www.vector.co.jp/vpack/filearea/win/util/file/del/

QDISTINCTとGROUP BYの違い

DISTINCTとGROUP BYの違いが分かりやすいホームページを教えてください。
ターミナルの結果のサンプルが書かれているホームページが理解しやすいです。

Aベストアンサー

"DISTINCT"はSQL文を実行した結果のテーブルから、重複している行を単純に削除して、重複のない結果をだすものです。それに対し"GROUP BY"は、結果のテーブルに対してグループ化を行い、さらに集計をすることを可能にします。よって、"GROUP BY"は主に集計関数と共に用いることが多いです。
確かに、単純に重複を取り除く目的だったらどちらでも結果は同じことになりますが、集計を必要とするような場合は"GROUP BY"を使うことが必至です。

↓の掲示板のレスで、この2つの違いについて例を挙げて説明されています。http://fukkey.dyndns.org/pins/ora/020430/42660.html

また、参考URLに挙げたフォーラムの記事でも、この2つの使い分けについて論議されていますので、参考になれば幸いです。

"GROUP BY"を用いて集計する方法の具体例は、以下のページで解説されていますので、参考にして下さい。
http://www.atmarkit.co.jp/fnetwork/rensai/sql03/sql1.html
http://www.techscore.com/tech/sql/05_08.html

参考URL:http://otn.oracle.co.jp/cgi-bin/non/msgview_r.cgi?communityid=otn-489965&bbsid=1&no=38927&view=8

"DISTINCT"はSQL文を実行した結果のテーブルから、重複している行を単純に削除して、重複のない結果をだすものです。それに対し"GROUP BY"は、結果のテーブルに対してグループ化を行い、さらに集計をすることを可能にします。よって、"GROUP BY"は主に集計関数と共に用いることが多いです。
確かに、単純に重複を取り除く目的だったらどちらでも結果は同じことになりますが、集計を必要とするような場合は"GROUP BY"を使うことが必至です。

↓の掲示板のレスで、この2つの違いについて例を挙げて説明されていま...続きを読む

Q~以外を削除する場合(rmコマンド)

linuxのコマンドで
~以外のファイル、ディレクトリを全て削除したい時は
どのような記述をすれば良いのでしょうか?
シェルスクリプトではなくrmコマンド1つで削除したのいですが…

例: tar以外のファイル・ディレクトリを
   すべて削除したい場合など

どなたかご存知の方がいらっしゃったら
教えてください。よろしくお願い致します。

Aベストアンサー

rm コマンドのみという訳にはいきませんが基本的なコマンドを組み合わせると実現可能と思います。

「名前が tar で終わるもの以外のファイル・ディレクトリを削除する」場合だと

ls | grep -v -E 'tar$' | xargs rm -r

となります。

ファイルの一覧を取得し ( ls )
'tar'で終わるもの以外を抽出し ( grep )
その結果を rm -r の引数に指定して実行 ( xargs )

という流れです。

ファイルを削除するような操作については失敗するとダメージが大きいので、事前にテストして動作を確認すると良いとおもいます。また rm -r -i としてそれぞれのファイルについて、削除の問い合わせをするのも有効です。

Qpg_data_seekについて

表内の指定した行に移動する関数と思われるpg_data_seekという関数を使用したいと思っているのですが、

Fatal error: Call to undefined function pg_data_seek() in ~~~ on line 52

となってしまいます。

http://66.102.7.104/search?q=cache:nHqnLP1laDsJ:osaka.cool.ne.jp/rh-riko/PHP_ref/php-postgresql.htm+pg_data_seek&hl=ja&lr=lang_ja

には書かれているのでおそらく関数自体は存在しているようです。何か設定など問題なのかなと思っています。

解決策を知っている方教えていただけますでしょうか?

Aベストアンサー

まず、使用している言語はPHPでよろしいでしょうか。
その前提で書かせていただきます。

PHPのマニュアルを見た限りでは、
他のDBについては、xxx_data_seekという関数があるのですが、
pg_data_seekという関数は見当たりません。
多分、インターネットで検索しても、ほとんど出てこなかったのではないでしょうか。

関数を使う際は、きちんとしたマニュアルをご覧になった方が良いと思います。
(URLを下に書いておきます)
個人の方が作成したページだと、間違えていることもありますし・・・。

具体的に、作成されようとしている処理が分からないのですが、
他の関数で、どうにか実現できないでしょうか。

私が、PHP経験が浅いので自信がないのですが、
見当違いな回答だったらすみません。

参考URL:http://jp.php.net/manual/ja/index.php


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング