هل هناك طريقة في SQL (الخلية) إلى القيام ب "جولة روبن" ORDER BY على حقل معين؟

StackOverflow https://stackoverflow.com/questions/631259

  •  08-07-2019
  •  | 
  •  

سؤال

هل هناك طريقة في SQL (الخلية) إلى القيام ب "جولة روبن" ORDER BY على حقل معين؟

وكمثال على ذلك، وأود أن تأخذ الجدول مثل هذا واحد:

+-------+------+
| group | name |
+-------+------+
|     1 | A    |
|     1 | B    |
|     1 | C    |
|     2 | D    |
|     2 | E    |
|     2 | F    |
|     3 | G    |
|     3 | H    |
|     3 | I    |
+-------+------+

وتشغيل استعلام الذي يؤدي إلى نتائج في هذا النظام:

+-------+------+
| group | name |
+-------+------+
|     1 | A    |
|     2 | D    |
|     3 | G    |
|     1 | B    |
|     2 | E    |
|     3 | H    |
|     1 | C    |
|     2 | F    |
|     3 | I    |
+-------+------+

لاحظ أن الجدول قد يكون العديد من الصفوف، لذلك لا أستطيع أن أفعل ترتيب في التطبيق. (كنت قد الواضح أن الشرط LIMIT كذلك في الاستعلام).

هل كانت مفيدة؟

المحلول

ما يمكنك القيام به هو إنشاء عمود المؤقت الذي قمت إنشاء مجموعات لتعطيك شيئا من هذا القبيل:

+-------+------+-----+
| group | name | tmp |
+-------+------+-----+
|     1 | A    |   1 |
|     1 | B    |   2 |
|     1 | C    |   3 |
|     2 | D    |   1 |
|     2 | E    |   2 |
|     2 | F    |   3 |
|     3 | G    |   1 |
|     3 | H    |   2 |
|     3 | I    |   3 |
+-------+------+-----+

لتعلم كيفية إنشاء مجموعات، وإلقاء نظرة على هذا السؤال / الإجابة .

وبعد ذلك لها بسيط

ORDER BY tmp, group, name

نصائح أخرى

وسوف أحاول شيئا مثل:

SET @counter = 0;
SELECT (@counter:=@counter+1)%3 as rr, grp, name FROM table ORDER by rr, grp 

ويمكنك استخدام المتغيرات الخلية للقيام بذلك.

SELECT grp, name, @row:=@row+1 from table, (SELECT @row:=0) r ORDER BY (@row % 3);

+------+------+--------------+
| grp  | name | @row:=@row+1 |
+------+------+--------------+
|    1 | A    |            1 |
|    2 | D    |            4 |
|    3 | G    |            7 |
|    1 | B    |            2 |
|    2 | E    |            5 |
|    3 | H    |            8 |
|    1 | C    |            3 |
|    2 | F    |            6 |
|    3 | I    |            9 |
+------+------+--------------+
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top