এসকিউএল গ্রুপ বাই একটি অর্ডার দিয়ে


122

আমার ট্যাগগুলির একটি টেবিল রয়েছে এবং তালিকা থেকে সর্বোচ্চ গণনা ট্যাগগুলি পেতে চাই।

নমুনা ডেটা এর মত দেখাচ্ছে

id (1) tag ('night')
id (2) tag ('awesome')
id (3) tag ('night')

ব্যবহার

SELECT COUNT(*), `Tag` from `images-tags`
GROUP BY `Tag`

আমি পুরোপুরি অনুসন্ধান করছি এমন ডেটা আমাকে ফিরিয়ে দেয়। তবে, আমি এটিকে সংগঠিত করতে চাই, যাতে সর্বোচ্চ ট্যাগ গণনাটি প্রথম হয় এবং এটি কেবল আমাকে প্রথম ২০ বা তার বেশি প্রেরণে সীমাবদ্ধ করে দেয়।

আমি এটি চেষ্টা করেছিলাম ...

SELECT COUNT(id), `Tag` from `images-tags`
GROUP BY `Tag`
ORDER BY COUNT(id) DESC
LIMIT 20

এবং আমি "গোষ্ঠী ফাংশনটির অবৈধ ব্যবহার - ErrNr 1111" পেতে থাকি

আমি কি ভুল করছি?

আমি মাইএসকিউএল ৪.১.২৫-ডেবিয়ান ব্যবহার করছি

উত্তর:


199

মাইএসকিউএল এর সমস্ত সংস্করণে, কেবল নির্বাচনের তালিকার সমষ্টিগতভাবে উপন্যাস এবং উপনামের দ্বারা অর্ডার করুন:

SELECT COUNT(id) AS theCount, `Tag` from `images-tags`
GROUP BY `Tag`
ORDER BY theCount DESC
LIMIT 20

9
আইএমএইচও, এটি নির্বাচিত উত্তরের চেয়ে ক্লিনার সংস্করণ। এটি কী দ্বারা আদেশ করা হয়েছে তা তাত্ক্ষণিকভাবে পরিষ্কার। অবশ্যই, যদি এটির দ্রুত স্ক্রিপ্ট হয় তবে তা সত্যিই কিছু যায় আসে না।
জাস্টাপোরিং

1
যদিও ওপি মাইএসকিউএল ব্যবহার করছে, এই উত্তরটি আমার পক্ষে এইচএসকিউএল (লাইব্রোফাইস অন্তর্নির্মিত)
আর্নো টেগসেথ

53

সংস্করণ 5 এর পূর্বে মাইএসকিউএল আদেশের বিধি দ্বারা সামগ্রিক ফাংশনগুলিকে অনুমতি দেয় না।

অবনমিত সিনট্যাক্সের মাধ্যমে আপনি এই সীমাটি পেতে পারেন:

SELECT COUNT(id), `Tag` from `images-tags`
GROUP BY `Tag`
ORDER BY 1 DESC
LIMIT 20

1, যেহেতু এটি প্রথম কলামে আপনি গ্রুপ করতে চান।


8

আমি মাইএসকিউএল সম্পর্কে জানি না, তবে এমএস এসকিউএল-এ আপনি ধারাটিতে কলাম সূচকটি ব্যবহার করতে পারেন order by। এর group byসাথে কাজ করা সহজ হওয়ার সাথে সাথে গণনা করার আগে আমি এটি করেছি ।

সুতরাং

SELECT COUNT(id), `Tag` from `images-tags`
GROUP BY `Tag`
ORDER BY COUNT(id) DESC
LIMIT 20

হয়ে

SELECT COUNT(id), `Tag` from `images-tags`
GROUP BY `Tag`
ORDER 1 DESC
LIMIT 20

6

ওরাকল-এ, এরকম কিছু আপনার গণনা পৃথক করতে এবং আরও ভাল অর্ডার দেওয়ার জন্য দুর্দান্ত কাজ করে। এটি MySQL 4 এ কাজ করবে কিনা তা সম্পর্কে আমি নিশ্চিত নই work

select 'Tag', counts.cnt
from
  (
  select count(*) as cnt, 'Tag'
  from 'images-tags'
  group by 'tag'
  ) counts
order by counts.cnt desc

10.1.14-মারিয়াডিবিতে (মাইএসকিউএল-সামঞ্জস্যপূর্ণ) আমার জন্য কাজ করছে বলে মনে হচ্ছে। আমি ভেবেছিলাম আমার থাকতে হবে ) as counts, তবে এটি এখনও asঅংশ ছাড়াই কাজ করেছে ।
হ্যারি পেখোনেন

3

অবনমিত সিনট্যাক্সের মাধ্যমে আপনি এই সীমাটি পেতে পারেন: 1 ডেস্কের মাধ্যমে অর্ডার

এই বাক্য গঠনটি একেবারেই অবচিত হয় না, এটি এসকিউএল৯৯ থেকে E121-03।


5
এটি উত্তরের পরিবর্তে একটি মন্তব্য হওয়া উচিত।
রাফায়েল ব্যারোস

0

এই কোয়েরি চেষ্টা করুন

 SELECT  data_collector_id , count (data_collector_id ) as frequency 
    from rent_flats 
    where is_contact_person_landlord = 'True' 
    GROUP BY data_collector_id 
    ORDER BY count(data_collector_id) DESC

এই প্রশ্নের সাথে কী করার আছে? ক্ষেত্রগুলিও এক রকম নয়।
ব্লেকস সেভেন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.