0

我正在使用以下查询来创建报告。我的问题来自这样一个事实,即我需要对每个“市场”的年初至今(总计)使用 COUNT(market),然后我还需要仅为用户估算的月份($mon)使用“市场”的 COUNT。我找不到任何关于仅在单个选定字段上使用 WHERE 的参考,其他一切都按预期工作,为我提供了百分比和年初至今总计的市场。

我需要使“COUNT(market) AS Saves”行只计算月份字段等于 $mon 的市场,而其他所有内容都保持原样。

SELECT market,
COUNT(market) AS Saves,
COUNT(market) / (SELECT COUNT(*) FROM savedata2013) * 100 AS Percent,
COUNT(market) AS YTD
FROM savedata2013, ticket_info
GROUP BY market 
ORDER BY COUNT(market) DESC';

示例数据:
市场 - 保存(六月) - 百分比 - 年初至今
洛杉矶 - 530 - 16.5154 - 564
圣何塞 - 390 - 12.1523 - 415
尔湾 - 371 - 11.5373 - 394

4

2 回答 2

0

您可以在 sum 中使用 if 语句,例如...

select sum(if(field='$mon',1,0)) as something.... 

我根据我认为您的数据库的外观创建了一个 SQLFiddle,然后运行以下查询。

因此,我使用的数据库被定义为市场和输入日期。您的 ticket_info 中可能有更多信息,但它不应该是相关的。

create table ticket_info (market varchar(20),
                          enteredDate DateTime);

查询是:

SELECT market,
  sum(if(monthname(enteredDate)='June',1,0)) AS `Saves(June)`,
  sum(if(monthname(enteredDate)='June',1,0))/ (SELECT count(*) FROM ticket_info WHERE year(enteredDate) = 2013) AS Percent,
  sum(if(year(enteredDate)=2013,1,0)) AS YTD
FROM ticket_info
GROUP BY market
ORDER BY `Saves(June)` DESC;

如果该年没有输入票证,则百分比将为空,但这应该是一个边缘条件。

链接到 SQLFiddle

于 2013-07-09T17:29:22.767 回答
0

您可能可以使用 CASE 语句解决这样的问题:

SELECT market,
COUNT
(
CASE market
   WHEN month = $mon
      THEN market
      ELSE NULL
END
) AS Saves,
COUNT(market) / (SELECT COUNT(*) FROM savedata2013) * 100 AS Percent,
COUNT(market) AS YTD
FROM savedata2013, ticket_info
GROUP BY market 
ORDER BY COUNT(market) DESC';
于 2013-07-09T17:51:33.677 回答