-1

クエリのクエリでグラフを作成しようとしていますが、何を試しても 500 エラーが発生します。問題として cfchart タグを突き止めましたが、構文エラーも論理エラーも見つかりませんでした。

<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  
4

1 に答える 1

2

あなたの構文の問題は

SELECT (Licenses/Registrations) AS Percent FROM getData

Percent は予約済みのキーワードであるため、列のエイリアスとして予約済みのキーワードを使用していることを SQL エンジンに知らせるために、括弧または一重引用符を追加する必要があります。

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 UserId countか。クエリの残りの部分は、それ自体が Users テーブルで繰り返されることを示唆しています (これは非常に奇妙だと思います)。したがって、5 は 2 回または 3 回存在する可能性があるため、distinct をカウントすると userid 5 に対して 1 が得られますが、distinct を追加しないと、 2つか3つ...countnon null UserIdsUSerIdUserId

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'
于 2016-06-29T16:24:48.117 に答える