คำถามติดแท็ก aggregate-functions

12
SQL Server: ความแตกต่างระหว่าง PARTITION BY และ GROUP BY
ฉันใช้GROUP BYคำค้นหารวมทุกประเภทในช่วงหลายปีที่ผ่านมา เมื่อเร็ว ๆ นี้ฉันได้วิศวกรรมย้อนกลับบางรหัสที่ใช้PARTITION BYในการรวมตัว ในการอ่านเอกสารทั้งหมดที่ฉันสามารถหาได้PARTITION BYมันฟังดูเหมือนมากGROUP BYบางทีอาจมีฟังก์ชั่นพิเศษเพิ่มเติมเล็กน้อยบ้างไหม? พวกเขามีฟังก์ชั่นทั่วไปสองรุ่นที่เหมือนกันหรือว่าเป็นสิ่งที่แตกต่างอย่างสิ้นเชิง?

7
จะต้องปรากฏในข้อ GROUP BY หรือจะใช้ในฟังก์ชั่นรวม
ฉันมีตารางที่ดูเหมือนผู้โทรรายนี้ 'makerar' cname | wmname | avg --------+-------------+------------------------ canada | zoro | 2.0000000000000000 spain | luffy | 1.00000000000000000000 spain | usopp | 5.0000000000000000 และฉันต้องการเลือกเฉลี่ยสูงสุดสำหรับแต่ละชื่อ SELECT cname, wmname, MAX(avg) FROM makerar GROUP BY cname; แต่ฉันจะได้รับข้อผิดพลาด ERROR: column "makerar.wmname" must appear in the GROUP BY clause or be used in an aggregate …

30
ฟังก์ชั่นการคำนวณค่ามัธยฐานใน SQL Server
ตามMSDN , ค่ามัธยฐานไม่พร้อมใช้งานเป็นฟังก์ชันรวมใน Transact-SQL อย่างไรก็ตามฉันต้องการค้นหาว่าเป็นไปได้ที่จะสร้างฟังก์ชันนี้หรือไม่ (โดยใช้ฟังก์ชั่นสร้างการรวมฟังก์ชันที่ผู้ใช้กำหนดเองหรือวิธีอื่น) อะไรจะเป็นวิธีที่ดีที่สุด (ถ้าเป็นไปได้) ในการทำเช่นนี้ - อนุญาตให้มีการคำนวณค่ามัธยฐาน (สมมติว่าเป็นชนิดข้อมูลตัวเลข) ในแบบสอบถามรวม?

6
ใช้ฟังก์ชั่นหลายกับคอลัมน์หลายกลุ่มโดย
เอกสารแสดงวิธีการใช้ฟังก์ชั่นหลายคนบนวัตถุ GroupBy ในเวลาใช้ Dict ที่มีชื่อคอลัมน์ออกเป็นกุญแจ: In [563]: grouped['D'].agg({'result1' : np.sum, .....: 'result2' : np.mean}) .....: Out[563]: result2 result1 A bar -0.579846 -1.739537 foo -0.280588 -1.402938 อย่างไรก็ตามสิ่งนี้ใช้ได้กับวัตถุ Groupby ซีรีย์เท่านั้น และเมื่อ dict ถูกส่งผ่านไปยัง groupby DataFrame ในทำนองเดียวกันก็คาดว่าคีย์จะเป็นชื่อคอลัมน์ที่ฟังก์ชั่นจะถูกนำไปใช้ สิ่งที่ฉันต้องการทำคือใช้หลายฟังก์ชั่นกับหลายคอลัมน์ (แต่คอลัมน์บางคอลัมน์จะทำงานหลายครั้ง) นอกจากนี้บางฟังก์ชั่นจะขึ้นอยู่กับคอลัมน์อื่น ๆ ในวัตถุ groupby (เช่นฟังก์ชัน sumif) ทางออกปัจจุบันของฉันคือไปทีละคอลัมน์และทำบางอย่างเช่นโค้ดด้านบนโดยใช้ lambdas สำหรับฟังก์ชั่นที่ขึ้นอยู่กับแถวอื่น ๆ แต่มันใช้เวลานาน (ฉันคิดว่ามันต้องใช้เวลานานกว่าจะย้ำผ่านวัตถุกลุ่มโดย) ฉันจะต้องเปลี่ยนมันเพื่อที่ฉันจะวนซ้ำไปตามวัตถุทั้งหมดของกลุ่มในการวิ่งครั้งเดียว แต่ฉันสงสัยว่าถ้ามีแพนด้าในตัวเพื่อทำสิ่งนี้ค่อนข้างเรียบร้อย …

7
ประโยค SQL OVER () - เมื่อใดและทำไมจึงมีประโยชน์?
USE AdventureWorks2008R2; GO SELECT SalesOrderID, ProductID, OrderQty ,SUM(OrderQty) OVER(PARTITION BY SalesOrderID) AS 'Total' ,AVG(OrderQty) OVER(PARTITION BY SalesOrderID) AS 'Avg' ,COUNT(OrderQty) OVER(PARTITION BY SalesOrderID) AS 'Count' ,MIN(OrderQty) OVER(PARTITION BY SalesOrderID) AS 'Min' ,MAX(OrderQty) OVER(PARTITION BY SalesOrderID) AS 'Max' FROM Sales.SalesOrderDetail WHERE SalesOrderID IN(43659,43664); ฉันอ่านเกี่ยวกับข้อนั้นและฉันไม่เข้าใจว่าทำไมฉันต้องการมัน ฟังก์ชั่นOverทำอะไร? อะไรPartitioning Byทำอย่างไร ทำไมฉันไม่สามารถทำแบบสอบถามที่มีการเขียนGroup By SalesOrderID?

6
วิธีรวมผลลัพธ์“ ศูนย์” /“ 0” ในการรวม COUNT รายการ
ฉันเพิ่งติดอยู่กับ SQL เล็กน้อย ฉันไม่คิดว่าฉันจะเรียบเรียงคำถามได้อย่างยอดเยี่ยมดังนั้นให้ฉันแสดงให้คุณเห็น ฉันมีโต๊ะสองโต๊ะคนหนึ่งเรียกว่านัด ฉันกำลังพยายามส่งคืนจำนวนการนัดหมายที่บุคคลหนึ่งมีอยู่ (รวมถึงถ้าพวกเขามีศูนย์) การนัดหมายประกอบด้วยperson_idและมีการperson_idนัดหมายต่อครั้ง ดังนั้นจึงCOUNT(person_id)เป็นแนวทางที่สมเหตุสมผล คำถาม: SELECT person_id, COUNT(person_id) AS "number_of_appointments" FROM appointment GROUP BY person_id; จะกลับมาถูกต้องจำนวนการนัดหมายที่ person_id มี อย่างไรก็ตามบุคคลที่มีการนัดหมาย 0 ครั้งจะไม่กลับมา (เห็นได้ชัดว่าพวกเขาไม่ได้อยู่ในตารางนั้น) การปรับแต่งคำสั่งเพื่อรับ person_id จากตารางบุคคลทำให้ฉันมีบางสิ่งเช่น: SELECT person.person_id, COUNT(appointment.person_id) AS "number_of_appointments" FROM appointment JOIN person ON person.person_id = appointment.person_id GROUP BY person.person_id; อย่างไรก็ตามสิ่งนี้จะยังคงส่งคืนเฉพาะ person_id ที่มีการนัดหมายไม่ใช่สิ่งที่ฉันต้องการซึ่งเป็นการส่งคืนกับบุคคลที่มีการนัดหมาย 0 …

7
วิธีที่เหมาะสมที่สุดในการเชื่อมต่อ / รวมสตริง
ฉันกำลังหาวิธีรวมสตริงจากแถวต่างๆให้เป็นแถวเดียว ฉันต้องการทำสิ่งนี้ในสถานที่ต่างๆดังนั้นการมีฟังก์ชันเพื่ออำนวยความสะดวกก็น่าจะดี ฉันได้ลองวิธีแก้ปัญหาโดยใช้COALESCEและFOR XMLแต่ก็ไม่ได้ตัดให้ฉัน การรวมสตริงจะทำสิ่งนี้: id | Name Result: id | Names -- - ---- -- - ----- 1 | Matt 1 | Matt, Rocks 1 | Rocks 2 | Stylus 2 | Stylus ฉันได้ดูฟังก์ชันการรวมที่กำหนดโดย CLRเพื่อทดแทนCOALESCEและFOR XMLแต่เห็นได้ชัดว่าSQL Azure ไม่รองรับสิ่งที่กำหนดโดย CLR ซึ่งเป็นความเจ็บปวดสำหรับฉันเพราะฉันรู้ว่าการใช้งานได้จะช่วยแก้ปัญหาได้มากมาย ปัญหาสำหรับฉัน มีวิธีแก้ปัญหาที่เป็นไปได้หรือวิธีการที่ดีที่สุดในทำนองเดียวกัน (ซึ่งอาจไม่เหมาะสมเท่า CLR แต่เดี๋ยวก่อนฉันจะเอาสิ่งที่ฉันได้รับ) ที่ฉันสามารถใช้เพื่อรวบรวมสิ่งของของฉันได้ไหม

6
MySQL“ Group By” และ“ Order By”
ฉันต้องการที่จะสามารถเลือกแถวจำนวนมากจากตารางอีเมลและจัดกลุ่มตามผู้ส่งจาก ข้อความค้นหาของฉันมีลักษณะดังนี้: SELECT `timestamp`, `fromEmail`, `subject` FROM `incomingEmails` GROUP BY LOWER(`fromEmail`) ORDER BY `timestamp` DESC แบบสอบถามเกือบจะทำงานตามที่ฉันต้องการ - โดยจะเลือกระเบียนที่จัดกลุ่มตามอีเมล ปัญหาคือหัวเรื่องและการประทับเวลาไม่ตรงกับบันทึกล่าสุดสำหรับที่อยู่อีเมลหนึ่ง ๆ ตัวอย่างเช่นอาจส่งคืน: fromEmail: john@example.com, subject: hello fromEmail: mark@example.com, subject: welcome เมื่อระเบียนในฐานข้อมูลคือ: fromEmail: john@example.com, subject: hello fromEmail: john@example.com, subject: programming question fromEmail: mark@example.com, subject: welcome หากหัวข้อ "คำถามการเขียนโปรแกรม" เป็นหัวข้อล่าสุดฉันจะให้ MySQL เลือกบันทึกนั้นเมื่อจัดกลุ่มอีเมลได้อย่างไร

24
LISTAGG ใน Oracle เพื่อส่งคืนค่าที่แตกต่างกัน
Наэтотвопросестьответына Stack Overflow нарусском : Какфункцией LISTAGG вернутьзначениябезповторений? ฉันพยายามใช้LISTAGGฟังก์ชันใน Oracle ฉันต้องการรับเฉพาะค่าที่แตกต่างกันสำหรับคอลัมน์นั้น มีวิธีใดบ้างที่ฉันจะได้รับเฉพาะค่าที่แตกต่างโดยไม่ต้องสร้างฟังก์ชันหรือขั้นตอน? col1 col2 Created_by 1 2 สมิ ธ 1 2 ยอห์น 1 3 อ 1 4 ราม 1 5 แจ็ค ฉันต้องการเลือก col1 และLISTAGGของ col2 (ไม่พิจารณาคอลัมน์ 3) เมื่อฉันทำเช่นนั้นฉันจะได้รับสิ่งนี้อันเป็นผลมาจากLISTAGG: [2,2,3,4,5] ฉันต้องการลบ '2' ที่ซ้ำกันที่นี่ ฉันต้องการเฉพาะค่าที่แตกต่างกันของ col2 เทียบกับ col1
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.