2014-10-18 23 views
0

我想有這樣的事情結束了,但邏輯是在迴避我獲取表中重複項的百分比和數量的問題?

SELECT entity_id 
    , customer_email 
FROM sales_flat_order; 

顯示,你可以想像幾個電子郵件地址,他們中的一些愚弄一些獨特。

我想我可以做這樣的事情來獲得計數(雖然沒有成功)

SELECT (COUNT(DISTINCT customer_email)) AS 'All Orders' 
    , (COUNT(DISTINCT customer_email) - COUNT(SELECT customer_email FROM sales_flat_order GROUP BY customer_email HAVING COUNT(*) = 1) AS 'Single Orders' 
    , (COUNT(DISTINCT customer_email) - COUNT(SELECT customer_email FROM hubsales_flat_order GROUP BY customer_email HAVING COUNT(*) > 1) AS 'Repeat Orders' 
FROM sales_flat_order; 

即使在此之後得到的工作,這將是試圖讓一個百分比之後相當複雜。我怎樣才能最好地處理這個問題,並最好地解決這個問題?

爲我的查詢中的錯誤是目前

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'SELECT customer_email FROM sales_flat_order GROUP BY customer_email HAVIN' at line 2 

編輯

我已經得到了遠在此我的SQL查詢但有錯誤

SELECT (COUNT(DISTINCT customer_email)) AS 'All Orders' 

    , (COUNT(DISTINCT customer_email) - (
     SELECT COUNT(*) FROM(SELECT customer_email FROM hubsales_flat_order GROUP BY customer_email HAVING COUNT(*) = 1) AS 's') 
     ) AS 'Single Orders' 

    , (COUNT(DISTINCT customer_email) - (
     SELECT COUNT(*) FROM(SELECT customer_email FROM hubsales_flat_order GROUP BY customer_email HAVING COUNT(*) > 1) AS 'r') 
     ) AS 'Repeat Orders' 

FROM hubsales_flat_order; 

結束錯誤是

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''s') 
    ) AS 'Single Orders' 

回答

0

這很漂亮,但這裏是

SELECT 'All Orders' AS 'Type' 
     , (
      SELECT COUNT(customer_email) FROM foodhubsales_flat_order 
     ) AS 'Count' 

     , CONCAT(
      ROUND(
      (
       SELECT COUNT(customer_email) FROM foodhubsales_flat_order 
      )/(
       SELECT COUNT(customer_email) FROM foodhubsales_flat_order 
      ) * 100, 1), '%') AS 'Percentage' 

UNION ALL 

SELECT 'Single Orders' AS 'Type' 
     , (
      COUNT(
       DISTINCT customer_email 
      ) - (
       SELECT COUNT(*) FROM(
        SELECT customer_email FROM foodhubsales_flat_order GROUP BY customer_email HAVING COUNT(*) > 1 
       ) s 
      ) 
     ) AS 'Count' 

     , CONCAT(
      ROUND(
      (

      COUNT(
       DISTINCT customer_email 
      ) - (
       SELECT COUNT(*) FROM(
        SELECT customer_email FROM foodhubsales_flat_order GROUP BY customer_email HAVING COUNT(*) > 1 
       ) s 
      ) 
     )/(
       SELECT COUNT(customer_email) FROM foodhubsales_flat_order 
     ) * 100, 1), '%') AS 'Percentage' 

FROM foodhubsales_flat_order 

UNION ALL 

SELECT 'Repeat Orders' AS 'Type' 
     , (
      COUNT(
       customer_email 
      ) - (
       SELECT COUNT(*) FROM(
        SELECT customer_email FROM foodhubsales_flat_order GROUP BY customer_email HAVING COUNT(*) = 1 
       ) s 
      ) 
     ) AS 'Count' 

     , CONCAT(
      ROUND(
      (

      COUNT(
       customer_email 
      ) - (
       SELECT COUNT(*) FROM(
        SELECT customer_email FROM foodhubsales_flat_order GROUP BY customer_email HAVING COUNT(*) = 1 
       ) s 
      ) 
     )/(
       SELECT COUNT(customer_email) FROM foodhubsales_flat_order 
     ) * 100, 1), '%') AS 'Percentage' 

FROM foodhubsales_flat_order;