ฉันจะค้นหาค่าที่พบบ่อยที่สุดในคอลัมน์ที่ระบุในตาราง SQL ได้อย่างไร
ตัวอย่างเช่นสำหรับตารางนี้ควรส่งคืนtwo
เนื่องจากเป็นค่าที่พบบ่อยที่สุด:
one
two
two
three
ฉันจะค้นหาค่าที่พบบ่อยที่สุดในคอลัมน์ที่ระบุในตาราง SQL ได้อย่างไร
ตัวอย่างเช่นสำหรับตารางนี้ควรส่งคืนtwo
เนื่องจากเป็นค่าที่พบบ่อยที่สุด:
one
two
two
three
คำตอบ:
SELECT `column`,
COUNT(`column`) AS `value_occurrence`
FROM `my_table`
GROUP BY `column`
ORDER BY `value_occurrence` DESC
LIMIT 1;
แทนที่column
และmy_table
. เพิ่มขึ้น1
หากคุณต้องการดูN
ค่าที่พบบ่อยที่สุดของคอลัมน์
SELECT * FROM my_table GROUP BY value ORDER BY count(*) DESC;
WHERE 'value_occurrence' = 1
?
HAVING
แทนWHERE
ในกรณีนี้
ลองสิ่งที่ชอบ:
SELECT `column`
FROM `your_table`
GROUP BY `column`
ORDER BY COUNT(*) DESC
LIMIT 1;
COUNT(*)
โดยตรงในไฟล์ORDER BY
. ฉันรู้ว่ามีข้อ จำกัด บางประการเกี่ยวกับGROUP BY
/ HAVING
และคอลัมน์รวมและฉันคิดเสมอว่าจะใช้ไม่ได้
ขอให้เราพิจารณาเป็นชื่อตารางและชื่อคอลัมน์เป็นtblperson
city
ฉันต้องการดึงเมืองที่ซ้ำกันมากที่สุดจากคอลัมน์เมือง:
select city,count(*) as nor from tblperson
group by city
having count(*) =(select max(nor) from
(select city,count(*) as nor from tblperson group by city) tblperson)
นี่nor
คือนามแฝง
แบบสอบถามด้านล่างดูเหมือนจะทำงานได้ดีสำหรับฉันในฐานข้อมูล SQL Server:
select column, COUNT(column) AS MOST_FREQUENT
from TABLE_NAME
GROUP BY column
ORDER BY COUNT(column) DESC
ผลลัพธ์:
column MOST_FREQUENT
item1 highest count
item2 second highest
item3 third higest
..
..
สำหรับใช้กับ SQL Server
เนื่องจากไม่มีการสนับสนุนคำสั่ง จำกัด ในนั้น
คุณสามารถใช้คำสั่ง 1 อันดับแรกเพื่อค้นหาค่าที่เกิดขึ้นสูงสุดในคอลัมน์เฉพาะในกรณีนี้ (ค่า)
SELECT top1
`value`,
COUNT(`value`) AS `value_occurrence`
FROM
`my_table`
GROUP BY
`value`
ORDER BY
`value_occurrence` DESC;
สมมติว่า Table คือ ' SalesLT.Customer
' และคอลัมน์ที่คุณพยายามหาคือ ' CompanyName
' และAggCompanyName
เป็นนามแฝง
Select CompanyName, Count(CompanyName) as AggCompanyName from SalesLT.Customer
group by CompanyName
Order By Count(CompanyName) Desc;
หากคุณไม่สามารถใช้ LIMIT หรือ LIMIT ไม่ใช่ตัวเลือกสำหรับเครื่องมือสืบค้นข้อมูลของคุณ คุณสามารถใช้ "ROWNUM" แทนได้ แต่คุณจะต้องมีคำค้นหาย่อย:
SELECT FIELD_1, ALIAS1
FROM(SELECT FIELD_1, COUNT(FIELD_1) ALIAS1
FROM TABLENAME
GROUP BY FIELD_1
ORDER BY COUNT(FIELD_1) DESC)
WHERE ROWNUM = 1
ROWNUM
LIMIT 1
แทน; ไวยากรณ์จะแสดงในคำตอบที่ยอมรับ
หากคุณมีคอลัมน์ ID และต้องการค้นหาหมวดหมู่ที่ซ้ำกันมากที่สุดจากคอลัมน์อื่นสำหรับแต่ละ ID คุณสามารถใช้แบบสอบถามด้านล่าง
ตาราง:
ค้นหา:
SELECT ID, CATEGORY, COUNT(*) AS FREQ
FROM TABLE
GROUP BY 1,2
QUALIFY ROW_NUMBER() OVER(PARTITION BY ID ORDER BY FREQ DESC) = 1;
ผลลัพธ์:
วิธีหนึ่งที่ฉันชอบใช้คือ:
เลือก ,นับ() เป็น VAR1 จาก Table_Name
จัดกลุ่มตาม
สั่งซื้อโดย VAR1 desc
ขีด จำกัด 1