如何在MySQL中使用SUM IF()而不在查询中使用硬编码值

时间:2012-06-04 16:30:14

标签: mysql

我有一个使用SUM IF()来执行交叉表结果集的查询。在这个查询中,我有值sin和SUM IF()硬编码。问题是新值被添加到数据库中。有没有办法编写查询而无需对SUM IF()中的值进行硬编码?这是查询:

  

选择storeid,sum(if(marketsegmentid = 6,1,0))为6,   总和(如果(marketsegmentid = 7,1,0))       作为7,sum(if(marketsegmentid = 12,1,0))为12,sum(if(marketsegmentid = 17,1,0))为17,       sum(if(marketsegmentid = 22,1,0))为22,sum(if(marketsegmentid = 27,1,0))为27,       sum(if(marketsegmentid = 32,1,0))为32,sum(if(marketsegmentid = 37,1,0))为37,       sum(if(marketsegmentid = 42,1,0))为42,sum(if(marketsegmentid = 47,1,0))为47,       sum(if(marketsegmentid = 52,1,0))为52,sum(if(marketsegmentid = 97,1,0))为97,       sum(if(marketsegmentid = 102,1,0))为102,sum(if(marketsegmentid = 107,1,0))为107,       sum(if(marketsegmentid = 112,1,0))为112,sum(if(marketsegmentid = 117,1,0))为117,       sum(if(marketsegmentid = 122,1,0))为122,sum(if(marketsegmentid = 127,1,0))为127,       sum(if(marketsegmentid = 132,1,0))为132,sum(if(marketsegmentid = 137,1,0))为137,       sum(if(marketsegmentid = 142,1,0))为142       来自storemarketsegments       按商店分组;

查询用于报表,结果将导出为CSV。 1用作结果集中的标志。

我查询的表格设置如下:

CREATE TABLE storemarketsegments(id INT NOT NULL, marketsegmentid INT NOT NULL);

市场分类保存在一个单独的表中:

  

CREATE TABLE marketsegment(ID INT NOT NULL AUTO_INCREMENT,PRIMARY   KEY(id),名称VARCHAR(45),description VARCHAR(45));

非常感谢任何帮助。我不确定是否有办法编写查询而不对硬编码值,我不介意在添加新的市场分段时更新报告中的查询,但我想我会检查。提前感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

您可以将每个计数作为单独的行返回,然后根据需要在应用程序层中进行过滤:

select storeid, marketsegmentid, count(*) as Count
from storemarketsegments 
group by storeid, marketsegmentid;