Трудности с предоставлением псевдонимов внутри оператора case

У меня есть запрос, который дает мне вывод, как показано на скриншоте ниже.

select 
    a.storeId, b.district, b.region,
    count (case when a.photoAppImage is null then 1 end) as via_u,
    count (case when a.photoAppImage =1 then 1 end) as via_p
from 
    used_listings_V2 a
left outer join 
    locations b on a.storeId = b.storeID 
where 
    convert(date, a.imageUpdateDate) = convert(date, GETDATE()-1)
group by 
    a.storeId, b.district, b.region

отредактировано

Я хотел разделить подсчеты в двух разных столбцах, которые я получаю в одной строке. Для всех записей с нулевым значением photoAppImage количество должно отображаться в разделе «Via_u», а для записей с 1 значением photoAppImage количество должно отображаться в разделе «Via_p». Ожидаемый результат будет выглядеть следующим образом:

В основном я думаю, что мне трудно давать псевдонимы внутри оператора case. Может ли кто-нибудь помочь мне в этом?

Пожалуйста, разместите код и данные в виде текста, а не изображений.

shree.pat18 15.05.2022 12:59

Плохие привычки, от которых нужно избавиться: использование псевдонимов таблиц, подобных a-b-c-or-t1-t2-t3

Stu 15.05.2022 13:15
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
4
2
67
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Использовать:

Count(case when a.photoappimage is null then 1 end) as via_u,
Count(case when a.photoappimage is null then 1 end)/100. as via_u_pct,
Count(case when a.photoappimage=1 then 1 end ) as via_p,
Count(case when a.photoAppImage is null or a.photoAppImage=1 then 1 end) as via_u_or_p 

Обновление: объединение всего (и использование подзапроса для упрощения расчета процента):

select 
    storeId, 
    district,
    region,
    via_u,
    via_p,
    via_u/100./(via_u+via_p) as via_u_pct
from (
    select 
        a.storeId, b.district, b.region,
        count (case when a.photoAppImage is null then 1 end) as via_u,
        count (case when a.photoAppImage =1 then 1 end) as via_p
    from 
        used_listings_V2 a
    left outer join 
        locations b on a.storeId = b.storeID 
    where 
        convert(date, a.imageUpdateDate) = convert(date, GETDATE()-1)
    group by 
        a.storeId, b.district, b.region
    ) Step1

это не дает правильного вывода. StoreId 111 должен появляться в выводе только один раз.

Anonymous 15.05.2022 13:18

Вы также должны удалить photoappimage из выбора и группы. Вы не можете одновременно показать это и ожидать одну строку. Если вы хотите, чтобы люди редактировали ваш запрос, не ждите, что вам придется вводить его заново.

tinazmu 15.05.2022 13:19

Но вы группируете по нескольким столбцам, что делает вашу цель несовместимой с вашим запросом и вашим описанием. Никто не может прочитать ни ваши мысли, ни вашу схему. Возможно, удалите a.photoAppImage из предложения GROUP BY?

SMor 15.05.2022 14:06

@tinazmu большое спасибо! Он работает, как и ожидалось. Я удалил изображение и добавил код в вопрос. Кроме того, я хотел добавить два столбца count, то есть via_u и via_p, но я не могу этого сделать, так как я думаю, что это псевдонимы. Любой способ добиться этого?

Anonymous 15.05.2022 14:21

@SMor Если я удалю район и регион из группы, я не могу выбрать эти поля, и я хочу, чтобы это было в выводе. Что я могу сделать в таком случае. Извините, я знаю, что это глупый вопрос, но я очень новичок в SQL.

Anonymous 15.05.2022 14:24

Разве ваше последнее редактирование не дает вам то, что вы хотите (с store_id, районом, регионом в SELECT и в GROUP BY)? Мы предложили удалить только photoAppImage, а не другие.

tinazmu 15.05.2022 14:36

Да @тиназму. Это дает правильный вывод.

Anonymous 15.05.2022 14:40

Можете ли вы помочь мне добавить значения via_u и via_p. например, для добавления первой строки (в выводе необходим дополнительный столбец) должно содержаться 4 (4+0)

Anonymous 15.05.2022 14:42

Вы имеете в виду, что в дополнение к столбцам via_u и via_p вам также нужен счет этих двух? вы можете сделать подсчет (случай, когда a.photoAppImage имеет значение null или a.photoAppImage = 1, затем 1 конец)

tinazmu 15.05.2022 14:46

Отлично @tinazmu. Тонны спасибо вам. Он работает, как и ожидалось. И последнее, что, если я хочу рассчитать процент, например (via_u/addition)*100?????

Anonymous 15.05.2022 14:57

Добавлен процентный пример; выберите принятый ответ, если он сработал

tinazmu 15.05.2022 15:02

Держать на секунду! что такое "дополнение"? Откуда это взялось?

tinazmu 15.05.2022 15:09

дополнение via_u_or_p

Anonymous 15.05.2022 15:41

Другие вопросы по теме