Посчитайте с условием в SQL - PullRequest
0 голосов
/ 01 ноября 2019

У меня есть таблица с именем shop order. Он содержит разные номера деталей, такие как:

part_no
-------
1252
1222
2222
2589
3564
4587
.
.
.
9565
9623

Теперь вопрос заключается в том, как подсчитать и отобразить part_no, группируя по первой цифре?

Например, я хочу показать count part_no like '1%' = 3 (результат: count1 = 3) и считать part_no like '2%' = 2 (результат: count2 = 2) ..... Count9 = 2.

Результат:

1st digit   count
---------   -----
1           3
2           2
9           2

Этоможно показать результат от 1 до 9 за один раз?

Ответы [ 2 ]

3 голосов
/ 01 ноября 2019

Это будет

select substr(part, 1, 1) as grp,
       count(*) as cnt
from shop_order
group by substr(part, 1, 1);

Например (на основе таблицы Скотта EMP):

SQL> select empno, ename, substr(empno, 2) as part from emp order by 3;

     EMPNO ENAME      PART
---------- ---------- -----
      7369 SMITH      369     3 - count = 1
      7499 ALLEN      499     4 - count = 1
      7521 WARD       521     5 - count = 2
      7566 JONES      566
      7654 MARTIN     654     6 - count = 2
      7698 BLAKE      698
      7782 CLARK      782     7 - count = 2
      7788 SCOTT      788
      7839 KING       839     8 - count = 3
      7844 TURNER     844
      7876 ADAMS      876
      7900 JAMES      900     9 - count = 3
      7902 FORD       902
      7934 MILLER     934

14 rows selected.

SQL>

Тогда у вас будет

SQL> with shop_order (part) as
  2    (select substr(empno, 2) from emp)
  3  select substr(part, 1, 1) as grp,
  4         count(*) cnt
  5  from shop_order
  6  group by substr(part, 1, 1)
  7  order by substr(part, 1, 1);

GRP         CNT
---- ----------
3             1
4             1
5             2
6             2
7             2
8             3
9             3

7 rows selected.

SQL>
0 голосов
/ 01 ноября 2019

Вы можете использовать условную агрегацию, если хотите, чтобы счетчики были в отдельных столбцах:

select sum(case when part like '1%' then 1 else 0 end) as count_1,
       sum(case when part like '2%' then 1 else 0 end) as count_2,
       . . .
       sum(case when part like '9%' then 1 else 0 end) as count_9
from shop_order so;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...