테이블 내의 각 외부 키 ID 인스턴스 수를 카운트하려면 어떻게 해야 합니까?
여기 간단한 SQL 질문이 있습니다.
테이블이 두 개 있습니다.
책들
-------------------------------------------------------
| book_id | author | genre | price | publication_date |
-------------------------------------------------------
주문
------------------------------------
| order_id | customer_id | book_id |
------------------------------------
다음을 반환하는 쿼리를 만들고 싶습니다.
--------------------------------------------------------------------------
| book_id | author | genre | price | publication_date | number_of_orders |
--------------------------------------------------------------------------
즉, 각 책이 주문 테이블에 나타나는 횟수를 카운트하는 'number_of_orders'라는 계산 컬럼과 함께 Books 테이블의 모든 행에 대한 모든 열을 반환합니다.(주문 테이블에 장부가 없는 경우 결과 세트에 장부가 표시되지만 "number_of_orders"는 0이어야 합니다.
지금까지 제가 생각해낸 건
SELECT
books.book_id,
books.author,
books.genre,
books.price,
books.publication_date,
count(*) as number_of_orders
from books
left join orders
on (books.book_id = orders.book_id)
group by
books.book_id,
books.author,
books.genre,
books.price,
books.publication_date
이는 거의 맞지만 완전히 맞지는 않습니다.책자가 Orders 테이블에 나열되지 않더라도 "number_of_orders"는 1이 되기 때문입니다.또한 SQL에 대한 지식이 부족하기 때문에 이 쿼리는 매우 비효율적이라고 확신합니다.
이 쿼리를 작성하는 올바른 방법은 무엇입니까?(내SQL에서 작동해야 하므로 다른 벤더별 기능은 사용할 수 없습니다).
잘 부탁드립니다!
당신의 질문은 거의 정확하며, 그것이 그것을 위한 올바른 방법(그리고 가장 효율적인 방법)입니다.
SELECT books.*, count(orders.book_id) as number_of_orders
from books
left join orders
on (books.book_id = orders.book_id)
group by
books.book_id
COUNT(*)
는 모든 행을 카운트하기 때문에 카운트에 NULL 값을 포함할 수 있습니다.COUNT(orders.book_id)
는 지정된 필드의 NULL 값을 무시하기 때문에 그렇지 않습니다.
SELECT b.book_id,
b.author,
b.genre,
b.price,
b.publication_date,
coalesce(oc.Count, 0) as number_of_orders
from books b
left join (
select book_id, count(*) as Count
from Order
group by book_id
) oc on (b.book_id = oc.book_id)
바꾸다count(*)
로.count(orders.book_id)
잘못 세고 있어null이 아닌 book_id를 카운트합니다.
SELECT
books.book_id,
books.author,
books.genre,
books.price,
books.publication_date,
count(orders.book_id) as number_of_orders
from books
left join orders
on (books.book_id = orders.book_id)
group by
books.book_id,
books.author,
books.genre,
books.price,
books.publication_date
select author.aname,count(book.author_id) as "number_of_books"
from author
left join book
on(author.author_id=book.author_id)
GROUP BY author.aname;
언급URL : https://stackoverflow.com/questions/7424913/how-to-count-the-number-of-instances-of-each-foreign-key-id-in-a-table
'source' 카테고리의 다른 글
크롬 및 파이어폭스의 Javascript에서 Cryptic "스크립트 오류"가 보고됨 (0) | 2022.09.08 |
---|---|
스파크 오류 - 지원되지 않는 클래스 파일의 줄자 버전 (0) | 2022.09.08 |
MySQL 5.7.30에 비해 마리아DB 10.4.13의 퍼포먼스가 느리다 (0) | 2022.09.08 |
Linux 또는 Windows에서 OS X를 컴파일하는 방법 (0) | 2022.09.05 |
문자열의 첫 번째 문자 제거 (0) | 2022.09.05 |