8
読んでいただきありがとうございました。SQLでソートして番号を付けてグループ化する
私はあなたが表示並べ替えの小さな問題をしました:
私のSQLクエリがあることである:私はここから取得するデータはそのようなものです
SELECT p.advisor_create, COUNT(p.id) AS Nb, IF(p.cancel_advisor IS
NULL, "no", "yes") AS refund
FROM payment p
WHERE p.type = 'CESSATION'
AND p.date BETWEEN '2017-01-01 00:00:00' AND '2017-11-31 23:59:59'
GROUP BY p.advisor_create, refund
ORDER BY p.advisor_create, Nb DESC
:
+-------+---+------+
|advisor| NB|refund|
+-------+---+------+
| 170432| 50| no|
| 170432| 4| yes|
| 175222| 30| no|
| 175222| 3| yes|
| 182985|304| no|
| 182985| 19| yes|
| 362912|360| no|
| 362912| 13| yes|
+-------+---+------+
そして、私はこのように並べ替えます:
+-------+---+------+
|advisor| NB|refund|
+-------+---+------+
| 362912|360| no|
| 362912| 13| yes|
| 182985|304| no|
| 182985| 19| yes|
| 170432| 50| no|
| 170432| 4| yes|
| 175222| 30| no|
| 175222| 3| yes|
+-------+---+------+
同じ「アドバイザー」のMAX(NB)でソートし、アドバイザーの2行をまとめてグループ化します。
もう一度ご協力いただきありがとうございます。あなたはorder by
でサブクエリを使用することができ、この
SELECT p.advisor_create, COUNT(p.id) AS Nb,
IF(p.cancel_advisor IS NULL, 'no', 'yes') AS refund
FROM payment p
WHERE p.type = 'CESSATION' AND
p.date >= '2017-01-01' AND
p.date < '2017-12-01'
GROUP BY p.advisor_create, refund
ORDER BY (SELECT COUNT(*)
FROM payment p2
WHERE p2.advisor_create = p.advisor_create AND
p2.type = 'CESSATION' AND
p2.date >= '2017-01-01' AND
p2.date < '2017-12-01' AND
p2.cancel_advisor IS NULL
) DESC,
p.advisor_create, Nb DESC
ありがとうございます。それは私が望むものです。 –