Подсчет CASE в SQL Google BigQuery - PullRequest
0 голосов
/ 13 мая 2018
SELECT
SUM(CASE WHEN TipPercentage < 0 THEN 1 ELSE 0 END) AS 'No Tip'
SUM(CASE WHEN TipPercentage BETWEEN 0 AND 5 THEN 1 ELSE 0 END) AS 'Less but still a Tip'
SUM(CASE WHEN TipPercentage BETWEEN 5 AND 10 THEN 1 ELSE 0 END) AS 'Decent Tip'
SUM(CASE WHEN TipPercentage > 10 THEN 1 ELSE 0 END) AS 'Good Tip'
SUM(ELSE ) AS 'Something different'
END AS TipRange,
TipPercentage,
Tipbin)
FROM
(SELECT
case when tip_amount=0 then 'No Tip'
when (tip_amount > 0 and tip_amount <=5) then '0-5'
when (tip_amount > 5 and tip_amount <=10) then '5-10'
when (tip_amount > 10 and tip_amount <=20) then '10-20'
when tip_amount > 20 then '> 20'
else 'other'
end as Tipbin,
SUM(tip_amount) as Tips,
ROUND(avg((tip_amount)/(total_amount-tip_amount))*100,3) as TipPercentage
FROM `bigquery-public-data.new_york.tlc_yellow_trips_2015`
WHERE trip_distance >0
AND fare_amount/trip_distance BETWEEN 2 AND 10
AND dropoff_datetime > pickup_datetime
group by 1,2,3,tip_amount,tipbin)

Я пытался получить данные из Google Bigquery, где будет возвращена сумма каждого из «Нет чаевых», «Меньше, но все еще совет», «Достойный совет», «Хороший совет» и «Что-то другое»на основе подсчета каждого.Тем не менее, я получил синтаксическую ошибку, в которой говорится, что строка «No Tip» была неожиданной.

Может ли кто-нибудь помочь мне?

Спасибо!

Редактировать:

Код ошибки, полученный при использовании стандартного SQL, был

Error: Syntax error: Unexpected string literal 'No Tip' at [2:55]

Когда я пытался запустить его с помощью Legacy SQL Iполучил это:

Error: Encountered " "AS" "AS "" at line 2, column 52. Was expecting: <EOF>

Ответы [ 2 ]

0 голосов
/ 13 мая 2018

Судя по вашему описанию, вы, по сути, хотите свой подзапрос.Здесь это немного исправлено с исправленными синтаксическими ошибками:

SELECT (case when tip_amount = 0 then 'No Tip'
             when tip_amount > 0 and tip_amount <= 5 then '0-5'
             when tip_amount > 5 and tip_amount <= 10 then '5-10'
             when tip_amount > 10 and tip_amount <= 20 then '10-20'
             when tip_amount > 20 then '> 20'
             else 'other'
        end) as Tipbin,
       COUNT(*) as num,
       SUM(tip_amount) as Tips,
       ROUND(avg((tip_amount)/(total_amount-tip_amount))*100,3) as TipPercentage
FROM `bigquery-public-data.new_york.tlc_yellow_trips_2015`
WHERE trip_distance > 0 AND
      fare_amount/trip_distance BETWEEN 2 AND 10 AND
      dropoff_datetime > pickup_datetime
GROUP BY TIpBin
ORDER BY MIN(tip_amount);
0 голосов
/ 13 мая 2018

Вы пропустили кучу запятых после каждой необходимой вам суммы:

SELECT
SUM(CASE WHEN TipPercentage < 0 THEN 1 ELSE 0 END) AS 'No Tip',
SUM(CASE WHEN TipPercentage BETWEEN 0 AND 5 THEN 1 ELSE 0 END) AS 'Less but still a Tip',
SUM(CASE WHEN TipPercentage BETWEEN 5 AND 10 THEN 1 ELSE 0 END) AS 'Decent Tip',
SUM(CASE WHEN TipPercentage > 10 THEN 1 ELSE 0 END) AS 'Good Tip',
-- SUM(ELSE ) AS 'Something different'//this line is missing something in 
-- the sum function
END AS TipRange,
TipPercentage,
Tipbin
FROM
(SELECT
case when tip_amount=0 then 'No Tip'
when (tip_amount > 0 and tip_amount <=5) then '0-5'
when (tip_amount > 5 and tip_amount <=10) then '5-10'
when (tip_amount > 10 and tip_amount <=20) then '10-20'
when tip_amount > 20 then '> 20'
else 'other'
end as Tipbin,
SUM(tip_amount) as Tips,
ROUND(avg((tip_amount)/(total_amount-tip_amount))*100,3) as TipPercentage
FROM `bigquery-public-data.new_york.tlc_yellow_trips_2015`
WHERE trip_distance >0
AND fare_amount/trip_distance BETWEEN 2 AND 10
AND dropoff_datetime > pickup_datetime
group by 1,2,3,tip_amount,tipbin) T --All derived tables must have an alias
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...