2011-10-04 10 views
1

私は今、これが私の「タグ」のテーブルで、自分のサイトにタグを追加するには、システムに取り組んでいます:類似の行があるときに最大の列値を持つ行を取得しますか?

URL   | Tag  | UID 
example1.com humor  123 
example1.com humor  342 
example1.com humor  234 
example1.com blog  123 
example1.com blog  432 
example1.com food  221 
example2.com blog  432 

私は各サイトのタグを合計する次のクエリを使用しています:

SELECT *, COUNT(*) as SUM 
FROM History 
GROUP BY URL, UID 

だから私は得る:最後に

URL   | Tag  | Sum 
example1.com  humor 3 
example1.com  blog  2 
example1.com  food  1 
example2.com  blog  1 

(これは私が方法がわからないものです)私は、各グループ化されたURLの最大の合計で唯一の2行を取得する必要がありますので、私は何を知っていますアクチュアlサイトの主題:

URL   | Tag  | Sum 
example1.com  humor 3 
example1.com  blog  2 
example2.com  blog  1 

どうすればいいですか?

+0

例が矛盾しているようです。 2番目の結果セットは 'example1'に対して1行しか持たず、3番目の結果セットは2つです。 – Mat

+0

'SUM(1)'は通常 'COUNT(*)'と書かれています。 –

+0

タグテーブルには主キーが必要です。 3つのユーモア、2つのブログ、1つの食べ物の記録があるという事実の意義は何ですか?何かを何度も言ってもそれは真実にはなりません。 (URL、Tag)の組み合わせは一意でなければなりません。もちろん、それは残りの質問を難解にしますが、正確な基礎から始める方が良いでしょう。一つの基本は、テーブルには同じ行が含まれてはならないということです。 –

答えて

2

結果に自己結合を使用してみてください。 This articleには素晴らしい例がいくつかあります。いくつかのクエリをネストするのではなく、最初のクエリからテンポラリテーブルを作成し、それを2番目のステップ(各グループから最大の「合計」を得る)に使用する方が簡単で簡単です。そのページの「各グループから上位N行を選択する」を参照してください。

+0

私は新しいテーブルを作成しました。私はこのクエリをネストする方法を知らなかったので。 – lisovaccaro