Несколько запросов в один (отчет)? - PullRequest
0 голосов
/ 28 апреля 2011

Как мне объединить несколько запросов в один?

Например:

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

Итак, отчет выглядит примерно так: enter image description here

Также Как мне добавить процент возврата?

Примечание: исправлены запросы 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 - неудачные продажи:

Ответы [ 2 ]

1 голос
/ 28 апреля 2011

ОБНОВЛЕНИЕ: для вашего первого вопроса, я думаю, что это будет делать то, что вы хотите (но будьте осторожны, этот запрос медленный, полный сканирования таблицы ... Вы должны попросить более опытного пользователя переполнения стека, чтобы оптимизироватьвы):

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: http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_concat.

Попробуйте:

SELECT CONCAT(CAST(COUNT(*) AS CHAR), '%') AS Return ...
1 голос
/ 28 апреля 2011

Если количество (и типы) столбцов совпадают в запросах, вы можете использовать UNION для объединения результатов 3 запросов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...