2014-02-15 2 views
4

мой английский не очень хорошо, но я пытаюсь объяснить свое самоочевидное. Мне нужен совет. Я выбираю из одной таблицы сумму значений каждого поля. и мой запрос выглядит следующим образом:mysql UNION query output

SELECT * FROM 
(
SELECT SUM(Clicks) AS sales , 'sales' as type 
FROM ClicksPerDay 
WHERE BannerID = 3456 

UNION 

SELECT SUM(Clicks) AS rent, 'rents' as type 
FROM ClicksPerDay 
WHERE BannerID = 3457 
) total 

выход, что я имею:

sales | type 
23 | rents 
26 | sales 

и мне это нужно так:

sales | rents 
    26 | 23 

ответ

4

Попробуйте следующее:

SELECT 
    SUM(IF(BannerId = 3456, Clicks, 0)) AS sales, 
    SUM(IF(BannerId = 3457, Clicks, 0)) AS rents 
FROM ClicksPerDay 
WHERE BannerID IN (3456, 3457) 
+0

вы можете объяснить PLS какие 'IF (BannerId = 3456, кликам, 0))' означает ?? Я не понимаю, что означает '0'? Спасибо. – Victorino

+0

@ Viktorino '0' - это условие' else' для вызова 'IF()'. Вы можете прочитать о синтаксисе [здесь] (http://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html#function_if). – hjpotter92

+0

благодарит за советом! – Victorino

0

Попробуйте использовать перекрестное соединение - не совсем на что он предназначен, но поскольку у вас есть только 2 результата, он должен работать, но вы должны опустить «продажи» как тип »и« ренты »как тип« проекции ».

1

Как это:

SELECT sales = SUM(sales), rent = SUM(clicks) FROM 
(
SELECT SUM(Clicks) AS sales , 0 as rent 
FROM ClicksPerDay 
WHERE BannerID = 3456 

UNION ALL 

SELECT 0 as sales, SUM(Clicks) AS rent 
FROM ClicksPerDay 
WHERE BannerID = 3457 
) total 
+0

Хотя мне очень нравится hjpotter92 ответ; но мне не хватало знаний о синтаксисе IF(), чтобы сделать это сам =) – deroby