4

以下を生成する選択クエリがあります。

customers.city 、 books.title を選択                                                                   
借りた、本、顧客から                                                                         
ここで、loaned.userID = customers.userID                                                                
そして、loaned.bookID = books.bookID
+------------+-----------------------------------+
| | 都市 | タイトル |
+------------+-----------------------------------+
| | ハロゲート | ハロゲート | クロスウサギ | 写真 クロスウサギ
| | ハロゲート | ハロゲート | PHP と MySQL の Web 開発 |
| | ハロゲート | ハロゲート | PHP と MySQL の Web 開発 |
| | ホワイトヘブン | ホワイトヘブン | ギリシャ神話 |
| | ホワイトヘブン | ホワイトヘブン | 恐竜の高騰 |
| | ホワイトヘブン | ホワイトヘブン | 恐竜の高騰 |
| | 販売 | 手品 | 手品
| | 販売 | 手品 | 手品
| | 販売 | 手品 | 手品
| | 販売 | 恐竜の高騰 |
| | 販売 | 恐竜の高騰 |
+------------+-----------------------------------+
セットで 11 行 (0.00 秒)

各都市で最も人気のあるタイトルを見つけたいので、次のようにしました。

都市ごとにグループ化
カウント順(固有タイトル) 降順

ただし、これは正しい結果を生成しません。私は得る:

+------------+-----------------------------------+
| | 都市 | タイトル |
+------------+-----------------------------------+
| | 販売 | 恐竜の高騰 |
| | ホワイトヘブン | ホワイトヘブン | 恐竜の高騰 |
| | ハロゲート | ハロゲート | PHP と MySQL の Web 開発 |
+------------+-----------------------------------+
3 行セット (0.00 秒)

これは、人気順ではなく、アルファベット順に並べられているようです。データを入手したので、必要に応じて注文するのは簡単だと思っていましたが、そうではありませんでした。なんらかの結合またはそれよりも複雑なことを行う必要がありますか?

前もって感謝します。

4

4 に答える 4

2

distinct titleを justに置き換えてみてくださいtitle。これで問題が解決するはずです..

于 2012-10-17T14:00:27.873 に答える
1

私はこの問題に3つのステップでアプローチします。まず、各都市から各本の数を取得します。

select customers.city, books.title, count(books.title) as count
from loaned, books, customers
where loaned.userID = customers.userID
and loaned.bookID = books.bookID
group by customers.city, books.title

このクエリは次の行を返します。

+------------+-------------------------------+-------+
| city       | title                         | count |
+------------+-------------------------------+-------+
| Harrogate  | The cross rabbit              | 1     |
| Harrogate  | PHP and MySQL web development | 2     |
| Whitehaven | Greek Mythology               | 1     |
| Whitehaven | Dino-soaring                  | 2     |
| Sale       | Magic tricks                  | 3     |
| Sale       | Dino-soaring                  | 2     |
+------------+-------------------------------+-------+

そのデータを使用して、それを使用して、最もカウントの多い各都市でグループ化を行います。

select city, max(count) as count
from 
(
  select customers.city , books.title, count(books.title) as count
  from loaned, books, customers
  where loaned.userID = customers.userID
  and loaned.bookID = books.bookID
  group by customers.city, books.title
) as city_book_max_count
group by city

これらの行を返すのは、

+------------+-------+
| city       | count |
+------------+-------+
| Harrogate  | 2     |
| Whitehaven | 2     |
| Sale       | 3     |
+------------+-------+

次に、2つのテーブルのデータを使用して、都市とカウントでそれらを結合し、両方のテーブルで一致する対応する本を取得できます。

select city_book_count.city, city_book_count.title
from 
(
  select customers.city , books.title, count(books.title) as count
  from loaned, books, customers
  where loaned.userID = customers.userID
  and loaned.bookID = books.bookID
  group by customers.city, books.title
) as city_book_count
join
(
  select city, max(count) as count
  from 
  (
    select customers.city , books.title, count(books.title) as count
    from loaned, books, customers
    where loaned.userID = customers.userID
    and loaned.bookID = books.bookID
    group by customers.city, books.title
  ) as city_book_count_temp
  group by city
) as city_book_max_count
on city_book_count.city = city_book_max_count.city
  and city_book_count.count = city_book_max_count.count
于 2012-10-17T14:31:59.787 に答える
1

答えてくれたみんなに感謝します。これはテストの質問だったので、他の人の作品を「カットアンドペースト」したくはありませんでしたが、彼らのロジックを使用して自分のクエリを作成しました。これが私が得たものです:

都市、タイトルを選択
から (
    市としてcustomers.city、タイトルとしてbooks.title、cntとしてcount(books.title)を選択します
    本、顧客、貸与から
    ここで、loanded.userID = Customers.userID
    およびloanded.bookID=books.bookID
    タイトル別グループ、都市
    cnt descによる注文)tblとして
都市ごとのグループ

結果:

+ ------------ + ------------------------------- +
| 市| タイトル|
+ ------------ + ------------------------------- +
| ハロゲート| PHPとMySQLのWeb開発|
| セール| 魔法のトリック|
| ホワイトヘブン| ディノ-急上昇|
+ ------------ + ------------------------------- +
セットの3行(0.00秒)

于 2012-10-18T13:05:38.677 に答える
0

このテーブルからの出力がないため、顧客テーブルを削除しています

select customers.city , books.title , count(books.title) Total                       
from loaned, books, customers                                                                         
where loaned.userID = customers.userID                                                       
and loaned.bookID = books.bookID 
    group by customers.city , books.title order by 3 desc
于 2012-10-17T14:05:17.400 に答える