0

私は完全に宿題にこだわっています。私はSakilaサンプルデータベースを使用しています。10本以上のホラー映画をレンタルしたすべての顧客のリストを表示するクエリを作成することになっています。これは私がこれまでに持っているものです:

select CONCAT(c.first_name, " ", c.last_name) AS "Customer name", 
FROM customer AS c

INNER JOIN rental AS r
ON c.customer_id = r.customer_id

inner join  inventory as i
on i.inventory_id = r.inventory_id

inner join  film_category as fc
on i.film_id = fc.film_id
 inner join 
(select * from category as ca
where ca.name = 'horror') as h
 on h.category_id = fc.category_id 
 ;

ホラー映画をレンタルしたすべての顧客(846)を返品することはできますが、ホラー映画を10本以上レンタルした顧客のみを取得するにはどうすればよいですか?COUNT関数が必要なことはわかっていますが、これを入れると、1人で、ホラー映画のレンタルではなく、846人のカウントになります。私の論理は、この時点で私を失敗させています。助けてください!

4

3 に答える 3

1

残念ながら、問題のサンプルデータベースはわかりませんが、答えとしては、これが私の応答に影響を与えることはないと思います。

COUNTを使用する場合は、GROUPBYも使用して集計カウントを取得する必要があります。

HAVING句を使用してGOUPBYを確認することもできます。

于 2013-03-05T20:54:36.830 に答える
1

誰かが簡単な食事を必要とする場合:

SELECT R.customer_id, COUNT(*) AS cnt 
FROM sakila.rental R LEFT JOIN sakila.inventory I ON R.inventory_id = I.inventory_id 
LEFT JOIN sakila.film F ON I.film_id = F.film_id 
LEFT JOIN sakila.film_category FC on F.film_id = FC.film_id 
LEFT JOIN sakila.category C ON FC.category_id = C.category_id 
WHERE C.name = "Horror" 
GROUP BY R.customer_id HAVING cnt > 10
于 2013-08-05T20:26:12.197 に答える
0

左結合/内部結合なしでもクエリを記述できます。ホラーレンタルが10を超える顧客はいないため、結果が空白であっても混乱しないように注意してください(2で試してみてください)。

SELECT cu.first_name, cu.last_name, COUNT(r.rental_id) as horror_film_count
FROM customer AS cu, rental AS r, inventory as i, film as f, category as ca, 
film_category as fc
WHERE cu.customer_id = r.customer_id 
AND r.inventory_id = i.inventory_id
AND i.film_id = f.film_id
AND f.film_id = fc.film_id
AND fc.category_id = ca.category_id
AND ca.category_id = 11
GROUP BY cu.customer_id
HAVING horror_film_count > 10
于 2017-10-26T11:23:24.380 に答える