"GROUP BY"의 모든 항목 수에 대한 "카운트(*)"의 백분율 가져오기
예를 들어, 「특정 카테고리에서 이용 가능한 아이템 수」와 「전체 아이템 수」의 비율이 필요합니다.다음과 같은 MySQL 테이블을 고려하십시오.
/*
mysql> select * from Item;
+----+------------+----------+
| ID | Department | Category |
+----+------------+----------+
| 1 | Popular | Rock |
| 2 | Classical | Opera |
| 3 | Popular | Jazz |
| 4 | Classical | Dance |
| 5 | Classical | General |
| 6 | Classical | Vocal |
| 7 | Popular | Blues |
| 8 | Popular | Jazz |
| 9 | Popular | Country |
| 10 | Popular | New Age |
| 11 | Popular | New Age |
| 12 | Classical | General |
| 13 | Classical | Dance |
| 14 | Classical | Opera |
| 15 | Popular | Blues |
| 16 | Popular | Blues |
+----+------------+----------+
16 rows in set (0.03 sec)
mysql> SELECT Category, COUNT(*) AS Total
-> FROM Item
-> WHERE Department='Popular'
-> GROUP BY Category;
+----------+-------+
| Category | Total |
+----------+-------+
| Blues | 3 |
| Country | 1 |
| Jazz | 2 |
| New Age | 2 |
| Rock | 1 |
+----------+-------+
5 rows in set (0.02 sec)
*/
기본적으로 다음과 같은 결과 세트가 필요합니다.
/*
+----------+-------+-----------------------------+
| Category | Total | percentage to the all items | (Note that number of all available items is "9")
+----------+-------+-----------------------------+
| Blues | 3 | 33 | (3/9)*100
| Country | 1 | 11 | (1/9)*100
| Jazz | 2 | 22 | (2/9)*100
| New Age | 2 | 22 | (2/9)*100
| Rock | 1 | 11 | (1/9)*100
+----------+-------+-----------------------------+
5 rows in set (0.02 sec)
*/
단일 쿼리에서 이러한 결과 세트를 얻으려면 어떻게 해야 합니까?
잘 부탁드립니다.
SELECT Category, COUNT(*) AS Total , (COUNT(*) / (SELECT COUNT(*) FROM Item WHERE Department='Popular')) * 100 AS 'Percentage to all items',
FROM Item
WHERE Department='Popular'
GROUP BY Category;
MySql 구문은 잘 모르겠지만 그림과 같이 하위 쿼리를 사용할 수 있습니다.
이것으로 충분합니다.
SELECT I.category AS category, COUNT(*) AS items, COUNT(*) / T.total * 100 AS percent
FROM Item as I,
(SELECT COUNT(*) AS total FROM Item WHERE Department='Popular') AS T
WHERE Department='Popular'
GROUP BY category;
SET @total=0;
SELECT Category, count(*) as Count, count(*) / @total * 100 AS Percent FROM (
SELECT Category, @total := @total + 1
FROM Item
WHERE Department='Popular') temp
GROUP BY Category;
이 방법으로 하는 장점은 이 기능을 복제하지 않아도 된다는 것입니다.WHERE
다음 번에 누군가 상태를 업데이트하기 위해 들렀을 때 시한폭탄이 울리지만 다른 두 곳에 있다는 것을 깨닫지 못합니다.
중복 방지WHERE
가독성도 향상됩니다.특히,WHERE
보다 복잡합니다(복수의 조인 등).
언급URL : https://stackoverflow.com/questions/3061655/getting-percentage-of-count-to-the-number-of-all-items-in-group-by
'source' 카테고리의 다른 글
포인터로 붕괴되는 어레이에 대한 예외? (0) | 2023.01.27 |
---|---|
아스타리스크*는 Python에서 무엇을 의미합니까? (0) | 2023.01.27 |
'getaddrinfo EAI_AGAIN' 오류의 원인은 무엇입니까? (0) | 2023.01.27 |
@Test 후 롤백 트랜잭션 (0) | 2023.01.27 |
Python 2.X의 범위와 xrange 함수의 차이점은 무엇입니까? (0) | 2023.01.27 |