কীভাবে একটি ক্যোয়ারিতে একাধিক গণনা করা যায়?


12

আমি যেমন প্রশ্নের সাথে রেকর্ড গণনা

SELECT COUNT(col1) FROM table1 WHERE col1 LIKE '%something%'
SELECT COUNT(col1) FROM table1 WHERE col1 LIKE '%another%'
SELECT COUNT(col1) FROM table1 WHERE col1 LIKE '%word%'

প্রতিটি গণনার জন্য, টেবিলের বাইরে মাইএসকিএল চলার প্রয়োজন এবং দীর্ঘ টেবিল এবং অসংখ্য প্রশ্ন থাকলে এটি একটি বড় সমস্যা।

আমি ভাবছি যদি একটি ক্যোয়ারিতে সমস্ত গণনা করার কোনও উপায় থাকে। এই ক্ষেত্রে, যখন মাইএসকিএল প্রতিটি সারি পেরিয়ে যায়, এটি সমস্ত গণনা প্রক্রিয়াকরণ করবে এবং পুরো টেবিলটি বার বার স্ক্যান করার দরকার নেই।


সঠিক উত্তরগুলিতে যুক্ত করতে, প্রস্তাবিত প্রশ্নাগুলি কেবল একবার টেবিলটি স্ক্যান করে।

উত্তর:


21

আপনি চেষ্টা করতে পারেন তাদের প্রত্যেকের জন্য একটি গণনা পেতে

SELECT
    COUNT(CASE WHEN `col1` LIKE '%something%' THEN 1 END) AS count1,
    COUNT(CASE WHEN `col1` LIKE '%another%' THEN 1 END) AS count2,
    COUNT(CASE WHEN `col1` LIKE '%word%' THEN 1 END) AS count3
FROM `table1`; 

16

হারুনের দ্রাব্যতার মতো, খাটো সিনট্যাক্স:

SELECT
    SUM(col1 LIKE '%something%') AS count1,
    SUM(col1 LIKE '%another%') AS count2,
    SUM(col1 LIKE '%word%') AS count3
FROM `table1`

লাইক এক্সপ্রেশন একটি বুলিয়ান ফলাফল তৈরি করে। TRUEহয় 1 , FALSEহয় 0 তাই হয়, CASEঅপ্রয়োজনীয় এখানে।


খুব ঝরঝরে এবং সংক্ষিপ্ত - তবে যখন গণনাগুলি একটি টিনআইএনটিতে ফিট না করে - তখন কী ঘটে যায় - আপনি কী ত্রুটি পান বা কোনও ধরণের রূপান্তর ঘটে?
জ্যাক বলছেন টপান্সওয়ার্স.অক্সিজ

সেখানে নেই TINYINTএই গল্পের। SUMএটি যে ধরণের সংখ্যা (এমনকি ভাসমান) নেয় এবং একটি সংখ্যাসূচক ফলাফল উত্পন্ন করে। হাজারে মান পেতে আপনি টাইপের SUMকলামগুলি করতে পারেন TINYINT- এটি কোনও সমস্যা নয়।
Shlomi Noach

আপনি অবশ্যই জানেন যে বুলটি টিনিনেন্ট বিটিডব্লির সমার্থক?
জ্যাক বলছেন topanswers.xyz

হ্যাঁ, আমার বন্ধু, আমি এটি জানি। " TINYINTএই গল্পটির কোনও নেই " দিয়ে শুরু করা খুব ভাল বাক্য ছিল না।
Shlomi Noach

1
এমএস এসকিউএল সার্ভারের নির্দিষ্ট উত্তরটির সন্ধানে যে কেউ এখানে হোঁচট খেয়েছে তার একটি নোট, SUMএখানে উল্লিখিত ফাংশন এমএস এসকিউএল সার্ভারে একইভাবে কাজ করে না। ট্রান্সেক্ট-এসকিউএল-তে SUMকেবল সংখ্যাসূচক কলামগুলি ব্যবহার করা যায়।
user1451111

-1

আমি যদি আপনার প্রয়োজনটি সঠিকভাবে পাই তবে সম্ভবত এটি কৌশলটি করবে:

SELECT SUM(CASE 
  WHEN col1 LIKE '%something' THEN 1 
  WHEN col1 LIKE '%another%' THEN 1 
END) AS result
FROM table1;

1
অ্যারনস অ্যাঞ্জারটির দিকে তাকানো যা সম্ভবত আপনি পরে রয়েছেন - একাধিক গণনা পেতে - সমস্ত সংখ্যার যোগফল নয়।
জনপি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.