我的MySQL数据库中有两个表。一个存储一个特定频道的一年中一个月的金额。我有一些在另一个表中定义的通道。 以下是带有示例数据的两个表:
Table income:
ID | Year | Month | amount | channelID
example:
1 | 2017 | 05 | 7.13 | 1
2 | 2017 | 05 | 12.03 | 2
3 | 2017 | 06 | 1.56 | 1
4 | 2017 | 06 | 0.30 | 2
Table channel:
ID | title | url
example:
1 | Affiliate Site 1 | http://url1.tld
2 | Affiliate Site 2 | http://url2.tld
现在我想生成一个查询,它给出一个这样的输出:
Expected Output:
Year | Month | amount ch1 | amount ch2
example:
2017 | 05 | 7.13 | 12.03
2017 | 06 | 1.56 | 0.30
我对编写mysql查询有基本的了解,但我无法解决这个问题。我想一起加入这些表,但这不是解决方案。 如何在一个输出行中组合由月份和年份标识的一个表的两个(稍后更多)行?
答案 0 :(得分:0)
将返回您所问的内容的查询:
SELECT `Year`
, `Month`
, SUM(IF(`channelID` = 1, `amount`, 0)) 'amount ch1'
, SUM(IF(`channelID` = 2, `amount`, 0)) 'amount ch2'
FROM `income`
GROUP BY `Year`, `Month`;
对于任意数量的频道,将返回与上述相同的脚本:
SET @query = (
SELECT
CONCAT(
'SELECT `Year`' ,
', `Month`',
GROUP_CONCAT(
', SUM(IF(`channelID` = ', `id`, ', `amount`, 0)) `amount ch', `id`, '` '
SEPARATOR ''
),
'FROM `income` ',
'GROUP BY `Year`, `Month`'
)
FROM `channel`
);
PREPARE stmt FROM @query;
EXECUTE stmt;
以上是基于通道表中的数据生成查询并将其存储在@query
变量中。然后使用此查询准备一个语句并执行它。
答案 1 :(得分:0)
尝试使用groupid by channelid和按金额订购。