簡體   English   中英

多個查詢合二為一(報告)?

[英]Multiple queries into one (Report)?

如何將多個查詢合並為一個?

例如:

//Successful Sales:
SELECT username, count(*) as TotalSales, sum(point) as Points FROM sales where submit_date >= 1301612400 AND submit_date <= 1304204400 AND status = 1 group by username

/Return Sales:
SELECT username, count(*) as Return FROM sales where submit_date >= 1301612400 AND submit_date <= 1304204400 AND status = 2 group by username

//Unsuccessful Sales:
SELECT username, count(*) as UnsuccessfulSales FROM sales where submit_date >= 1301612400 AND submit_date <= 1304204400  AND (status = 3 OR status = 6) group by username

所以報告看起來像這樣:在此處輸入圖像描述

另外我如何添加回報百分比?

注意:修復了 SQL 查詢

我試過這樣做,但無法讓它工作?

SELECT username,  TotalSales, Points, Return
     FROM (
      SELECT username, count(*) as TotalSales, sum(point) as Points FROM sales where submit_date >= 1301612400 AND submit_date <= 1304204400 AND status = 1 group by username
      UNION
      SELECT count(*) as Return FROM sales where submit_date >= 1301612400 AND submit_date <= 1304204400 AND status = 4 group by username
    )

..

  //  Example Data Structure 

        CREATE TABLE IF NOT EXISTS `sales2` (
          `salesid` int(11) NOT NULL AUTO_INCREMENT,
          `username` varchar(50) NOT NULL,
          `point` int(11) NOT NULL,
          `status` int(11) NOT NULL,
          PRIMARY KEY (`salesid`)
        ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;

        INSERT INTO `sales2` (`salesid`, `username`, `point`, `status`) VALUES
        (1, 'User1', 2, 1),
        (2, 'User1', 2, 1),
        (3, 'User2', 11, 1),
        (4, 'User2', 1, 2),
        (5, 'User3', 5, 6);

字段狀態 = 1,成功銷售和展示點

狀態 2 - 退貨銷售

狀態 3/6 - 銷售不成功:

如果查詢中列的數量(和類型)匹配,則可以使用 UNION 組合 3 個查詢的結果。

更新:對於您的第一個問題,我認為這將滿足您的要求(但請注意,此查詢很慢,充滿了表掃描......您應該要求更有經驗的堆棧溢出用戶為您優化):

SELECT 
   distinct(outer_sales.username), 
   (SELECT count(*) as Points FROM sales where status = 1 AND username = outer_sales.username) as TotalSales,
   (SELECT sum(point) as Points FROM sales where status = 1 AND username = outer_sales.username) as Points,
   (SELECT count(*) FROM sales where status = 2 AND username = outer_sales.username) as Return,
   (SELECT count(*) FROM sales where (status = 3 OR status = 6) AND username = outer_sales.username) as UnsuccessfulSales
FROM 
   sales outer_sales
ORDER BY
   outer_sales.username;

而對於第二個問題,如果您只想在Return列中添加一個百分號,您可以使用CONCAT function: http://dev.mysql/string-doc/function.com.man. #function_concat

嘗試:

SELECT CONCAT(CAST(COUNT(*) AS CHAR), '%') AS Return ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM