Подзапрос в операторе выбора POSTGRESQL
Задавать вопрос
спросил
Изменено 1 год, 2 месяца назад
Просмотрено 344 раза
У меня есть две разные таблицы (медицинские данные и данные о приеме), обе из которых содержат дату оплаты и чистый платеж. Я хочу создать сводку отчета по годам и месяцам общей суммы медицинских чистых платежей и чистых платежей Rx. Когда я запускаю приведенный ниже SQL, POSTGRESQL говорит « подзапрос использует несгруппированный столбец «a.date_paid» из внешнего запроса »
Я думал сгруппировать по первой таблице и подзапросить общий чистый платеж из второй таблицы. POSTGRESQL
select cast(EXTRACT(YEAR FROM a. date_paid ) как текст) || to_char(a.date_paid,'mm') как date_paid, cast (сумма(a.net_payment) как деньги) как Medical,a.member_ssn, (Выберите сумму (b.netpayment) из elan.rx_claims b, где приведено (ИЗВЛЕЧЕНИЕ (ГОД ОТ a.date_paid) в виде текста) || to_char(a.date_paid,'mm')=cast(EXTRACT(YEAR FROM b.date_paid) как текст) || to_char(b.date_paid,'мм') и a.member_ssn=b.member_ssn ) как RxPaid от elan.staging_claims сгруппировать по составу (ВЫСТРОЙКА (ГОД ОТ a.date_paid) как текст) || to_char(a.date_paid,'мм'),a.member_ssn
- postgresql
- подзапрос
1
Я смог решить эту проблему самостоятельно…
выберите a.date_paid,a.member_ssn,memfirstname,memlastname ,cast (sum(a.net_payment) as money) , (Выберите сумму (b.netpayment) из elan.rx_claims b где приведено (ИЗВЛЕЧЕНИЕ (ГОД ИЗ a.date_paid) как текст) || to_char(a.date_paid,'mm')=cast(EXTRACT(YEAR FROM b.date_paid)как текст) || to_char(b. date_paid,'мм') и a.member_ssn=b.member_ssn) из elan.staging_claims a, elan.elig c где a.member_ssn=c.employeessn группировать по a.date_paid,a.member_ssn,memfirstname,memlastname имея сумму (a.net_payment) > 79999 заказ по 2 уб.
Зарегистрируйтесь или войдите в систему
Зарегистрируйтесь с помощью Google
Зарегистрироваться через Facebook
Зарегистрируйтесь, используя электронную почту и пароль
Опубликовать как гость
Электронная почта
Требуется, но никогда не отображается
Опубликовать как гость
Требуется, но не отображается
sql — как выбрать в select postgresql
спросил
Изменено 1 год, 8 месяцев назад
Просмотрено 394 раза
У меня есть столбец с именем jenis_kelamin. Я хочу отобразить пол мужчины и женщины в запросе на выборку. У меня есть подобный запрос, но полученные данные по-прежнему неверны, как правильно?
ВЫБРАТЬ различные mj.id, mj.nama_pd, (выберите отдельный счет (jenis_layanan) из public.isian_kuis где jenis_kelamin = «Лаки») как jumlah_laki, (выберите отдельный счет (jenis_layanan) от public.isian_kuis где jenis_kelamin = 'Perempuan' ) как jumlah_perempuan ОТ public.master_jabatan mj присоединиться к isian_kuis ik на ik.jabatan_id = mj.id группа по mj.id,mj.nama_pd заказать по mj.id;
У меня есть пример изображения моего запроса, это все еще неправильно
Правильные данные в том, что в ID 30 у него двое мужчин и одна женщина, в ID 29 только одна женщина
- sql
- postgresql
5
Нет необходимости использовать вложенный выбор, просто используйте Группировать по
, например:
ВЫБРАТЬ отдельный mj. id, mj.nama_pd, СУММА(СЛУЧАЙ, КОГДА jenis_kelamin = 'Laki' THEN 1 ELSE 0 конец) КАК jumlah_laki, СУММА (СЛУЧАЙ, КОГДА jenis_kelamin = 'Perempuan' THEN 1 ELSE 0 конец) AS jumlah_perempuan ОТ public.master_jabatan mj присоединиться к isian_kuis ik на ik.jabatan_id = mj.id группа по mj.id,mj.nama_pd заказать по mj.id;
0
В Postgres вы можете использовать условную агрегацию, которая выглядит так:
SELECT mj.id, mj.nama_pd, СЧЁТ(*) ФИЛЬТР (ГДЕ jenis_kelamin = 'Лаки') КАК jumlah_laki, COUNT(*) FILTER (ГДЕ jenis_kelamin = 'Perempuan') AS jumlah_perempuan ОТ public.master_jabatan mj ПРИСОЕДИНЯЙТЕСЬ isian_kuis ик ПО ik.jabatan_id = mj.id СГРУППИРОВАТЬ ПО mj.id, mj.nama_pd ЗАКАЗАТЬ ПО mj.id;
Обратите внимание, что 9 используется очень, очень редко.0080 ВЫБЕРИТЕ ОТЛИЧНЫЕ с СГРУППИРОВАТЬ ПО
. Это может замедлить выполнение запроса. И FILTER
— это стандартный SQL, поэтому это хороший способ реализовать это.