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が出るものと出ないものがあるのでしょう?
ご教授宜しく御願い致します。
お礼
回答ありがとうございます。100ですか。すごいですね。