2012-10-18 4 views
1

가격 "그룹"별로 데이터베이스 테이블에서 가격을 그룹화하는 방법을 찾으려고합니다.사용자 지정 쿼리 계산 및 그룹화

+-------+------------------+ 
| Field | Type    | 
+-------+------------------+ 
| id | int(11) unsigned | 
| name | varchar(255)  | 
| price | varchar(30)  | 
+-------+------------------+ 

사람들은 내 데이터베이스 테이블의 관련 필드입니다 그래서 내 데이터베이스 테이블은 다음과 같이 보인다. 내가 달성하고자하는 것은 가격 범위별로 결과를 그룹화하는 쿼리를 실행하여 $ 1에서 $ 10 사이의 항목이 그룹 # 1에 들어갈 것입니다. $ 11 $ 20 등의 가격 그룹 # 2로 갈 것입니다 ... 그래서 다음과 같이한다 : 나는 내가가 시작하는 곳에 정말 잘 모르겠어요 때문에 해봤 코드가없는

+-------------+------------+ 
| price_group | item_count | 
+-------------+------------+ 
| $1-$10  | 10   | 
+-------------+------------+ 
| $11-$20  | 8   | 
+-------------+------------+ 
| $21-$30  | 22   | 
+-------------+------------+ 
| $31-$40  | 58   | 
+-------------+------------+ 
| $41-$40  | 3   | 
+-------------+------------+ 

이. 여전히 단서를 찾고 있습니다.

+0

죄송 합니다만 가격이 varchars로 저장되었다는 뜻입니까? 또한 몇 개의 price_groups가 있습니까? – raina77ow

+0

예, 가격은 현재 varchar로 저장됩니다. 코드를 살펴보고 10 진수로 변경할 수 있는지 확인해야하지만 가능할 것으로 생각됩니다. 가격 그룹의 수는 내가 원하는만큼 많을 수 있습니다.하지만 우리는 7 달러를 결정하고 100 달러까지 올랐습니다. –

+0

이 작업을 수행하기 위해 필드 유형을 Decimal로 변경했습니다. –

답변

2

가격 (그룹 부서를 지정했기 때문에 1로 오프셋)을 10으로 나눈 값을 정수로 캐스팅 할 수 있습니다. $ 21- $ 30의 그룹을 생각해보십시오. 당신이 1을 뺀다면 그것은 $ 20- $ 29가 될 것입니다. 10으로 나누고 (정수로 변환), 해당 그룹의 모든 것이 $ 2를 반환하여 가격 그룹에 대한 상수를 제공합니다.

SELECT CAST((price - 1)/10 AS UNSIGNED) AS price_group, 
    SUM(item_count) as total_item_count 
FROM table_name 
GROUP BY price_group 

또한 해당 그룹의 합계를 얻으려는 시도는 SUM(item_count)입니다.

여기에 표시된 price_group은 십진 자릿수입니다. 예를 들어 "$ 21- $ 30"그룹의 경우 price_group이 "2"가됩니다.

+0

감사합니다. 이것은 훌륭하게 작동했습니다. SUM이 아닌 COUNT를 사용하고 있지만. COUNT는 총 항목 수를, SUM은 항목의 SUM을 제공합니다 (예 : SUM (1, 2, 3, 4) = 10. COUNT (1, 2, 3, 4) = 4). –

관련 문제