แตกต่างใน PostgreSQL: เลือก, เรียงลำดับตาม & จำกัด (ตัวอย่าง)

⚡ สรุปอย่างชาญฉลาด

แตกต่างใน PostgreSQL ใช้ร่วมกับคำสั่ง SELECT เพื่อลบแถวที่ซ้ำกันและส่งคืนเฉพาะค่าที่ไม่ซ้ำกัน เนื้อหาครอบคลุมไวยากรณ์ของ SELECT, SQL Shell และ pgAdmin, DISTINCT บนคอลัมน์เดียวและหลายคอลัมน์ และความแตกต่างระหว่าง DISTINCT กับ GROUP BY

  • 🔎 เลือก: ดึงข้อมูลคอลัมน์จากตารางด้วยคำสั่ง SELECT column FROM table
  • 🧹 แตกต่าง: ลบแถวที่ซ้ำกันออก และคงไว้เพียงแถวเดียวต่อค่าที่ไม่ซ้ำกัน
  • ↕️ สั่งโดย: โดยค่าเริ่มต้นจะเรียงลำดับจากน้อยไปมาก หรือจากมากไปน้อยโดยใช้คำสั่ง DESC
  • 🔢 LIMIT: จำกัดจำนวนผลลัพธ์ที่การค้นหาแสดงออกมา
  • 🖥️ เครื่องมือ: เรียกใช้คำสั่ง SQL เดียวกันใน SQL Shell หรือ pgAdmin

แตกต่างใน PostgreSQL

คุณสามารถดึงข้อมูลจากตารางได้โดยใช้คำสั่ง SELECT

ไวยากรณ์:

SELECT [column names] FROM [table_name]

ที่นี่

  • ชื่อคอลัมน์: ชื่อของคอลัมน์ที่คุณต้องการดึงค่าออกมา
  • จาก: ส่วน FROM กำหนดตารางต้นทางอย่างน้อยหนึ่งตารางสำหรับคำสั่ง SELECT
  • table_name: ชื่อของตารางที่มีอยู่แล้วที่คุณต้องการเรียกดูข้อมูล

อะไรคือความแตกต่างใน PostgreSQL?

การขอ DISTINCT ประโยคใน PostgreSQL ใช้ร่วมกับคำสั่ง SELECT เพื่อลบแถวที่ซ้ำกันออกจากชุดผลลัพธ์ เมื่อคอลัมน์มีค่าซ้ำกัน SELECT DISTINCT จะส่งคืนเฉพาะค่าที่ไม่ซ้ำกันเท่านั้นping แต่ละกลุ่มของรายการที่ซ้ำกันจะแสดงอยู่ในแถวเดียว วิธีนี้มีประโยชน์เมื่อคุณต้องการรายการที่ไม่ซ้ำกัน เช่น เมืองของลูกค้าที่ไม่ซ้ำกัน หรือหมวดหมู่ผลิตภัณฑ์ที่ไม่ซ้ำกัน

คำสั่ง DISTINCT จะประเมินคอลัมน์ทั้งหมดที่ระบุไว้ในคำสั่ง SELECT เพื่อตัดสินว่าแถวนั้นเป็นแถวที่ไม่ซ้ำกันหรือไม่ PostgreSQL นอกจากนี้ยังมีคำสั่ง DISTINCT ON ซึ่งจะส่งคืนแถวแรกสำหรับแต่ละค่าที่ไม่ซ้ำกันของนิพจน์ที่ระบุ คุณสามารถใช้ DISTINCT ร่วมกับ ORDER BY เพื่อควบคุมว่าแถวใดจะปรากฏ และใช้ร่วมกับ LIMIT เพื่อจำกัดจำนวนผลลัพธ์

PostgreSQL เลือกคำสั่งใน SQL Shell

ขั้นตอน 1) เรามีตารางชื่อ “tutorials” ซึ่งประกอบด้วย 2 คอลัมน์ คือ “id” และ “tutorial_name” เรามาลองเรียกดูข้อมูลจากตารางนี้กัน โดยใช้คำสั่งต่อไปนี้:

SELECT id,tutorial_name FROM tutorials;

PostgreSQL เลือกคำสั่งใน SQL Shell

หมายเหตุ: ใช้คำสั่ง \c เพื่อเชื่อมต่อกับฐานข้อมูลที่มีตารางที่คุณต้องการสอบถาม ในกรณีของเรา เราเชื่อมต่อกับฐานข้อมูล guru99

ขั้นตอน 2) หากคุณต้องการดูคอลัมน์ทั้งหมดในตารางใดตารางหนึ่ง คุณสามารถใช้เครื่องหมายดอกจัน (*) เป็นตัวอักษรแทนค่าได้ ซึ่งหมายความว่ามันจะตรวจสอบทุกความเป็นไปได้ และผลลัพธ์ที่ได้คือคอลัมน์ทั้งหมด

SELECT * FROM tutorials;

PostgreSQL เลือกคำสั่งใน SQL Shell

จะแสดงบันทึกทั้งหมดของตารางบทช่วยสอน

ขั้นตอน 3) คุณสามารถใช้ส่วนคำสั่ง ORDER เพื่อเรียงลำดับข้อมูลในตารางตามคอลัมน์ใดคอลัมน์หนึ่งได้ ส่วนคำสั่ง ORDER จัดระเบียบข้อมูลตามลำดับ A ถึง Z

SELECT * FROM tutorials ORDER BY id;

PostgreSQL เลือกคำสั่งใน SQL Shell

คุณสามารถเรียงลำดับจาก Z ถึง A ได้โดยใช้ "DESC" หลังคำสั่ง "ORDER BY"

SELECT * FROM tutorials ORDER BY id DESC;

PostgreSQL เลือกคำสั่งใน SQL Shell

ขั้นตอน 4) SELECT DISTINCT ใน PostgreSQL clause สามารถใช้เพื่อลบแถวที่ซ้ำกันออกจากผลลัพธ์ โดยจะเก็บหนึ่งแถวสำหรับรายการซ้ำแต่ละกลุ่ม

Syntax:
SELECT DISTINCT column_1 FROM table_name;

มาลองค้นหาค่า ID ที่ไม่ซ้ำกันจากตารางใน PostgreSQL โดยใช้คำสั่งค้นหาแบบ Distinct กันครับ PostgreSQL:

SELECT DISTINCT(id) FROM tutorials;

PostgreSQL เลือกคำสั่งใน SQL Shell

ขั้นตอน 5) คุณสามารถใช้ PostgreSQL คำสั่ง LIMIT ใช้เพื่อจำกัดจำนวนระเบียนที่ได้จากคำสั่ง SELECT

SELECT * FROM tutorials LIMIT 4;

PostgreSQL เลือกคำสั่งใน SQL Shell

PostgreSQL คำสั่ง Select ใน pgAdmin

ขั้นตอน 1) ในโครงสร้างอ็อบเจ็กต์:

  1. คลิกขวาที่ตาราง
  2. เลือกสคริปต์
  3. คลิกที่ เลือกสคริปต์ (SELECT SCRIPT)

PostgreSQL คำสั่ง Select ใน pgAdmin

ขั้นตอน 2) ในช่องด้านขวา:

  1. แก้ไขคำสั่ง SELECT หากจำเป็น
  2. คลิกที่ไอคอนสายฟ้า
  3. สังเกตผลลัพธ์

PostgreSQL คำสั่ง Select ใน pgAdmin

แตกต่างกันในหลายคอลัมน์

คำสั่ง SELECT DISTINCT สามารถใช้กับคอลัมน์มากกว่าหนึ่งคอลัมน์ได้ เมื่อคุณระบุคอลัมน์หลายคอลัมน์หลังจาก DISTINCT PostgreSQL ระบบจะถือว่าการรวมกันของคอลัมน์เหล่านั้นเป็นหน่วยเดียวกัน และจะลบแถวที่มีการซ้ำกันของการรวมกันทั้งหมดนั้นออกไป

Syntax:
SELECT DISTINCT column_1, column_2 FROM table_name;

ตัวอย่างเช่น หากต้องการดึงข้อมูลชุดค่าผสมที่ไม่ซ้ำกันของ tutorial_name และ id จากตาราง tutorials:

SELECT DISTINCT tutorial_name, id FROM tutorials;

ในกรณีนี้ แถวจะถูกลบออกก็ต่อเมื่อทั้ง tutorial_name และ id ตรงกับแถวอื่น หากสองแถวมี tutorial_name เหมือนกัน แต่มีค่า id ต่างกัน ทั้งสองแถวจะยังคงอยู่ เพราะการรวมกันยังคงเป็นเอกลักษณ์ พฤติกรรมนี้สำคัญมากที่ต้องจำไว้: คำสั่ง DISTINCT จะไม่ลบข้อมูลซ้ำในคอลัมน์เดียวเมื่อเลือกหลายคอลัมน์ แต่จะลบข้อมูลซ้ำในชุดคอลัมน์ที่เลือกทั้งหมดพร้อมกัน

DISTINCT กับ GROUP BY ใน PostgreSQL

ทั้งคำสั่ง DISTINCT และ GROUP BY สามารถลบค่าที่ซ้ำกันได้ แต่มีจุดประสงค์การใช้งานที่แตกต่างกัน:

  • DISTINCT ฟังก์ชันนี้จะส่งคืนเฉพาะแถวที่ไม่ซ้ำกันจากผลลัพธ์ และเหมาะที่สุดเมื่อคุณต้องการรายการที่ปราศจากข้อมูลซ้ำซ้อน
  • จัดกลุ่มตาม จัดกลุ่มแถวที่มีค่าร่วมกันเพื่อให้คุณสามารถใช้ฟังก์ชันการรวม เช่น COUNT, SUM หรือ AVG ให้กับแต่ละกลุ่ม

ตัวอย่างเช่น คำสั่งค้นหาทั้งสองด้านล่างนี้จะส่งคืนค่ารหัสที่ไม่ซ้ำกันทั้งคู่:

SELECT DISTINCT id FROM tutorials;
SELECT id FROM tutorials GROUP BY id;

ใช้ DISTINCT สำหรับรายการค่าที่ไม่ซ้ำกัน และใช้ GROUP BY เมื่อคุณต้องการคำนวณเพิ่มเติมสำหรับแต่ละกลุ่ม เช่น การนับจำนวนบทเรียนที่ใช้ ID เดียวกัน ในการค้นหาข้อมูลแบบง่ายๆ ตัววางแผนมักแสดงประสิทธิภาพที่คล้ายคลึงกันสำหรับทั้งสองวิธี แต่จำเป็นต้องใช้ GROUP BY เมื่อมีการรวมข้อมูลเกิดขึ้น

แผ่นโกง

SELECT [column names] FROM [table_name] [clause]

ต่อไปนี้คือพารามิเตอร์ต่างๆ:

  • ชื่อคอลัมน์: ชื่อของคอลัมน์ที่คุณต้องการดึงค่าออกมา
  • จาก: ส่วน FROM กำหนดตารางต้นทางอย่างน้อยหนึ่งตารางสำหรับคำสั่ง SELECT
  • table_name: ชื่อของตารางที่มีอยู่แล้วที่คุณต้องการเรียกดูข้อมูล

ข้อต่างๆ ได้แก่

คำสั่ง Descriptไอออน
* ดึงข้อมูลสำหรับทุกแถวในตาราง
DISTINCT แตกต่างใน PostgreSQL ช่วยให้คุณลบรายการซ้ำออกจากผลลัพธ์
สั่งโดย เรียงลำดับแถวตามคอลัมน์ ลำดับการเรียงเริ่มต้นคือจากน้อยไปมาก หากต้องการเรียงลำดับจากมากไปน้อย ให้ใช้คำสั่ง DESC
LIMIT ขีดจำกัดใน PostgreSQL จำกัดจำนวนระเบียนที่ส่งคืนโดยแบบสอบถาม

คำถามที่พบบ่อย

ใช่แล้ว ผู้ช่วย AI สามารถแปลงคำอธิบายให้เป็นคำสั่ง SELECT DISTINCT เพิ่ม ORDER BY หรือ LIMIT และอธิบายผลลัพธ์ได้ อย่างไรก็ตาม คุณควรทดสอบคิวรีบนสคีมาของคุณก่อนที่จะใช้งานจริง

ใช่แล้ว เครื่องมือ AI สามารถอ่านแผนการทำงานของคำสั่ง SQL จาก EXPLAIN ANALYZE และแนะนำดัชนีหรือการเขียน DISTINCT ใหม่เป็น GROUP BY ได้ ควรตรวจสอบคำแนะนำด้วยข้อมูลจริงเสมอ เนื่องจากประสิทธิภาพขึ้นอยู่กับขนาดของตารางและดัชนี

คำสั่ง DISTINCT จะลบแถวที่ซ้ำกันในทุกคอลัมน์ที่เลือก ส่วนคำสั่ง DISTINCT ON (expression) จะเก็บแถวแรกสำหรับแต่ละค่าที่ไม่ซ้ำกันของนิพจน์นั้น ทำให้คุณสามารถเลือกได้หนึ่งแถวต่อกลุ่ม ซึ่งโดยปกติจะใช้ร่วมกับคำสั่ง ORDER BY

คำสั่ง DISTINCT อาจทำงานช้าลงในตารางขนาดใหญ่ เนื่องจากต้องเปรียบเทียบและลบข้อมูลซ้ำ ซึ่งมักใช้การเรียงลำดับหรือการแฮช การสร้างดัชนีที่เหมาะสมและการจำกัดจำนวนคอลัมน์ที่เลือกจะช่วยลดต้นทุนได้

สรุปโพสต์นี้ด้วย: