0

今月から店頭で売られているアイスクリームのフレーバートップ10を探しているとしましょう。ただし、現在のクエリでは、7/01の上位10種類のフレーバーしか表示されません。

select *
from buy_history
where date > '2012-07-01 00:00:00' 
group by flavor
order by max(purchase_count) desc 
limit 10;

(はい、明らかに1ミリ秒あたり複数のアイスクリームの購入がある可能性があります。)

テーブルは次のようになります buy_history(id, flavor, date, purchase_count)

4

3 に答える 3

0

日付条件に以下を使用してみませんか

WHERE month(date)=3
于 2012-07-26T00:36:59.823 に答える
0
select flavor, sum(purchase_count) as purchase_count_total
from buy_history 
where date >= CONCAT(YEAR(CURDATE()), '-' MONTH(CURDATE()), '-1')
group by flavor 
order by sum(purchase_count) desc 
limit 10;
于 2012-07-26T00:39:17.143 に答える
0

それはそのようにしか見えません。手動でカウントします(またはスプレッドシートに入れて計算して検証します)。

ここでの問題は、結果を特定の列()でグループ化していて、結果に、句にも集計関数にgroup by flavorも含まれていない追加の列があることです。group byしたがって、MySQLは、これらの列を表示する方法(サーバーが表示するために選択する列)を認識していません。

代わりにこれを行う必要があります(*大まかに):

select flavor, sum(purchase_count) as total_sold
from buy_history
where date > '2012-07-01 00:00:00' 
group by flavor
order by total_sold desc 
limit 10;
于 2012-07-26T00:40:42.870 に答える