2013-07-09 54 views
0

我正在使用以下查詢來創建報表。我的問題來自於我需要在每個「市場」中使用COUNT(市場)的日期(總計),因此我只需要爲用戶推算月份($ mon)計算一次「市場」COUNT。我找不到任何關於在單個選定字段上使用WHERE的提示,其他所有工作都按預期給我的市場提供百分比和年度總計。mysql查詢中單個選擇的指定條件

我需要使行「COUNT(市場)AS保存」只計算月份字段等於$ 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月) - 百分之 - YTD
洛杉磯 - 530 - 16.5154 - 564
聖何塞 - 390 - 12.1523 - 415
埃爾文 - 371 - 11.5373 - 394

回答

0

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; 

百分比將是空的,但是這應該是一個優勢條件。

Link to SQLFiddle

+0

如果我用的是它只返回相同的總,不只是一個月等於六月 記錄下 COUNT(if(month ='June',market,0))AS保存 – James

+0

您可以提供一些示例數據和預期輸出嗎? –

+0

增加了輸出示例,Saves(6月)是年初至今的一個子集,所以今年有洛杉磯總票數爲564,6月洛杉磯爲530 – James

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';