MySQL を日時と合計でランク付けします
P粉322319601
P粉322319601 2023-09-01 08:49:20
0
1
547
<p>購入記録を保存するデータベースがあります: </p> <pre class="brush:php;toolbar:false;">| user_id | 製品 | 価格 | 日時 | -------------------------------------- | 1 | 1 | -0.75 | 2022-01-01 | | 2 | 1 | -0.75 | 2022-01-01 | | 3 | 2 | -0.65 | 2022-01-01 | | 2 | 1 | -0.75 | 2022-01-01 | | 1 | 1 | -0.75 | 2022-01-02 | | 1 | 3 | -1.50 | 2022-01-02 | | 1 | 2 | -0.65 | 2022-01-02 | | 2 | 1 | -0.75 | 2022-01-02 | | 3 | 2 | -0.65 | 2022-01-02 | | 3 | 3 | -1.50 | 2022-01-02 | | 3 | 3 | -1.50 | 2022-01-02 |</pre> <p>注意: この問題では時間は重要ではありません。 </p> <p>毎日の各ユーザーのランキングが欲しいのですが、例えばユーザー1の状況は以下の通りです。 <pre class="brush:php;toolbar:false;">| 日時 | 製品 1 | 製品 2 | 製品 3 | 合計 | ランキング | -------------------------------------------------- ------------------ | 2022-01-01 | 1 | 0 | 0 | 0.75 | 2 | | 2022-01-02 | 1 | 1 | 1 | 2.90 | 2 |</pre> <p>ランキングは毎日計算されますのでご了承ください。 </p> <p>次のクエリはテーブルの一部を示します。</p> <pre class="lang-sql prettyprint-override"><code>SELECT DATE(`datetime`) AS 日時、 SUM(CASE WHEN product = 1 THEN 1 ELSE 0 END) AS product1、 SUM(CASE WHEN product = 2 THEN 1 ELSE 0 END) AS product2、 SUM(CASE WHEN product = 3 THEN 1 ELSE 0 END) AS product3、 SUM(CASE WHEN product = 1 THEN 0.75 ELSE 0 END) SUM(CASE WHEN product = 2 THEN 0.65 ELSE 0 END) SUM(CASE WHEN product = 3 THEN 1.5 ELSE 0 END) 合計、 「歴史」から WHERE ユーザー ID=1 GROUP BY DATE(`日時`) </code></pre> <p>私の問題は、MySQL のランキングの問題とよく似ていますが、質問したとおりの結果が得られません。毎日のすべてのユーザーのみがランク付けできます。指定したランキング関数を追加すると、テーブルを参照して 2022-01-02 を最初に配置します (2.90 は 0.75 より高いため)。毎日ランキングを機能させるにはどうすればよいですか? </p>
P粉322319601
P粉322319601

全員に返信(1)
P粉707235568

質問は完全には明確ではありません。ただし、あなたが求めているのは、 すべての ユーザーの購入を日ごとにランク付けする方法だと思います:

###ユーザーID### 2022-01-012022-01-012022-01-012022-01-022022-01-022022-01-02
history_date毎日の合計 合計ランク
2 1.50 1
1 0.75 2
3 0.65 3
3 3.65 1
1 2.90 2
2 0.75 3
いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート