নির্বাচন করুন 1 কলামের মান সীমাবদ্ধ?


11

বলি আমার নীচের টেবিলটি রয়েছে

-----------------------------
| user_id   | comment       |
-----------------------------
| 2         | thats cool    |
| 2         | awesome       |
| 3         | i hate this   |
| 3         | okay          |
| 6         | this is weird |
| 6         | hello?        |
| 6         | what is it    |
| 9         | how are you   |
| 16        | too slow      |
| 16        | yes           |
| 17        | alrighty      |
-----------------------------

আপনি প্রতি এক সারি কীভাবে নির্বাচন করতে পারেন user_id? সুতরাং আমার ফলাফলগুলি হবে:

-----------------------------
| user_id   | comment       |
-----------------------------
| 2         | thats cool    |
| 3         | i hate this   |
| 6         | this is weird |
| 9         | how are you   |
| 16        | too slow      |
| 17        | alrighty      |
-----------------------------

একক দক্ষ ক্যোয়ারী দিয়ে এটি কি সম্ভব? বা উপ-নির্বাচিত প্রয়োজনীয়? DISTINCTএকক কলামে কোনওভাবে কী ব্যবহার করা সম্ভব ?

উত্তর:


9

এই GROUP BYজন্য ব্যবহার করা হয়। এক সারি (প্রতি গ্রুপ) পান। এই ক্ষেত্রে, এটা সব স্বতন্ত্র দেখাবে user_idমান এবং কলাম বাকি, আপনি (আছে) মতো সমষ্টিগত ফাংশন ব্যবহার MIN(), MAX(), AVG(), SUM()আপনি যখনই গোষ্ঠীর প্রতি একটির বেশি মান ধারণ করবে এবং শুধুমাত্র এক দেখানো যায়।

SELECT
    user_id
  , MIN(comment) AS comment  -- it will show the first in alphabetical order  
                             -- you could also use MAX()
FROM
    tableX
GROUP BY
    user_id ;

মাইএসকিউএল নীচের অপ্রচলিত সমাধানটিকেও মঞ্জুরি দেয়, যা ব্যবহারকারীর জন্য একটি (আরও বা কম এলোমেলো) মন্তব্য প্রদান করবে:

SELECT
    user_id
  , comment
FROM
    tableX
GROUP BY
    user_id ;

এই শেষ কোয়েরিটি কাজ করবে না তবে (কঠোর) ONLY_FULL_GROUP_BYমোড সক্ষম থাকলে ত্রুটি বাড়াবে । সম্প্রতি প্রকাশিত 5.7 সংস্করণে, এই মোডটি ডিফল্ট এবং একটি নতুন ফাংশন, ANY_VALUE()সরবরাহ করা হয়। আরও বিশদের জন্যGROUP BY পৃষ্ঠার মাইএসকিউএল হ্যান্ডলিংটি দেখুন । ক্যোয়ারী এখনই লেখা যেতে পারে:

SELECT
    user_id
  , ANY_VALUE(comment) AS comment
FROM
    tableX
GROUP BY
    user_id ;

মনে রাখবেন যে "অপ্রচলিত" সংস্করণ বা সাম্প্রতিক ANY_VALUE()ক্রিয়াকলাপটি ব্যবহার করে , যদি আমরা SELECTতালিকায় আরও কলাম যুক্ত করি, তবে তাদের মানগুলি একই গ্রুপের কেবল একটি সারি থেকে একই সারি থেকে আসার নিশ্চয়তা দেয় না। তারা যেভাবে নির্বাচিত হয়েছে তা একেবারে এলোমেলো নয়, এটি এক্সিকিউশন প্ল্যান এবং ব্যবহৃত সূচকগুলির উপর নির্ভর করে।


কোন ইউজার_আইডির জন্য কোন সারিটি টানা হবে তা নির্দিষ্ট করার জন্য অন্য কোনও উপায় আছে? কোনও ধরণের অর্ডার নির্দিষ্ট করার কোনও উপায়?
জ্যাক উইলসন

পাশাপাশি MINএবং MAX?
ypercubeᵀᴹ

1
তাহলে এটি আরও জটিল। এই অন্যান্য প্রশ্নটি দেখুন: মাইএসকিউএল ক্যোয়ারী - কীভাবে সাম্প্রতিক ডেমোগ্রাফিকগুলি পাবেন?
ypercubeᵀᴹ

2
আপনি [greatest-n-per-group]ট্যাগের অধীনে এসও সাইটে একই রকম একটি সমস্যাও দেখতে পাবেন ।
ypercubeᵀᴹ

1
@ টি.ব্রেইনজোনস আপনি কি "অপ্রচলিত" ক্যোয়ারী বলতে চাইছেন, যদি আপনি নির্বাচনী তালিকায় অন্য সমস্ত কলাম যুক্ত করেন? এটি প্রথম, তারা একই সারিতে নাও থাকতে পারে। এটি ঠিক এলোমেলো নয় তবে মানগুলি বিভিন্ন সারি হতে পারে (একই গ্রুপ থেকে)।
ypercubeᵀᴹ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.