1

現在、一定期間の支出額で計算された上位 10 件のレコードを取得するのに苦労しています。

MySQL テーブル:

create table `payment_holder` (
    `user_id` int (11),
    `amount` Decimal (6),
    `date_added` datetime 
); 

デモデータ:

insert into `payment_holder` (`user_id`, `amount`, `date_added`) values('4','3.75','2012-03-15 00:41:39');
insert into `payment_holder` (`user_id`, `amount`, `date_added`) values('5','32.20','2012-03-15 00:42:10');
insert into `payment_holder` (`user_id`, `amount`, `date_added`) values('6','32.20','2012-03-15 00:42:58');
insert into `payment_holder` (`user_id`, `amount`, `date_added`) values('7','0.89','2012-03-15 00:48:05');
insert into `payment_holder` (`user_id`, `amount`, `date_added`) values('8','3.75','2012-03-15 00:50:54');
insert into `payment_holder` (`user_id`, `amount`, `date_added`) values('4','3.75','2012-03-15 00:41:39');
insert into `payment_holder` (`user_id`, `amount`, `date_added`) values('5','32.20','2012-03-15 00:42:10');
insert into `payment_holder` (`user_id`, `amount`, `date_added`) values('6','32.20','2012-03-15 00:42:58');
insert into `payment_holder` (`user_id`, `amount`, `date_added`) values('7','0.89','2012-03-15 00:48:05');
insert into `payment_holder` (`user_id`, `amount`, `date_added`) values('8','3.75','2012-03-15 00:50:54');

この例から次のような結果を取得したいと思います。

user_id amount
------------------
6       64.40   
5       64.40   
4       7.5 
8       7.5 
7       1.78

要するに、2012 年にuser_id基づいて購入額が最も高いのはどれですか?date_added

4

1 に答える 1

2

すべての年のすべてのデータを返すこのようなものを試しましたか?

select user_id, sum(amount) Amount
from payment_holder
group by user_id
order by amount desc
limit 0, 10

SQL FiddlewithDemoを参照してください

ただし、年ごとに制限する場合は、関数をフィールドWHEREに適用する句を追加できます。YEAR()date_added

select user_id, sum(amount) Amount
from payment_holder
where year(date_added) = 2012
group by user_id
order by amount desc
limit 0, 10
于 2012-12-06T14:40:25.063 に答える