باستخدام ترتيب سكل من قبل لمعايير معقدة
-
29-09-2020 - |
سؤال
لنفترض أن علاقتي مثل ذلك
وأردت الفرز حسب الرتبة ، لكن أ و ب أولا.لذلك سوف تبدو علاقتي مثل
في البداية حاولت أن يكون مجرد اثنين من العلاقات, حيث أطلب كل منهما حسب الرتبة, ثم الاتحاد العلاقات اثنين, لكنها فقط في نهاية المطاف الحصول على مختلطة معا.لقد حاولت أيضا استخدام الحالات ، لكنني لا أفهم كيف يعمل.ظللت الحصول على أخطاء حول خلط الأحرف مع الأعداد الصحيحة.
تحرير:نسيت أن أذكر أن العلاقة الأولى أعلاه هي ما ينتهي بي الأمر بعد عدد معقد إلى حد ما من المشاهدات.على سبيل المثال ، أنا خلقت اثنين من وجهات النظر ، واحد الذي لديه فقط و ب الطبقات ، ثم أمرت ذلك حسب الرتبة.العرض الثاني فقط فئات ج, أمر ذلك حسب الرتبة.ثم أنا نقابي لهم, لكنها مجرد الحصول على مختلطة.
المحلول
تحتاج فقط إلى CASE
التعبير في ORDER BY
, ، لتقسيم الصفوف إلى مجموعتين ، لذلك يتم وضع الصفوف مع الفئة 'أ' أو 'ب' في المجموعة الأولى (1
) وجميع الآخرين في الثانية (2
):
ORDER BY
CASE WHEN class IN ('A', 'B') THEN 1 ELSE 2 END,
rank ;
نصائح أخرى
أنا ذاهب لأعطيك مثالا واحدا على طريقة للقيام بذلك ، حيث يمكنني استخدام كتس ، والتي تتوفر في العديد من قواعد البيانات ، وخاصة كيو التي أنا أكثر دراية.
كت و WITH
بند
كت تسمح لك لتشكيل مؤقت ، جدول الاستعلام واحد مثل الهياكل ، ولكن منذ يمكنك جعل كس تعتمد على واحد آخر في استعلام واحد ، فإنه يوفر وسيلة مريحة وسهلة لفهم لجعل الاستعلام الخاص بك شبه الإجرائية.
في حالتك ، سأحاول
WITH AB_results AS(
SELECT class, rank, 1 AS hidden_rank
FROM my_relation
WHERE class IN ('A','B')
),
Non_AB_results AS(
SELECT class, rank, 2 AS hidden_rank
FROM my_relation
WHERE class NOT IN ('A','B')
)
SELECT COALESCE(AB_results.class,Non_AB_results.class), rank
FROM AB_results
FULL OUTER JOIN Non_AB_results
USING(hidden_rank,rank)
ORDER BY hidden_rank, rank;
سأحاول وضع معا سكلفيدل في بضع دقائق هنا ، فقط للتأكد من أنني لم تحصل على بعض الاستعلام بلدي خطأ.: ع
تحرير:لقد ارتكبت خطأ بسيطا.في محاولة لتنظيفه في مثال ونحن نتكلم.
تحرير 2:تم تصحيح الخطأ الآن!لسوء الحظ ، سكلفيدل هو وجود مشكلة صغيرة في الوقت الحالي ، ولكن هنا هو الرابط إلى سكلفيدل لبعض الاختبارات.
يرجى ملاحظة أنني قد لا يكون حل هذا في الطريقة الأكثر أناقة ممكنة ، ولكن يجب أن تحل القضايا الخاصة بك.