2015-08-08 88 views
0
+-------------------+-------------------+----------+ 
| 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_dstbytes_inDjango - 获取字段A的总和,其中字段B等于字段B或字段C,在多行之间?

我需要获取表中存在的每个mac_src值在所有mac_srcmac_dst中的行。然后我需要所有这些行的字段bytes_in的总和。

我想获得字段mac_srcmac_dst相等的所有行的字段bytes_in的总和,然后将此和从高到低排序。

返回的Queryset应该每个mac_src只有一个条目。

谢谢。

回答

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, ...} 
相关问题