2013-08-18 5 views
0

두 테이블, 데이터 및 에이전트 데이터가 있습니다.1 열의 항목 수를 계산하여 두 개의 열로 나눕니다.

data (agentid, SimCardNumber, ProductName, Agentemail)

는 agentdata (id, agentid, ProductName)

현재 난 단지 두 제품을 취급하고 나는이 쿼리를 시도 agentemail

agentemail | Product1 | Total1 | Product2 | Total2 
----------------------------------------------------------- 
[email protected] | ball  | 5  | bat  | 0 

에 의해 그룹으로이 목록을 보려는하지만 난 두 가지를 보여 문제가 제품 및 그 수를 나란히 표시합니다.

SELECT a.agentid, d.Agentemail, a.ProductName, COUNT(a.ProductName) AS Total 
FROM data AS d, agentdata AS a 
WHERE d.agentid=a.agentid 
GROUP BY a.ProductName 

답변

0

SQL은 이와 같은 병렬 처리를 지원하지 않습니다. 행에서 작동하며 열을 표시하려고합니다.

원래 쿼리 GROUP BY agentid, ProductName 제품 합계에서 에이전트를 분리하는 것이다. 당신은 당신이 두 제품과 더 이상이 있음을 알고있는 경우

, 당신은 쿼리가 단지 두 제품을 나란히 표시하기 위해 쓸 수 있습니다. 세 번째 제품을 추가하면 해당 제품이 포함되지 않습니다.

SELECT a.agentid, d.Agentemail, 
    'ball' AS Product1, 
    SUM(IF(a.ProductName = 'ball', 1, 0)) AS Total1, 
    'bat' AS Product2, 
    SUM(IF(a.ProductName = 'bat', 1, 0)) AS Total2, 
FROM data AS d, agentdata AS a 
WHERE d.agentid=a.agentid 
GROUP BY agentid 

쿼리 이런 종류의 데이터에 대한 빠른 검사를 수행하기위한 OK이지만, 프런트 엔드는 더 단단한 쿼리를 사용하고 거기에 테이블을 구축해야한다.

0
data (agentid, SimCardNumber, ProductName, Agentemail) 

agentdata (id, agentid, ProductName) 

당신은 정말 당신의 테이블 레이아웃에 대해 생각해야한다. 실제로 sence이 가능하기 때문에 어떤 쿼리 ...

  • 당신이 1:1 관계를 원하는가 - agentid == agentidProductName == ProductName 경우,이 레이아웃은 저장 것이다 정규화 된 데이터베이스는 모든에 대해 무엇입니까? (하나의 에이전트, 하나의 제품) : 그럼 당신은 전혀 agentdata-table이 필요 없다.
  • 1:n 관계를 원하십니까? (One Agent, multipe Products) : 데이터 테이블에 ProductName이 필요 없습니다.
  • n:1 관계를 원하십니까? (다중 에이전트, 하나의 제품) : 그러면 agentdata 테이블에 agentid이 필요하지 않습니다.
  • n:n 관계를 원하십니까? (다중 에이전트, 여러 제품) : 그럼 당신은 데이터 테이블에서 ProductName를 제거 agentdata 테이블에서 agentid을 제거하고 최종적으로 데이터 -와 agentdata 테이블에 가입 할 수있는 ProductNameagentid으로 매핑 테이블을 작성해야합니다. 이 레이아웃으로

- 그리고 무엇 데이터를 모르고는 정말이 문제에 당신을 도움이 해답을 제공하는 것은 불가능 경우, 저장됩니다.

관련 문제