(、私は確かであることができなかった私は、ユーザーに自分のID列のポイントを考えると限り)あなたは以下の寄付テーブルを持っていると仮定すると:
| ID | UserId | Donation |
| 1 | 1 | 60 |
| 2 | 1 | 35 |
| 3 | 2 | 70 |
| 4 | 2 | 40 |
| 5 | 3 | 90 |
次のクエリはします彼らの合計寄付であなたのユーザーの数を与える
SELECT COUNT(1)
FROM (
SELECT UserId
FROM Donations
GROUP BY UserId
HAVING SUM(Donation) < 100
) AS t
追加情報に基づいて更新してください。
私はあなたが望むものを1つのSQLステートメントから得ることができるとは思わないが、あなたがしなければならないのは、(適切な順序で)必要なレコードをループしてIDを一時テーブルに挿入し、寄付の合計。合計が上限を超えたら、カーソルループを抜けて結果を返します。このようなもの:
CREATE PROCEDURE GetTopDontations(limit DECIMAL(...))
BEGIN
CREATE TEMPORARY TABLE t1 (
id INT
);
DECLARE total, Donation DECIMAL(...);
DECLARE Id INT;
DECLARE curDonations CURSOR FOR SELECT ID, Dontaion FROM Donations ORDER BY <something relevant>;
SET total = 0.0;
OPEN curDonations;
read_loop: LOOP
FETCH curDonations INTO Id, Donation;
INSERT INTO t1(id) VALUES (Id);
SET total = total + Donation;
IF(total > limit) THEN
LEAVE read_loop;
END IF;
END LOOP:
CLOSE curDonations;
SELECT d.*
FROM Donations d
INNER JOIN t1
ON d.Id = t1.Id;
END;
ここでの目標は明確ではありません。問題は「寄付の合計額」です。つまり、ユーザーをある種の方法でグループ化する必要があります。ユーザー4と同様に、3は合計90の寄付を持つグループです。ユーザー4,9と2も合計70でグループ化できます。グループを作成する上でランクは決定要因ですか? – ace
私は彼がドナーごとに(すなわちIDに基づいて)「寄付の合計を集計」を意味すると思いますか?次に、/ having節を使用してグループを作成してください。 – Jimmy