Гость
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Проценты в SQLite / 7 сообщений из 7, страница 1 из 1
20.03.2017, 16:59
    #39423400
EITKpoll
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проценты в SQLite
Основная задача состоит:
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
20.03.2017, 18:09
    #39423474
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проценты в SQLite
...
Рейтинг: 0 / 0
20.03.2017, 23:08
    #39423652
EITKpoll
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проценты в SQLite
White OwlПункты 4 и 5.
Окончательный результат на картинке первой таблицы получить предпочтительней.
...
Рейтинг: 0 / 0
21.03.2017, 00:48
    #39423671
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проценты в SQLite
Все равно, не до конца понимаю что тебе нужно.

Но кажется, тебе должна помочь конструкция типа:
Код: 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
21.03.2017, 00:50
    #39423672
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проценты в SQLite
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
21.03.2017, 20:16
    #39424381
EITKpoll
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проценты в SQLite
Спасибо за работу, но нужно другое.
Меня тоже 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
25.03.2017, 21:56
    #39427136
EITKpoll
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проценты в SQLite
Это ответ на вопрос:
Код: 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
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Проценты в SQLite / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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