0

次のクエリを使用してレポートを作成しています。私の問題は、各「市場」の年初来(合計)にCOUNT(市場)を使用する必要があるという事実から生じます。次に、ユーザーが帰属する月($ mon)のみに「市場」のCOUNTも必要です。選択した 1 つのフィールドのみで 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 月) - パーセント - YTD
ロサンゼルス - 530 - 16.5154 - 564
サンノゼ - 390 - 12.1523 - 415
アーバイン - 371 - 11.5373 - 394

4

2 に答える 2

0

合計内で if ステートメントを使用できます。

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

データベースがどのように見えるかを基に SQLFiddle を作成し、次のクエリを実行します。

だから、私が使用したDBは市場とenteredDateとして定義されています。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;

その年に入力されたチケットがない場合、パーセントは null になりますが、これはエッジ条件である必要があります。

SQLFiddle へのリンク

于 2013-07-09T17:29:22.767 に答える