[SQL] 어떻게 테이블의 각 외래 키 ID의 인스턴스의 수를 계산하려면?
SQL어떻게 테이블의 각 외래 키 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을'모든 행에 대한 모든 열을 반환합니다. 책을 주문 테이블에서 발생하지 않는 경우 (즉, 책은 결과 집합에 표시되어야하지만 "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
책은 주문 표에 표시되지 않을 경우에도 "number_of_orders는"1 것이기 때문에 즉,하지만 꽤 거의 맞습니다. 또한, SQL에 대한 지식의 나의 부족을 주어,이 쿼리가 매우 비효율적이다 확신합니다.
이 쿼리를 작성하는 올바른 방법은 무엇입니까? (무엇의 가치를 들어, MySQL을 작업이 요구는, 그래서 다른 어떤 벤더 고유의 기능을 사용할 수 없습니다).
사전에 감사합니다!
해결법
-
==============================
1.귀하의 질의는 거의 바로이며이를위한 올바른 방법 (그리고 가장 효율적인)입니다
귀하의 질의는 거의 바로이며이를위한 올바른 방법 (그리고 가장 효율적인)입니다
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
그것은 주어진 필드에 NULL 값을 무시하기 때문에 COUNT (orders.book_id이)하지 않는하면서, 모든 행을 계산하기 때문에 COUNT (*)는 계산에 NULL 값을 포함 할 수있다.
-
==============================
2.변경 수 (*) 카운트 (orders.book_id)
변경 수 (*) 카운트 (orders.book_id)
-
==============================
3.
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)
-
==============================
4.당신은 잘못된 일을 계산하고 있습니다. 당신은 null이 아닌 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
-
==============================
5.
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;
from https://stackoverflow.com/questions/7424913/how-to-count-the-number-of-instances-of-each-foreign-key-id-in-a-table by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 행은 테라 데이타에서 무엇을 사용 위의 제한은 없습니다? (0) | 2020.07.21 |
---|---|
[SQL] 테이블 변경 쿼리에 대한 MySQL의 매우 느린 (0) | 2020.07.21 |
[SQL] PostgreSQL의에서 테이블을 참조 목록 저장 기능 (0) | 2020.07.21 |
[SQL] 포스트 그레스에서 (인덱스 포함) 테이블을 복사 (0) | 2020.07.21 |
[SQL] 주 번호에서 일주일의 시작 날짜와 주 종료 날짜를 가져옵니다 (0) | 2020.07.21 |