Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在每个箱子里数数_Sql_Count_Grouping - Fatal编程技术网

Sql 在每个箱子里数数

Sql 在每个箱子里数数,sql,count,grouping,Sql,Count,Grouping,有没有办法简化这个SQL查询 SELECT count(case when R1 >= 0 AND R1 < 5 AND (M1/102) >= 0 AND (M1/102) < 4 THEN 1 END) AS BIN0_1, count(case when R1 >= 0 AND R1 < 5 AND (M1/102) >= 4 AND (M1/102) < 8 THEN 1 END) AS BIN0_2, count(case when R1

有没有办法简化这个SQL查询

SELECT
count(case when R1 >= 0 AND R1 < 5 AND (M1/102) >= 0 AND (M1/102) < 4 THEN 1 END) AS BIN0_1,
count(case when R1 >= 0 AND R1 < 5 AND (M1/102) >= 4 AND (M1/102) < 8 THEN 1 END) AS BIN0_2,
count(case when R1 >= 0 AND R1 < 5 AND (M1/102) >= 8 AND (M1/102) < 12 THEN 1 END) AS BIN0_3,
count(case when R1 >= 0 AND R1 < 5 AND (M1/102) >= 12 AND (M1/102) < 16 THEN 1 END) AS BIN0_4,
count(case when R1 >= 0 AND R1 < 5 AND (M1/102) >= 16 AND (M1/102) < 245 THEN 1 END) AS BIN0_5,
count(case when R1 >= 5 AND R1 < 15 AND (M1/102) >= 0 AND (M1/102) < 4 THEN 1 END) AS BIN5_1,
count(case when R1 >= 5 AND R1 < 15 AND (M1/102) >= 4 AND (M1/102) < 8 THEN 1 END) AS BIN5_2,
count(case when R1 >= 5 AND R1 < 15 AND (M1/102) >= 8 AND (M1/102) < 12 THEN 1 END) AS BIN5_3,
count(case when R1 >= 5 AND R1 < 15 AND (M1/102) >= 12 AND (M1/102) < 16 THEN 1 END) AS BIN5_4,
count(case when R1 >= 5 AND R1 < 15 AND (M1/102) >= 16 AND (M1/102) < 20 THEN 1 END) AS BIN5_5,
count(case when R1 >= 5 AND R1 < 15 AND (M1/102) >= 20 AND (M1/102) < 245 THEN 1 END) AS BIN5_6,
count(case when R1 >= 15 AND R1 < 30 AND (M1/102) >= 0 AND (M1/102) < 4 THEN 1 END) AS BIN15_1,
count(case when R1 >= 15 AND R1 < 30 AND (M1/102) >= 4 AND (M1/102) < 8 THEN 1 END) AS BIN15_2,
count(case when R1 >= 15 AND R1 < 30 AND (M1/102) >= 8 AND (M1/102) < 12 THEN 1 END) AS BIN15_3,
count(case when R1 >= 15 AND R1 < 30 AND (M1/102) >= 12 AND (M1/102) < 16 THEN 1 END) AS BIN15_4,
count(case when R1 >= 15 AND R1 < 30 AND (M1/102) >= 16 AND (M1/102) < 20 THEN 1 END) AS BIN15_5,
count(case when R1 >= 15 AND R1 < 30 AND (M1/102) >= 20 AND (M1/102) < 245 THEN 1 END) AS BIN15_6

FROM MyTable
WHERE U1 = 'pmd'
AND day >= '2014-01-01'
该表包括:

200k行和100列,列R1的数值介于0-600之间 M1列数值介于1到25000之间 结果应为每个箱子中出现的计数行或列

例如,BIN0_1在以下情况下应具有出现次数:


0您可以使用标志替换比较。这样,您就不必重复它们:

SELECT (r1_0_5 * m1_0_4) as bin_01
FROM (SELECT (case when R1 >= 0 AND R1 < 5 then 1 else 0 end) as r1_0_5,
             (case when R1 >= 5 AND R1 < 15 then 1 else 0 end) as r1_5_15,
             (case when R1 >= 15 AND R1 < 30 then 1 else 0 end) as r1_15_30,
             (case when (M1/102) >= 0 AND (M1/102) < 4 then 1 else 0 end) as m1_0_4,
             . . .   
      FROM MyTable
      WHERE U1 = 'pmd' AND day >= '2014-01-01'
     ) t;
或者,您可以将结果放在输出中的不同行上:

SELECT r_bin, m_bin, count(*)
FROM (SELECT (case when R1 >= 0 AND R1 < 5 then '0_5',
                   when R1 >= 5 AND R1 < 15 then '5_15',
                   when R1 >= 15 AND R1 < 30 then '15_30'
              end) as r_bin,
             (case when (M1/102) >= 0 AND (M1/102) < 4 then '0_4'
                   . . .
              end) as m_bin   
      FROM MyTable
      WHERE U1 = 'pmd' AND day >= '2014-01-01'
     ) t
group by r_bin, m_bin;

您可以使用BETWEEN而不是separate>=和您使用的RDBMS是什么?其中一些具有内置的pivot方法,可能有助于简化此过程。@Barmar,使用Netezza