2017-11-29 16 views
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 

答えて

2

ため感謝ゴードン・linoff @へ:

ソリューション。これにより、次のことができます。

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 
     ), 
     p.advisor_create, Nb DESC; 

これは、「いいえ」の値でソートすることを前提としています。合計で並べ替える場合は、その条件をサブクエリから削除するだけです。

また、私は日付比較を簡略化しました。秒に行く理由はありません。実際には、betweenは、時間コンポーネントで発生する混乱のために、日付/時刻の比較にはお勧めできません。

+0

ありがとうございます。それは私が望むものです。 –

関連する問題