powered by simpleCommunicator - 2.0.35     © 2025 Programmizd 02
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Проценты в SQLite
7 сообщений из 7, страница 1 из 1
Проценты в SQLite
    #39423400
EITKpoll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Основная задача состоит:
1) в объединении двух таблиц (patentInfo, которая содержит общую информацию о патентах и patent_country в которой перечислены несколько стран-держателей (country)).
2) и в вычислении количества идентичных строк поля (country) и вывода их процентного соотношения, в сгруппированных записях по совпадающему полю (сс).
т. к. [patentInfo].idpatentinfo=[patent_country].id_patent, т. е. id патента соответствует несколько строк стран-держателей.
Нужна помощь в решении основной задачи.
Я написал запрос для вычисления количества идентичных строк и вывода их процентного соотношения. Таблица формируется так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
CREATE TABLE [patentInfo] (
	[idpatentinfo] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
	[cc] VARCHAR(2), 
	[patNumber] VARCHAR(10))
  
  INSERT INTO patentInfo (cc, patNumber)
  VALUES ('DE',10152968);
  INSERT INTO patentInfo (cc, patNumber)
  VALUES ('DE',10240659);
  INSERT INTO patentInfo (cc, patNumber)
  VALUES('DE',10149620);
  INSERT INTO patentInfo (cc, patNumber)
  VALUES('RU',2206837);
  INSERT INTO patentInfo (cc, patNumber)
  VALUES('RU',2209379);
  INSERT INTO patentInfo (cc, patNumber)
  VALUES('RU',2204769);
  INSERT INTO patentInfo (cc, patNumber)
  VALUES('RU',2210039);
  INSERT INTO patentInfo (cc, patNumber)
  VALUES('WO',2003042609);
  INSERT INTO patentInfo (cc, patNumber)
  VALUES('WO',2003006895);
  INSERT INTO patentInfo (cc, patNumber)
  VALUES('WO',2003019083);
  INSERT INTO patentInfo (cc, patNumber)
  VALUES('US',6637428);


Запрос вывода первых 10 значений:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
select country,
       prcnt || '%' prcnt
from (
    SELECT country, round( 100.0/(select count(*) from patent_country )* count(*),1) prcnt  
    FROM patent_country 
    GROUP BY country 
    ORDER BY COUNT(*) DESC
) tmp limit 10


Результат запроса примерно такой:country prcntUS 13.9%WO 10.2%EP 10.1%AU 9.4%JP 8.6%CN 7.0%DE 6.5%ES 4.7%CA 4.5%AT 4.2%

Вторая таблица:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
 CREATE TABLE [patent_country] (
  [id_patent_country] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, 
  [id_patent] INTEGER, 
  [country] VARCHAR)
  
  INSERT INTO patent_country (id_patent, country)
  VALUES (1,	'DE');
  INSERT INTO patent_country (id_patent, country)
  VALUES (2,	'AU');
  INSERT INTO patent_country (id_patent, country)
  VALUES (2,	'DE');
  INSERT INTO patent_country (id_patent, country)
  VALUES (2,	'WO');
  INSERT INTO patent_country (id_patent, country)
  VALUES (3,	'DE');
  INSERT INTO patent_country (id_patent, country)
  VALUES (4,	'RU');
  INSERT INTO patent_country (id_patent, country)
  VALUES (5,	'RU');
  INSERT INTO patent_country (id_patent, country)
  VALUES (6,	'RU');
  INSERT INTO patent_country (id_patent, country)
  VALUES (7,	'RU');
  INSERT INTO patent_country (id_patent, country)
  VALUES (8,	'AU');
  INSERT INTO patent_country (id_patent, country)
  VALUES (9,	'CN');
  INSERT INTO patent_country (id_patent, country)
  VALUES (9,	'DE');
  INSERT INTO patent_country (id_patent, country)
  VALUES (9,	'DK');
  INSERT INTO patent_country (id_patent, country)
  VALUES (9,	'EP');
...
Рейтинг: 0 / 0
Проценты в SQLite
    #39423474
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Проценты в SQLite
    #39423652
EITKpoll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White OwlПункты 4 и 5.
Окончательный результат на картинке первой таблицы получить предпочтительней.
...
Рейтинг: 0 / 0
Проценты в SQLite
    #39423671
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все равно, не до конца понимаю что тебе нужно.

Но кажется, тебе должна помочь конструкция типа:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
select 
       patentInfo.cc,
       tmp.country,
       tmp.prcnt || '%' prcnt
from patentInfo
join (
    SELECT country, round( 100.0/(select count(*) from patent_country )* count(*),1) prcnt  
    FROM patent_country 
  where patentInfo.idpatentinfo=patent_country.id_patent
    GROUP BY country 
    ORDER BY COUNT(*) DESC
) tmp
...
Рейтинг: 0 / 0
Проценты в SQLite
    #39423672
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sorry!
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
select 
       patentInfo.cc,
       tmp.country,
       tmp.prcnt || '%' prcnt
from patentInfo
join (
    SELECT country, id_patent, round( 100.0/(select count(*) from patent_country )* count(*),1) prcnt  
    FROM patent_country
    GROUP BY country, id_patent
    ORDER BY COUNT(*) DESC
) tmp 
  on patentInfo.idpatentinfo=tmp.id_patent
...
Рейтинг: 0 / 0
Проценты в SQLite
    #39424381
EITKpoll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за работу, но нужно другое.
Меня тоже sorry!
Буду исправляться. Я по новому получил таблицу [patent_country] и включил поле [cc]. Join использовать ненужно. Теперь у каждой записи есть атрибут по которому нужно эти записи отсортировать. В отсортированных записях нужно применить вычисление процентов. Для поля [country].
Конечно это не вся таблица, а только первая группа с атрибутом `AR`.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
|id_patent | country  |   сс     |
|--------------------------------|
| 2745     | AU       | AR       |
|--------------------------------|
| 2745     | DE       | AR       |
|--------------------------------|
| 2745     | US       | AR       |
|--------------------------------|
| 2745     | WO       | AR       |
 --------------------------------
Результат должен выглядеть так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
|          | country  | prcnt    |
|--------------------------------|
| AR       | AU       | 25%      |
|          ----------------------|
|          | DE       | 25%      |
|          ----------------------|
|          | US       | 25%      |
|          ----------------------|
|          | WO       | 25%      |
 --------------------------------
итд
...
Рейтинг: 0 / 0
Проценты в SQLite
    #39427136
EITKpoll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это ответ на вопрос:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
select 
  ccg.cc, cg.country || ' ' || round((100.0 * cCnt / Cnt),1) || '%' Prc
from (
  select 
    cc, count(*) Cnt
  from
    patent_country 
  group by cc
) ccg
  join (
    select
      cc, country, count(*) cCnt
    from
      patent_country
    group by cc, country
) cg on ccg.cc = cg.cc
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Проценты в SQLite
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]