MySQL联合查询输出

4

我的英语不太好,但我会尽力清晰地表达自己。我需要建议。 我正在从一个表格中选择每个字段的值的总和。 我的查询看起来像这样:

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 
3个回答

3

请尝试以下方法:

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

请问您能否解释一下 IF(BannerId = 3456, Clicks, 0) 的含义吗?我不太明白其中的 0 是什么意思。谢谢。 - Victorino
@Viktorino 0IF() 调用的 else 条件。您可以在此处阅读语法相关信息。 - hjpotter92

1

Like this:

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

虽然我也非常喜欢hjpotter92的答案,但是我对IF()语法不太了解,所以无法自己完成。=) - deroby

0
尝试使用一个交叉连接(cross join)- 它可能不完全符合预期,但由于只有两个结果,应该可以正常工作 - 但您必须省略 "'sales' as type" 和 "'rents' as type" 的投影。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接