MySQL查询返回不同的别名日期为线图
问题描述:
我试图做一些报告线图图表,发现它最简单的,如果我从我的查询返回一个数据行的数据,每列(日期)分组同列这将出现在折线图中。挑战是我想要多条线。MySQL查询返回不同的别名日期为线图
这是我可以与数据的简化示例做:WHERE位置=按日期
它返回 '1' 组
| DATE | SALES | LOCATION |
| 2012-01-07 | 500 | 1 |
| 2012-01-07 | 600 | 2 |
| 2012-01-14 | 700 | 1 |
| 2012-01-14 | 400 | 2 |
| 2012-01-21 | 450 | 1 |
| 2012-01-21 | 550 | 2 |
SELECT日期,和(销售)作为SalesTotal1 FROM TABLE
:
| DATE | SalesTotal1 |
| 2012-01-07 | 500 |
| 2012-01-14 | 700 |
| 2012-01-21 | 450 |
那很好,如果我只是在我的图中的一个线,但我真的想按日期还是分组的同一列的多个别名使得w可以退货:
| DATE | SalesTotal1 | SalesTotal2 |
| 2012-01-07 | 500 | 600 |
| 2012-01-14 | 700 | 400 |
| 2012-01-21 | 450 | 550 |
这可能吗?子查询?我试过很多东西,谢谢〜
答
你可以这样做:
SELECT `date`,
SUM(IF(location=1,sales,0)) As SalesTotal1,
SUM(IF(location=2,sales,0)) As SalesTotal2
FROM my_table
GROUP BY `date`
你不得不因为有位置,虽然添加尽可能多的栏目,如果你有很多地方它会烦人。也许你可以考虑在代码方面重新安排(如果你有很多地方)?
答
这就是所谓的这不是一般MySQL支持的数据透视表查询。但是,如果您确切知道位置,则可以通过一系列子查询来完成。如果您不知道确切的位置,则必须编写一个存储过程来查找位置并生成一个查询字符串,然后执行。这里是如何做两个位置:
SELECT
date,
SalesTotal1,
SalesTotal2
FROM (
SELECT
date,
sum(sales) as SalesTotal1
FROM TABLE
WHERE location = '1'
group by date
) S1
INNER JOIN (
SELECT
date,
sum(sales) as SalesTotal2
FROM TABLE
WHERE location = '2'
group by date
) S2 ON S1.date=S2.date
非常感谢所有,这个答案是一个快速简单的解决方案,我的需要。 – 2012-03-09 02:29:24
这看起来接近我需要的东西,使用IF。我一直在使用UNION,但它只在第一个SELECT的别名下分组结果。我需要这样的东西: 'IF(WHERE描述LIKE '1.1%')AS DESC1, IF(WHERE描述LIKE '1.2%')AS desc2' 这可能吗? – TARKUS 2017-04-22 14:18:15