[英]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.