+-------------------+-------------------+----------+
| mac_src | mac_dst | bytes_in |
+-------------------+-------------------+----------+
| aa:aa:aa:aa:aa:aa | bb:bb:bb:bb:bb:bb | 10 |
| bb:bb:bb:bb:bb:bb | aa:aa:aa:aa:aa:aa | 20 |
| cc:cc:cc:cc:cc:cc | aa:aa:aa:aa:aa:aa | 30 |
+-------------------+-------------------+----------+
我的表格包含字段mac_src
,mac_dst
和bytes_in
。
我需要获取表格中存在的每个mac_src
值存在于mac_src
或mac_dst
中的所有行。然后我需要所有这些行的字段bytes_in
的总和。
我希望获得字段bytes_in
和mac_src
相等的所有行的字段mac_dst
的总和,然后将此总和从最高到最低排序。
返回的Queryset每个mac_src
只有一个条目。
感谢。
答案 0 :(得分:0)
我不认为只用Django ORM就可以做到这一点。只需编写一个SQL查询(警告:未经测试且可能在下面缓慢的SQL):
from django.db import connection
with connection.cursor() as cursor:
cursor.execute('''
SELECT mac, SUM(total) FROM (
(SELECT mac_src AS mac, SUM(bytes_in) AS total FROM your_table GROUP BY mac_src)
UNION ALL (SELECT mac_dst AS mac, SUM(bytes_in) AS total FROM your_table WHERE mac_src != mac_dst GROUP BY mac_dst)
) AS combined_rows GROUP BY mac
''')
counts = dict(cursor.fetchall()) # {mac1: total_bytes1, ...}