ใช้ DISTINCT และ COUNT ร่วมกันใน MySQL Query


125

สิ่งนี้เป็นไปได้:

SELECT DISTINCT COUNT(productId) WHERE keyword='$keyword'

สิ่งที่ฉันต้องการคือการได้รับหมายเลขรหัสผลิตภัณฑ์เฉพาะซึ่งเกี่ยวข้องกับคำหลัก ผลิตภัณฑ์เดียวกันอาจเชื่อมโยงกับคำหลักสองครั้งหรือมากกว่านั้น แต่ฉันต้องการให้นับเพียง 1 ครั้งต่อรหัสผลิตภัณฑ์

คำตอบ:


277

ใช้

SELECT COUNT(DISTINCT productId) from  table_name WHERE keyword='$keyword'

อัปเดตคำตอบเนื่องจากใกล้จะกลายเป็นคำตอบที่ดีและมีความผิดพลาดทางไวยากรณ์
Rahul Tripathi

ฉันไม่เห็นด้วยกับคำตอบที่ไม่มีประสิทธิภาพที่ดีที่สุดเมื่อพูดถึงฐานข้อมูล สิ่งสำคัญคือต้องรักษามาตรฐานการปฏิบัติงาน ฉันจะไปกับคำตอบของ @ alistair-hart
JDuarteDJ

สะดุดสิ่งนี้ขณะมองหาสิ่งอื่นและเรียนรู้บางสิ่ง ฉันทำสิ่งนี้มาโดยSELECT COUNT(DISTINCT(productId)) from table_name WHERE keyword='$keyword'ตลอด ผมชอบรุ่นของคุณดีขึ้นผ่านสอง params COUNT( )ไป
Rockin4Life33

ที่แปลกใจคือฉันพบว่าไม่มีช่องว่างระหว่าง "COUNT" และวงเล็บเปิด - อย่างน้อยในเวอร์ชัน 10.1.41 ของ MariaDB
DRosenfeld

61

ฉันจะทำสิ่งนี้:

Select count(*), productid
from products
where keyword = '$keyword'
group by productid

ที่จะให้รายการเช่น

count(*)    productid  
----------------------
 5           12345   
 3           93884   
 9           93493    

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


31

คุณสนิท :-)

select count(distinct productId) from table_name where keyword='$keyword'

อัปเดตคำตอบเมื่อใกล้จะกลายเป็นคำตอบที่ดีและไม่ถูกต้องทางไวยากรณ์
Rahul Tripathi

19

FYI นี่อาจเร็วกว่า

SELECT count(1) FROM (SELECT distinct productId WHERE keyword = '$keyword') temp

กว่านี้,

SELECT COUNT(DISTINCT productId) WHERE keyword='$keyword'

ไม่แน่ใจว่าจะเร็วกว่าหรือไม่ แต่วิธีการนับหลายคอลัมน์ด้วยคำหลักที่แตกต่างกัน
VladL

คำตอบที่ยอดเยี่ยม คำตอบของเขาเร็วกว่าอย่างน้อย 100 เท่าในกรณีของฉัน การเปลี่ยนแปลงเล็กน้อยเพื่อความเข้าใจรหัสของ @ Alistair คือSELECT count(*) FROM (SELECT distinct productId WHERE keyword = '$keyword') temp
KarthikS

6

อับเรณูงานนี้เป็นบ้าอะไร

มันง่ายเกินไป

หากคุณต้องการรายการจำนวน productId ในแต่ละคำหลักนี่คือรหัส

SELECT count(productId),  keyword  FROM `Table_name` GROUP BY keyword; 

ขอบคุณสำหรับความคิดเห็นนั้นไม่ใช่คำตอบสำหรับคำถามที่แท้จริงของเขา แต่อาจเป็นสิ่งที่เขากำลังมองหาและมีประโยชน์ต่อไป
ลีโอ

4

การเลือกผลิตภัณฑ์ที่แตกต่างและจำนวนการแสดงผลต่อผลิตภัณฑ์

สำหรับคำตอบอื่นเกี่ยวกับคำถามประเภทนี้นี่เป็นอีกคำตอบของฉันสำหรับการนับจำนวนฐานผลิตภัณฑ์ที่แตกต่างจากชื่อผลิตภัณฑ์ดังตัวอย่างด้านล่างนี้:

ค่าตาราง

select * FROM Product

ชื่อผลิตภัณฑ์ที่นับ

SELECT DISTINCT(Product_Name),
(SELECT COUNT(Product_Name) 
from Product  WHERE Product_Name = Prod.Product_Name)  
as `Product_Count`
from Product as Prod

จำนวนบันทึก: 4; เวลาดำเนินการ: 2ms


-5

จัดกลุ่มตามไม่ดีกว่าเหรอ สิ่งที่ต้องการ:

SELECT COUNT(*) FROM t1 GROUP BY keywork;

1
เขาต้องการจำนวนรหัสผลิตภัณฑ์ที่แตกต่างกัน คำค้นหาของคุณส่งคืนจำนวนแถวสำหรับแต่ละคำหลัก
เดวิด
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.