みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

SELECTでgroup byした時の挙動

環境は
PHP5.3.3
MySQL5.0.95 です。

現在TBL1にURL(address)と、そのURLのタイトルタグの中身(title)と、独自に数えてる数字(count)を入れています。

その1つのアドレスに対してcountの数は色々あるので、
そのcountをアドレスと対にして合計したもの(SUM)で並び替えています。
(分かりづらかったらすいません。addressは主キーではないということです。)

タイトルに関しては最近取得し始めたところで入ってるところと入っていないところがあります。
その状況下で

SELECT address, title, sum(count) as SUM FROM TBL1 where address LIKE "%hoge.com%" group by address order by sum DESC LIMIT 10;

こういうSQL文を使ってSELECTした際に、
hoge.com以下の例えばhoge.com/1.html, hoge.com/2.html, ...
といった感じのURLごとにSUMの数で並び変わるのですが
この場合titleはどのカラムを参照していることになるのですか?

(address) (title) (SUM)
hoge.com/1.html | test1 | 500 |
hoge.com/2.html | test2 | 400 |
hoge.com/3.html |    | 300 |
hoge.com/4.html | test4 | 200 |
hoge.com/5.html | test5 | 100 |
hoge.com/6.html |    | 40 |
hoge.com/7.html | test7 | 20 |
hoge.com/8.html |    | 10 |
hoge.com/9.html |    | 6 |
hoge.com/10.html |    | 5 |

こんな結果だったとして、titleが入っているものと入っていないものの区別がつきません。
入っていないURL(例えばhoge.com/3.html)のaddressカラムも全て空というわけではありません。
逆に入っているものに関しては、全ての行にtitleが入っているわけではありません。
主キーは今回のSELECTとは関係してない"ID"です。
ID | address | count | title
1 | hoge.com/1.html | 3 | test1
2 | hoge.com/1.html | 10 |
3 | hoge.com/1.html | 43 | test1

ID | address | count | title
1 | hoge.com/3.html | 4 | test3
2 | hoge.com/3.html | 3 |
3 | hoge.com/3.html | 42 |

それぞれは主キーに応じてcountが個別にある状態です。
上記は正確ではありませんが、こんな感じです。
こうして共に入ったり入ってなかったりするのにSELECTした結果に
入ってるものと入ってないものが出てくるのが分かりません。

ちなみに、検証すると一番countが多い行にtitleが入っていたらSELECT文にも出てくるというわけではないようです。

なぜtitleが出るものと出ないものがあるのでしょう?
ご教授宜しく御願い致します。

投稿日時 - 2013-09-01 10:22:07

QNo.8244802

すぐに回答ほしいです

質問者が選んだベストアンサー

MySQL の仕様では、GROUP BY した際に一意にならないカラムをSELECT句に指定した場合は、そのグループに属する値のどれかを返します。その中のどれを返すかについては特に基準は有りませんので、不確定です。

詳しくは下記のページを参照して下さい。
http://dev.mysql.com/doc/refman/5.1/ja/group-by-hidden-fields.html

なお、 null 以外は同じ値になるのでしたら、MAX 関数などを使えばその値が取得できるかと。
例) SELECT address, MAX(title), SUM(count) as SUM FROM ・・・

参考URL:http://dev.mysql.com/doc/refman/5.1/ja/group-by-functions.html#function_min

投稿日時 - 2013-09-01 12:49:47

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

(素人目からすると)「挙動は未定義」な気がします。

とりあえずtitleが潰れてしまうのを回避するために

group by address, title

とすることは出来るとは思いますが・・・

投稿日時 - 2013-09-01 12:46:45

あなたにオススメの質問