Я пытаюсь вернуть наиболее распространенные проблемы со здоровьем и больницу, которая имеет самый высокий показатель этой проблемы. Так что я смог заставить его вернуть наиболее распространенные проблемы в США, сгруппировав их. Как заставить его вернуть больницу в рамках той проблемы, с которой он чаще всего сталкивается?

Таблица, которую я запрашиваю, выглядит так:

provider_id | drg_definition | provider_name | total_discharges
1234        | 104 joint repl | Bost Regional | 4000
1235        | 105 hrt attack | NYC emergency | 7000

Вот что у меня есть:

#standardSQL
SELECT
  drg_definition,
  SUM(total_discharges) total_discharge_per_drg
FROM
  `bigquery-public-data.cms_medicare.hospital_general_info` gi
INNER JOIN
  `bigquery-public-data.cms_medicare.inpatient_charges_2015` ic
ON
  gi.provider_id = ic.provider_id
GROUP BY
 drg_definition
ORDER BY
  total_discharge_per_drg DESC
LIMIT 50;

Мой желаемый результат

Row | drg_definition | total_discharge_per_dsg | top_provider | cases
1   | 104 joint      | 15000                   | Austin       | 4000

* Все номера составлены, столбцы и формат таблицы не

0
oabdel 25 Ноя 2019 в 02:12
1
Создать структуру таблицы, исходя из вашего запроса и объяснения, непросто. Вам нужно будет предоставить нам образцы данных и ожидаемые результаты (это лучший метод для вопросов по sql).
 – 
GMB
25 Ноя 2019 в 02:23
Примеры данных и желаемые результаты помогут. Что вы имеете в виду, говоря «справляется с этим больше всего»?
 – 
Gordon Linoff
25 Ноя 2019 в 02:33
Linoff Просто отредактировал, чтобы было понятнее.
 – 
oabdel
25 Ноя 2019 в 02:43
@oabdel: ваш запрос извлекает данные из двух таблиц, но вы показываете только одну в своих образцах данных. И в результатах есть столбцы, которых нет в выборке данных (например, top_city и cases). Это все еще недостаточно помогает. Имейте в виду, что мы, ребята, ничего не знаем о ваших структурах данных ...
 – 
GMB
25 Ноя 2019 в 02:50
Вы можете использовать связанный подзапрос для столбца top_city, который находит наиболее частую больницу для drg_definition в строке.
 – 
Bohemian
25 Ноя 2019 в 02:51

1 ответ

Это делает то, что вы хотите?

SELECT drg_definition,
       SUM(total_discharges) as total_discharge_per_drg,
       ARRAY_AGG(ic.provider_id ORDER BY total discharges DESC LIMIT 1) as provider_with_most_discharges
FROM `bigquery-public-data.cms_medicare.hospital_general_info` gi INNER JOIN
      `bigquery-public-data.cms_medicare.inpatient_charges_2015` ic
      ON gi.provider_id = ic.provider_id
GROUP BY drg_definition
ORDER BY total_discharge_per_drg DESC
LIMIT 50;
1
Gordon Linoff 25 Ноя 2019 в 05:04
ДА! Это феноменально, спасибо. Два вопроса: как работает логика этого массива? Это возвращает количество разрядов, с которыми имел дело провайдер, но не отображает имя. Как я могу добавить столбец для имени этого провайдера? Ниже новый вывод Row | drg_definition | total_discharge_per_dsg | provider_with_most_discharges 1 | 104 сустава | 15000 | 4000
 – 
oabdel
25 Ноя 2019 в 05:45
. . . Используйте provider_name, если вам нужно имя, а не provider_id. Если вы хотите понять array_agg(), я бы отослал вас к документу BQ.
 – 
Gordon Linoff
25 Ноя 2019 в 14:38
 – 
Jofre
9 Дек 2019 в 17:22