1

オラクルの場合、

テーブルが 2 つあります。1 つはストア、もう 1 つはブックですが、ストア ID (PK FK) で接続されています。本の数が一番多い店の名前を挙げたいと思います。しかし、結果はすべての店舗の注文を示していましたが、私はただ最高のものを求めています.

    SELECT STORE.STORE_NAME
    FROM STORE, BOOK
    WHERE STORE.STORE_ID=BOOK.BOOK_STOREID
    GROUP BY STORE.STORE_NAME
    ORDER BY COUNT(BOOK.BOOK_STOREID) DESC;

結果は

ストア: D E F B A C

「D」のみである必要があります。私は何をすべきか?ありがとうございました。

4

2 に答える 2

2

試す

SELECT STORE_NAME
FROM
(SELECT STORE.STORE_NAME
    FROM STORE, BOOK
    WHERE STORE.STORE_ID=BOOK.BOOK_STOREID
    GROUP BY STORE.STORE_NAME
    ORDER BY COUNT(BOOK.BOOK_STOREID) DESC)
WHERE rownum = 1

ここにsqlfiddleのデモがあります

ところで、row_number() 関数を使用することもできます

select STORE_NAME
from
(SELECT STORE.STORE_NAME, 
       row_number() over( order by COUNT(BOOK.BOOK_STOREID)desc) rn
    FROM STORE join BOOK on STORE.STORE_ID=BOOK.BOOK_STOREID
group by STORE.STORE_NAME)
where rn = 1;

更新本の数が最大のすべての店舗を表示する場合は、row_number の代わりに rank を使用できます。

select STORE_NAME
from
(SELECT STORE.STORE_NAME, 
       rank() over( order by COUNT(BOOK.BOOK_STOREID)desc) rn
    FROM STORE join BOOK on STORE.STORE_ID=BOOK.BOOK_STOREID
group by STORE.STORE_NAME)
where rn = 1;
于 2013-05-19T13:34:47.383 に答える
1

楽しみのために、別の定式化を示します。

with store_counts as (
  select store_name,
         count(*) books
    from store join book on store_id=book_storeid
group by store_name)
select *
from   store_counts
where  books = (
         select max(books)
         from store_counts)
于 2013-05-20T11:43:42.007 に答える