จัดกลุ่มตาม & นับฟังก์ชันใน sqlalchemy


111

ฉันต้องการคำสั่ง "จัดกลุ่มและนับ" ใน sqlalchemy ฉันจะทำเช่นนี้ได้อย่างไร?


1
ดูเหมือนจะซ้ำกับstackoverflow.com/questions/370174/…
Arnkrishn

1
ขอบคุณขอบคุณมาก
Nazmul Hasan

คำตอบ:


172

เอกสารเกี่ยวกับการนับกล่าวว่าสำหรับgroup_byคำสั่งจะดีกว่าการใช้งานfunc.count():

from sqlalchemy import func
session.query(Table.column, func.count(Table.column)).group_by(Table.column).all()

16
และนี่คือแถลงการณ์ฉบับเต็มสำหรับผู้ที่ใช้Table.queryทรัพย์สินแทนsession.query():Table.query.with_entities(Table.column, func.count(Table.column)).group_by(Table.column).all()
Jakub Kukul

2
@jkukul นี่น่าจะเป็นคำตอบของมันเอง - ฉันมักจะสงสัยว่าจะหลีกเลี่ยงข้อ จำกัด นี้ได้อย่างไรเมื่อทำแบบสอบถามย่อยและต้องการใช้ group_by และนับ .. !
chris-sc

1
การแก้ไขคำตอบนี้ทำให้ประโยคแรกไม่มีความหมาย "ดีกว่า" เพราะอะไร ?
Mark Amery

36

หากคุณกำลังใช้Table.queryทรัพย์สิน:

from sqlalchemy import func
Table.query.with_entities(Table.column, func.count(Table.column)).group_by(Table.column).all()

หากคุณใช้session.query()วิธีการ (ตามที่ระบุไว้ในคำตอบของ miniwark):

from sqlalchemy import func
session.query(Table.column, func.count(Table.column)).group_by(Table.column).all()

+ หนึ่งสำหรับกับเอนทิตี
Espoir Murhabazi

28

คุณยังสามารถไว้วางใจได้ในหลายกลุ่มและจุดตัดของพวกเขา:

self.session.query(func.count(Table.column1),Table.column1, Table.column2).group_by(Table.column1, Table.column2).all()

คำค้นหาด้านบนจะส่งคืนการนับสำหรับชุดค่าผสมที่เป็นไปได้ทั้งหมดจากทั้งสองคอลัมน์


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