2016-06-29 9 views
-1

쿼리 쿼리를 사용하여 차트를 만들려고하고 있지만 시도 할 때마다 500 오류가 발생합니다. 문제로 cfchart 태그의 범위가 끝났지 만 구문 오류나 논리 오류를 찾을 수 없었습니다.CFChart가 500 오류를 생성합니다.

<cfquery name="getData" datasource="#dsn#"> 
    SELECT 
      (SELECT Count(UserID) 
      FROM Users 
      WHERE StripeCustomerID IS NOT NULL 
     ) AS 'Licenses' 
      , COUNT(UserID) AS 'Registrations' 
      , UserID AS 'User' 
    FROM Users 
    WHERE DATEDIFF(hour, FirstContact, DateStamp) <= '12' 
    GROUP BY UserID 
</cfquery> 

<cfquery name="queryOfQuery" dbtype="query"> 
    SELECT (Licenses/Registrations) AS Percent FROM getData 
</cfquery> 


<cfchart format="flash"> 
    <cfchartseries type="bar" 
     query="queryOfQuery" 
     itemcolumn="UserID" 
     valuecolumn="Percent" /> 
</cfchart> 

샘플 데이터

Users Table Sample Data 
UserID StripeCustomerID 
35   cus_8LOSlmvEQcfg1g 
36   cus_6ixCBe7aU1MJEt 
50   NULL 
60   cus_6ifLCNmR9rOBCl 
69   NULL 
70   NULL 
72   NULL 
73   NULL 
74   NULL 
+0

대신에 우리가 서버 오류 이메일을 가지고, 그것은 우리에게 500 오류를주지 못할 것이다 당신은'itemcolumn = "사용자 ID"를 지정'하지만 당신은'queryOfQuery' 쿼리 – duncan

+0

(EDIT)에서 열 사용자 ID가없는 이 경우 우리에게 보냈습니다. 나중에 문제가 될 수도 있지만 해결하기 쉽습니다. –

+0

오, 정말 ... 당신은 확실합니까? – duncan

답변

2

귀하의 문법 문제는이 SQL 엔진 노하우를 수 있도록 괄호 나 따옴표를 추가 할 필요가 있으므로

SELECT (Licenses/Registrations) AS Percent FROM getData 

비율이 예약 된 키워드입니다 열 별칭으로 예약 키워드를 사용하고 있습니다.

SELECT (Licenses/Registrations) AS [Percent] FROM getData 

또는

SELECT (Licenses/Registrations) AS 'Percent' FROM getData 

당신은 쉽게 원래의 데이터 집합 %의 열을 추가 할 수 있습니다.

SELECT 
    (SELECT Count(UserID) FROM Users WHERE StripeCustomerID IS NOT NULL)  AS  Licenses, 
    COUNT(UserID) AS Registrations, 
    (SELECT Count(UserID) FROM Users WHERE StripeCustomerID IS NOT NULL)/COUNT(UserID) AS [Percent], 
    UserID AS User 
FROM Users 
WHERE DATEDIFF(hour, FirstContact, DateStamp) <= '12' 
GROUP BY UserID 

플러스 당신이 라이센스에 대한 원하는 궁금합니다. DISTINCT UserIdcount 또는 count 모두 non null UserIds 중 하나입니까? 사용자의 나머지 부분은 USerId이 Users 테이블에서 반복된다는 것을 보여줍니다. (매우 이상하게 보입니다) ... 그래서 UserId 5는 2 ~ 3 번 존재할 수 있으므로 distinct를 추가하면 뚜렷하게 추가하지 않으면 서 userid 5가 1이됩니다. 너 2 또는 3 ...

Are registrations 항상 1입니까? 그렇다면 UserId은 고유하며 기본 쿼리에서 집계가 필요하지 않습니다. 백분율에 대한 대답은 항상 1/라이센스 수와 동일합니다 .......

귀하의 의견에 따르면 원하는 쿼리가 나타납니다.

SELECT 
    COUNT(UserId) AS Registrations 
    ,SUM(CASE WHEN StripeCustomerId IS NOT NULL THEN 1 ELSE 0 END) AS Licenses 
    ,CASE 
     WHEN SUM(CASE WHEN StripeCustomerId IS NOT NULL THEN 1 ELSE 0 END) = 0 THEN 0 
     ELSE COUNT(UserId)/SUM(CASE WHEN StripeCustomerId IS NOT NULL THEN 1 ELSE 0 END) 
    END AS [Percent] 
FROM 
    Users 
WHERE DATEDIFF(hour, FirstContact, DateStamp) <= '12' 
+0

모든 null이 아닌 UserID의 수를 얻고 싶습니다.Distinct UserID는 하나 이상의 라이선스를 구입 한 사람들이 두 번 이상 나타나지 않았는지 확인하기 위해 사용되었습니다. 이 쿼리는 잘 작동하고 있습니다. 도움을 주셔서 감사합니다! –

+0

다행이 당신을 위해 일해 주셨습니다. 다른 사람들이 그 질문에 답을 얻었으니 답을 받아주십시오. 감사. http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work – Matt

+0

사실, 한 가지 더요, 저에게 준 쿼리가 올바르게 나눠지지 않고 라이센스와 백분율이 동일합니다. 가치가 밖으로 인쇄 된 –