mysql查询中单个选择的指定条件

mysql查询中单个选择的指定条件,mysql,sql,Mysql,Sql,我正在使用以下查询创建报告。我的问题来自于这样一个事实,即我需要使用每个“市场”的年初至今(总计)的计数(市场),然后我还需要仅针对用户估算的月份($mon)的“市场”计数。我找不到任何关于仅在单个选定字段上使用WHERE的参考,其他一切都按预期工作,为我提供了市场百分比和今年迄今为止的总数 我需要把“COUNT(market)AS Saves”这一行只计算月份字段等于$mon的市场,其他一切保持原样 SELECT market, COUNT(market) AS Saves, COUNT(ma

我正在使用以下查询创建报告。我的问题来自于这样一个事实,即我需要使用每个“市场”的年初至今(总计)的计数(市场),然后我还需要仅针对用户估算的月份($mon)的“市场”计数。我找不到任何关于仅在单个选定字段上使用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';
示例数据:
市场-储蓄(6月)-百分比-年初至今
洛杉矶-530-16.5154-564
圣何塞-390-12.1523-415

Irvine-371-11.5373-394

您可以在sum中使用if语句,类似于

select sum(if(field='$mon',1,0)) as something.... 
我根据我认为您的数据库可能的外观创建了一个SQLFIDLE,然后运行以下查询

因此,我使用的DB被定义为市场和入口。你可能有更多的信息在你的机票信息,但它不应该是相关的

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;
如果没有输入该年的票证,百分比将为空,但这应该是一个边缘条件


您可能可以使用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';

如果我使用以下内容,它只返回与总数相同的记录,而不只是将月份等于6月计数的记录(如果(月份=\'June\',market,0))作为保存。请给出一些示例数据和预期输出?添加示例输出,保存(June)是YTD的子集,因此今年洛杉矶的总票数为564张,洛杉矶530年六月这不适用于我的特定数据集,因为日期的格式不是SQL可以解析的,但它给了我添加一个年份列的想法,我可以使用它来消除数据集的复杂性。谢谢你的建议。