每组的SQL平均ok值

时间:2015-07-24 06:49:31

标签: python sqlite

我想从我的表中获取一些值,但是,由于表的结构,我不确定这是否可能:

这里有一个表的样本,我在表格中放了一些空格,以便于阅读。

正如您所看到的,有很多页面,有3个/页面和3个通道/行。 还有设备,每个设备包含3个部分。 9台设备/页面。 最后,某些分析的每个细分结果,传递= 1或传递= 0。

ID channel row page segment device passed
1     1     1    1     1      1       1
2     1     1    1     2      1       0
3     1     1    1     3      1       1
4     2     1    1     1      2       0
5     2     1    1     2      2       0
6     2     1    1     3      2       0
7     3     1    1     1      3       1
8     3     1    1     2      3       0
9     3     1    1     3      3       1
10    1     2    1     1      4       1
11    1     2    1     2      4       1
12    1     2    1     3      4       1
13    2     2    1     1      5       0
14    2     2    1     2      5       1
15    2     2    1     3      5       1
16    3     2    1     1      6       1
17    3     2    1     2      6       1
18    3     2    1     3      6       1
19    1     3    1     1      7       1
20    1     3    1     2      7       0
21    1     3    1     3      7       1
22    2     3    1     1      8       1
23    2     3    1     2      8       0
24    2     3    1     3      8       1
25    3     3    1     1      9       1
26    3     3    1     2      9       0
27    3     3    1     3      9       1
NEXT PAGE..................................
28    1     1    2     1      1       0
29    1     1    2     2      1       0
30    1     1    2     3      1       1
31    2     1    2     1      2       1
32    2     1    2     2      2       1
33    2     1    2     3      2       0
34    3     1    2     1      3       1
35    3     1    2     2      3       0
36    3     1    2     3      3       1
37    1     2    2     1      4       1
38    1     2    2     2      4       0
39    1     2    2     3      4       0
40    2     2    2     1      5       0
41    2     2    2     2      5       1
42    2     2    2     3      5       0
43    3     2    2     1      6       1
44    3     2    2     2      6       1
45    3     2    2     3      6       1
46    1     3    2     1      7       0
47    1     3    2     2      7       1
48    1     3    2     3      7       1
49    2     3    2     1      8       1
50    2     3    2     2      8       1
51    2     3    2     3      8       1
52    3     3    2     1      9       0
53    3     3    2     2      9       1
54    3     3    2     3      9       0
etc.......................................

我正在寻找的计算是传递的设备的百分比(传递= 1),但按设备分组,这对我来说很困难,因为每个设备只是在设备内传递所有段时才通过。 / p>

如果seg1 = 1且seg2 = 1且seg3 = 1

,则设备= 1

预期输出类似于:(此处不是真实数据)

Device    passed   
  1        27.45
  2        56.78
  3        78.9 
  4        11.23
  5        etc
  6        etc
  7        etc
  8        etc
  9        etc

我知道我必须使用类似的东西,但它不起作用:

SELECT  device, count(passed) as devicesOK
FROM myTable
WHERE passed=1
group by device
having devicesOK=3

1 个答案:

答案 0 :(得分:2)

要获得通过的百分比,您必须将通过的数字除以每台设备的总数。

SELECT device, ROUND(SUM(passed)/COUNT(*)/100, 2) AS passed_percent
FROM myTable
GROUP BY device
HAVING SUM(passed) = 3

COUNT(passed)计算passed的非NULL值的数量。由于您的所有值都不是NULL,因此它们全部计算在内。