2015-08-08 53 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, ...} 
相關問題