SQL количество строк со значением больше порога для набора столбцов - PullRequest
0 голосов
/ 04 февраля 2020

У меня есть таблица с двумя столбцами индекса (time_secs и session) и 20 metric_* столбцами со значениями с плавающей запятой.

Здесь есть небольшая выборка:

sqlite> SELECT time_secs, session, metric_1, metric_1_likelihood, metric_2, metric_2_likelihood FROM full_ts LIMIT 10;
time_secs   session     metric_1            metric_1_likelihood  metric_2           metric_2_likelihood
----------  ----------  ------------------  -------------------  -----------------  -------------------
1572522600  session_0   0.0698785211320749  0.424853512805612    0.494699869796956  0.962915383990865  
1572522900  session_0   0.760571893135022   0.294675049990505    0.580396389327591  0.934424555702509  
1572523200  session_0   0.629603845787639   0.806491332113479    0.16589472228813   0.963243379341578  
1572523500  session_0   0.0571856086488497  0.605895821260498    0.910067195100557  0.480348834963859  
1572523800  session_0   0.840306423849594   0.54489589788877     0.352571588765252  0.160847342139792  
1572524100  session_0   0.681384243040651   0.528022904478869    0.047929896649995  0.572242594863986  
1572524400  session_0   0.349861113535551   0.788712196665348    0.010245146069704  0.548463092362831  
1572524700  session_0   0.150289974958309   0.511662214212664    0.60765291353699   0.178207027680503  
1572525000  session_0   0.495015984152799   0.0217641427448981   0.564055630347545  0.652345164013304  
1572525300  session_0   0.608194881163176   0.065551216982212    0.938749939090523  0.682270932390147  
sqlite> 

Для каждого столбца метри c я бы хотел, чтобы количество строк было больше определенных значений.

В pandas я мог бы сделать что-то вроде:

In [5]: df = df.set_index(['time_secs', 'session'])                                                                                                                                                         

In [6]: (df > 0.5).sum(axis=0)                                                                                                                                                                              
Out[6]: 
metric_0                46
metric_0_likelihood     50
metric_1                51
metric_1_likelihood     33
metric_2                50
metric_2_likelihood     54
metric_3                53
metric_3_likelihood     55
metric_4                42
metric_4_likelihood     49
metric_5                47
metric_5_likelihood     53
metric_6                48
metric_6_likelihood     45
metric_7                44
metric_7_likelihood     57
metric_8                46
...

но мне нужно это с помощью sqlite.

Ответы [ 3 ]

0 голосов
/ 04 февраля 2020

Вам необходимо использовать условное агрегирование, считая только строки с metric больше 0.5:

SELECT COUNT(CASE WHEN metric_0 > 0.5 THEN 1 END) AS metric_0,
       COUNT(CASE WHEN metric_0_likelihood > 0.5 THEN 1 END) AS metric_0_likelihood,
       COUNT(CASE WHEN metric_1 > 0.5 THEN 1 END) AS metric_1,
       COUNT(CASE WHEN metric_1_likelihood > 0.5 THEN 1 END) AS metric_1_likelihood,
       -- etc etc etc
FROM yourtable
0 голосов
/ 04 февраля 2020

SELECT COUNT (*) ОТ full_ts WHERE metric_1> значение

0 голосов
/ 04 февраля 2020

Если я правильно понимаю, вы хотите отключить данные, а затем выполнить подсчет:

SELECT which,
       SUM(CASE WHEN val > 0.5 THEN 1 ELSE 0 END)
FROM (SELECT time_secs, session, 'metric_1' as which, metric_1 as val
      FROM full_ts
      UNION ALL
      SELECT time_secs, session, 'metric_1_likelihood' as which, metric_1_likelihood as val
      FROM full_ts
      SELECT time_secs, session, 'metric_2' as which, metric_2 as val
      FROM full_ts
      UNION ALL
      SELECT time_secs, session, 'metric_2_likelihood' as which, metric_2_likelihood as val
      FROM full_ts
     ) m
GROUP BY which;

РЕДАКТИРОВАТЬ:

Вы можете отключить, выполнив:

select c.which,
       (case when c.which = 'metric_1' then t.metric_1
             when c.which = 'metric_1_likelihood' then t.metric_1_likelihood
             . . .
        end) as val
from full_ts t cross join
     (select 'metric_1' as which union all
      select 'metric_1_likelihood' union all
      . . .
    ) c(which)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...