[이미지 포함 정리 참고]
https://www.notion.so/ad93357c471d4a1f827533099904e9e6
SELECT lower('aBc DeFg 7-');
SELECT *
FROM fruit
WHERE lower(fav_fruit) = 'apple';
SELECT *
FROM fruit
WHERE fav_fruit ILIKE '%apple%';
# LIKE 사용할 경우 문자 그대로 값에만 적용
SELECT left('abcde', 2),
right('abcde', 2),
SELECT left('abc', 10),
length(left('abc', 10));
SELECT split_part('a,bc,d', ',', 2);
# bc
SELECT concat('a', NULL, 'cc');
# acc
SELECT 'a' || NULL || 'cc';
#
SELECT CASE WHEN category LIKE '%: %' THEN split_part(category, ': ', 1)
WHEN category LIKE '% - %' THEN split_part(category, '- ', 1)
ELSE split_part(category, ' | ', 1)
END AS major_category, sum(business)
FROM naics
GROUP BY major_category;
CREATE TEMP TABLE recode AS
SELECT DISTINCT fav_fruit AS original,
fav_fruit AS standardized
FROM fruit;
UPDATE recode
SET standardized=trim(lower(original));
UPDATE recode
SET standardized='banana'
WHERE standardized LIKE '%nn%';
UPDATE recode
SET standardized=trim(standardized, 's'));
# original only
SELECT fav_fruit, count(*)
FROM fruit
GROUP BY fav_fruit;
SELECT now() - '2018-01-01'
SELECT '2010-01-01'::date + 1;
# 2010-01-02
SELECT '2018-12-10'::date + '1 year'::interval;
# 2019-12-10 00:00:00
SELECT '2018-12-10'::date + '1 year 2 days 3 minutes'::interval;
# 2019-12-12 00:00:03
date_part('field', timestamp)
EXTRACT(FIELD FROM timestamp)
SELECT date_part('month', now()),
EXTRACT(MONTH FROM now());
# individual sales
SELECT *
FROM sales
WHERE date >= '2010-01-01'
AND date < '2017-01-01';
# by month
SELECT date_part('month', date) AS month, sum(amt)
FROM sales
GROUP BY month
ORDER BY month;
SELECT date_trunc('month', date) AS month, sum(amt)
FROM sales
GROUP BY month
ORDER BY month;
SELECT generate_series('2018-01-31', '2018-12-31', '1 month'::interval)
WITH hour_series AS(
SELECT generate_series('2018-04-23 09:00:00',
'2018-04-23 14:00:00',
'1 hour'::interval) AS hours)
SELECT hours, count(data)
FROM hour_series
LEFT JOIN sales
ON hours=date_Truc('hour', date)
GROUP BY hours
GROUP BY hours
WITH bins AS(
SELECT generate_series('2018-04-23 09:00:00',
'2018-04-23 15:00:00',
'3 hour'::interval) AS lower,
generate_series('2018-04-23 12:00:00',
'2018-04-23 18:00:00',
'3 hour'::interval) AS upper)
SELECT lower, upper, count(date)
FROM bins
LEFT JOIN sales
ON date >= lower
AND date < upper
GROUP BY lower, upper
ORDER BY lower
SELECT date,
lag(date) OVER (ORDER BY date),
lead(date) OVER (ORDER BY date)
FROM sales;
SELECT date,
date - lag(data) OVER (ORDER BY date) AS gap
FROM sales
# average time
SELECT avg(gap)
FROM (SELECT date - lag(date) OVER (ORDER BY date) AS gap
FROM sales) AS gaps;
SELECT date, amount, lag(amount) OVER (ORDER BY date),
amount - lag(amount) OVER (ORDER BY date) AS chane
SELECT lower('aBc DeFg 7-');
SELECT *
FROM fruit
WHERE lower(fav_fruit) = 'apple';
SELECT *
FROM fruit
WHERE fav_fruit ILIKE '%apple%';
# LIKE 사용할 경우 문자 그대로 값에만 적용
SELECT left('abcde', 2),
right('abcde', 2),
SELECT left('abc', 10),
length(left('abc', 10));
SELECT split_part('a,bc,d', ',', 2);
# bc
SELECT concat('a', NULL, 'cc');
# acc
SELECT 'a' || NULL || 'cc';
#
SELECT CASE WHEN category LIKE '%: %' THEN split_part(category, ': ', 1)
WHEN category LIKE '% - %' THEN split_part(category, '- ', 1)
ELSE split_part(category, ' | ', 1)
END AS major_category, sum(business)
FROM naics
GROUP BY major_category;
CREATE TEMP TABLE recode AS
SELECT DISTINCT fav_fruit AS original,
fav_fruit AS standardized
FROM fruit;
UPDATE recode
SET standardized=trim(lower(original));
UPDATE recode
SET standardized='banana'
WHERE standardized LIKE '%nn%';
UPDATE recode
SET standardized=trim(standardized, 's'));
# original only
SELECT fav_fruit, count(*)
FROM fruit
GROUP BY fav_fruit;
SELECT now() - '2018-01-01'
SELECT '2010-01-01'::date + 1;
# 2010-01-02
SELECT '2018-12-10'::date + '1 year'::interval;
# 2019-12-10 00:00:00
SELECT '2018-12-10'::date + '1 year 2 days 3 minutes'::interval;
# 2019-12-12 00:00:03
date_part('field', timestamp)
EXTRACT(FIELD FROM timestamp)
SELECT date_part('month', now()),
EXTRACT(MONTH FROM now());
# individual sales
SELECT *
FROM sales
WHERE date >= '2010-01-01'
AND date < '2017-01-01';
# by month
SELECT date_part('month', date) AS month, sum(amt)
FROM sales
GROUP BY month
ORDER BY month;
SELECT date_trunc('month', date) AS month, sum(amt)
FROM sales
GROUP BY month
ORDER BY month;
SELECT generate_series('2018-01-31', '2018-12-31', '1 month'::interval)
WITH hour_series AS(
SELECT generate_series('2018-04-23 09:00:00',
'2018-04-23 14:00:00',
'1 hour'::interval) AS hours)
SELECT hours, count(data)
FROM hour_series
LEFT JOIN sales
ON hours=date_Truc('hour', date)
GROUP BY hours
GROUP BY hours
WITH bins AS(
SELECT generate_series('2018-04-23 09:00:00',
'2018-04-23 15:00:00',
'3 hour'::interval) AS lower,
generate_series('2018-04-23 12:00:00',
'2018-04-23 18:00:00',
'3 hour'::interval) AS upper)
SELECT lower, upper, count(date)
FROM bins
LEFT JOIN sales
ON date >= lower
AND date < upper
GROUP BY lower, upper
ORDER BY lower
SELECT date,
lag(date) OVER (ORDER BY date),
lead(date) OVER (ORDER BY date)
FROM sales;
SELECT date,
date - lag(data) OVER (ORDER BY date) AS gap
FROM sales
# average time
SELECT avg(gap)
FROM (SELECT date - lag(date) OVER (ORDER BY date) AS gap
FROM sales) AS gaps;
SELECT date, amount, lag(amount) OVER (ORDER BY date),
amount - lag(amount) OVER (ORDER BY date) AS chane
SELECT lower('aBc DeFg 7-');
SELECT *
FROM fruit
WHERE lower(fav_fruit) = 'apple';
SELECT *
FROM fruit
WHERE fav_fruit ILIKE '%apple%';
# LIKE 사용할 경우 문자 그대로 값에만 적용
SELECT left('abcde', 2),
right('abcde', 2),
SELECT left('abc', 10),
length(left('abc', 10));
SELECT split_part('a,bc,d', ',', 2);
# bc
SELECT concat('a', NULL, 'cc');
# acc
SELECT 'a' || NULL || 'cc';
#
SELECT CASE WHEN category LIKE '%: %' THEN split_part(category, ': ', 1)
WHEN category LIKE '% - %' THEN split_part(category, '- ', 1)
ELSE split_part(category, ' | ', 1)
END AS major_category, sum(business)
FROM naics
GROUP BY major_category;
CREATE TEMP TABLE recode AS
SELECT DISTINCT fav_fruit AS original,
fav_fruit AS standardized
FROM fruit;
UPDATE recode
SET standardized=trim(lower(original));
UPDATE recode
SET standardized='banana'
WHERE standardized LIKE '%nn%';
UPDATE recode
SET standardized=trim(standardized, 's'));
# original only
SELECT fav_fruit, count(*)
FROM fruit
GROUP BY fav_fruit;
SELECT now() - '2018-01-01'
SELECT '2010-01-01'::date + 1;
# 2010-01-02
SELECT '2018-12-10'::date + '1 year'::interval;
# 2019-12-10 00:00:00
SELECT '2018-12-10'::date + '1 year 2 days 3 minutes'::interval;
# 2019-12-12 00:00:03
date_part('field', timestamp)
EXTRACT(FIELD FROM timestamp)
SELECT date_part('month', now()),
EXTRACT(MONTH FROM now());
# individual sales
SELECT *
FROM sales
WHERE date >= '2010-01-01'
AND date < '2017-01-01';
# by month
SELECT date_part('month', date) AS month, sum(amt)
FROM sales
GROUP BY month
ORDER BY month;
SELECT date_trunc('month', date) AS month, sum(amt)
FROM sales
GROUP BY month
ORDER BY month;
SELECT generate_series('2018-01-31', '2018-12-31', '1 month'::interval)
WITH hour_series AS(
SELECT generate_series('2018-04-23 09:00:00',
'2018-04-23 14:00:00',
'1 hour'::interval) AS hours)
SELECT hours, count(data)
FROM hour_series
LEFT JOIN sales
ON hours=date_Truc('hour', date)
GROUP BY hours
GROUP BY hours
WITH bins AS(
SELECT generate_series('2018-04-23 09:00:00',
'2018-04-23 15:00:00',
'3 hour'::interval) AS lower,
generate_series('2018-04-23 12:00:00',
'2018-04-23 18:00:00',
'3 hour'::interval) AS upper)
SELECT lower, upper, count(date)
FROM bins
LEFT JOIN sales
ON date >= lower
AND date < upper
GROUP BY lower, upper
ORDER BY lower
SELECT date,
lag(date) OVER (ORDER BY date),
lead(date) OVER (ORDER BY date)
FROM sales;
SELECT date,
date - lag(data) OVER (ORDER BY date) AS gap
FROM sales
# average time
SELECT avg(gap)
FROM (SELECT date - lag(date) OVER (ORDER BY date) AS gap
FROM sales) AS gaps;
SELECT date, amount, lag(amount) OVER (ORDER BY date),
amount - lag(amount) OVER (ORDER BY date) AS chane
SELECT lower('aBc DeFg 7-');
SELECT *
FROM fruit
WHERE lower(fav_fruit) = 'apple';
SELECT *
FROM fruit
WHERE fav_fruit ILIKE '%apple%';
# LIKE 사용할 경우 문자 그대로 값에만 적용
SELECT left('abcde', 2),
right('abcde', 2),
SELECT left('abc', 10),
length(left('abc', 10));
SELECT split_part('a,bc,d', ',', 2);
# bc
SELECT concat('a', NULL, 'cc');
# acc
SELECT 'a' || NULL || 'cc';
#
SELECT CASE WHEN category LIKE '%: %' THEN split_part(category, ': ', 1)
WHEN category LIKE '% - %' THEN split_part(category, '- ', 1)
ELSE split_part(category, ' | ', 1)
END AS major_category, sum(business)
FROM naics
GROUP BY major_category;
CREATE TEMP TABLE recode AS
SELECT DISTINCT fav_fruit AS original,
fav_fruit AS standardized
FROM fruit;
UPDATE recode
SET standardized=trim(lower(original));
UPDATE recode
SET standardized='banana'
WHERE standardized LIKE '%nn%';
UPDATE recode
SET standardized=trim(standardized, 's'));
# original only
SELECT fav_fruit, count(*)
FROM fruit
GROUP BY fav_fruit;
SELECT now() - '2018-01-01'
SELECT '2010-01-01'::date + 1;
# 2010-01-02
SELECT '2018-12-10'::date + '1 year'::interval;
# 2019-12-10 00:00:00
SELECT '2018-12-10'::date + '1 year 2 days 3 minutes'::interval;
# 2019-12-12 00:00:03
date_part('field', timestamp)
EXTRACT(FIELD FROM timestamp)
SELECT date_part('month', now()),
EXTRACT(MONTH FROM now());
# individual sales
SELECT *
FROM sales
WHERE date >= '2010-01-01'
AND date < '2017-01-01';
# by month
SELECT date_part('month', date) AS month, sum(amt)
FROM sales
GROUP BY month
ORDER BY month;
SELECT date_trunc('month', date) AS month, sum(amt)
FROM sales
GROUP BY month
ORDER BY month;
SELECT generate_series('2018-01-31', '2018-12-31', '1 month'::interval)
WITH hour_series AS(
SELECT generate_series('2018-04-23 09:00:00',
'2018-04-23 14:00:00',
'1 hour'::interval) AS hours)
SELECT hours, count(data)
FROM hour_series
LEFT JOIN sales
ON hours=date_Truc('hour', date)
GROUP BY hours
GROUP BY hours
WITH bins AS(
SELECT generate_series('2018-04-23 09:00:00',
'2018-04-23 15:00:00',
'3 hour'::interval) AS lower,
generate_series('2018-04-23 12:00:00',
'2018-04-23 18:00:00',
'3 hour'::interval) AS upper)
SELECT lower, upper, count(date)
FROM bins
LEFT JOIN sales
ON date >= lower
AND date < upper
GROUP BY lower, upper
ORDER BY lower
SELECT date,
lag(date) OVER (ORDER BY date),
lead(date) OVER (ORDER BY date)
FROM sales;
SELECT date,
date - lag(data) OVER (ORDER BY date) AS gap
FROM sales
# average time
SELECT avg(gap)
FROM (SELECT date - lag(date) OVER (ORDER BY date) AS gap
FROM sales) AS gaps;
SELECT date, amount, lag(amount) OVER (ORDER BY date),
amount - lag(amount) OVER (ORDER BY date) AS chane
SELECT lower('aBc DeFg 7-');
SELECT *
FROM fruit
WHERE lower(fav_fruit) = 'apple';
SELECT *
FROM fruit
WHERE fav_fruit ILIKE '%apple%';
# LIKE 사용할 경우 문자 그대로 값에만 적용
SELECT left('abcde', 2),
right('abcde', 2),
SELECT left('abc', 10),
length(left('abc', 10));
SELECT split_part('a,bc,d', ',', 2);
# bc
SELECT concat('a', NULL, 'cc');
# acc
SELECT 'a' || NULL || 'cc';
#
SELECT CASE WHEN category LIKE '%: %' THEN split_part(category, ': ', 1)
WHEN category LIKE '% - %' THEN split_part(category, '- ', 1)
ELSE split_part(category, ' | ', 1)
END AS major_category, sum(business)
FROM naics
GROUP BY major_category;
CREATE TEMP TABLE recode AS
SELECT DISTINCT fav_fruit AS original,
fav_fruit AS standardized
FROM fruit;
UPDATE recode
SET standardized=trim(lower(original));
UPDATE recode
SET standardized='banana'
WHERE standardized LIKE '%nn%';
UPDATE recode
SET standardized=trim(standardized, 's'));
# original only
SELECT fav_fruit, count(*)
FROM fruit
GROUP BY fav_fruit;
SELECT now() - '2018-01-01'
SELECT '2010-01-01'::date + 1;
# 2010-01-02
SELECT '2018-12-10'::date + '1 year'::interval;
# 2019-12-10 00:00:00
SELECT '2018-12-10'::date + '1 year 2 days 3 minutes'::interval;
# 2019-12-12 00:00:03
date_part('field', timestamp)
EXTRACT(FIELD FROM timestamp)
SELECT date_part('month', now()),
EXTRACT(MONTH FROM now());
# individual sales
SELECT *
FROM sales
WHERE date >= '2010-01-01'
AND date < '2017-01-01';
# by month
SELECT date_part('month', date) AS month, sum(amt)
FROM sales
GROUP BY month
ORDER BY month;
SELECT date_trunc('month', date) AS month, sum(amt)
FROM sales
GROUP BY month
ORDER BY month;
SELECT generate_series('2018-01-31', '2018-12-31', '1 month'::interval)
WITH hour_series AS(
SELECT generate_series('2018-04-23 09:00:00',
'2018-04-23 14:00:00',
'1 hour'::interval) AS hours)
SELECT hours, count(data)
FROM hour_series
LEFT JOIN sales
ON hours=date_Truc('hour', date)
GROUP BY hours
GROUP BY hours
WITH bins AS(
SELECT generate_series('2018-04-23 09:00:00',
'2018-04-23 15:00:00',
'3 hour'::interval) AS lower,
generate_series('2018-04-23 12:00:00',
'2018-04-23 18:00:00',
'3 hour'::interval) AS upper)
SELECT lower, upper, count(date)
FROM bins
LEFT JOIN sales
ON date >= lower
AND date < upper
GROUP BY lower, upper
ORDER BY lower
SELECT date,
lag(date) OVER (ORDER BY date),
lead(date) OVER (ORDER BY date)
FROM sales;
SELECT date,
date - lag(data) OVER (ORDER BY date) AS gap
FROM sales
# average time
SELECT avg(gap)
FROM (SELECT date - lag(date) OVER (ORDER BY date) AS gap
FROM sales) AS gaps;
SELECT date, amount, lag(amount) OVER (ORDER BY date),
amount - lag(amount) OVER (ORDER BY date) AS chane
SELECT lower('aBc DeFg 7-');
SELECT *
FROM fruit
WHERE lower(fav_fruit) = 'apple';
SELECT *
FROM fruit
WHERE fav_fruit ILIKE '%apple%';
# LIKE 사용할 경우 문자 그대로 값에만 적용
SELECT left('abcde', 2),
right('abcde', 2),
SELECT left('abc', 10),
length(left('abc', 10));
SELECT split_part('a,bc,d', ',', 2);
# bc
SELECT concat('a', NULL, 'cc');
# acc
SELECT 'a' || NULL || 'cc';
#
SELECT CASE WHEN category LIKE '%: %' THEN split_part(category, ': ', 1)
WHEN category LIKE '% - %' THEN split_part(category, '- ', 1)
ELSE split_part(category, ' | ', 1)
END AS major_category, sum(business)
FROM naics
GROUP BY major_category;
CREATE TEMP TABLE recode AS
SELECT DISTINCT fav_fruit AS original,
fav_fruit AS standardized
FROM fruit;
UPDATE recode
SET standardized=trim(lower(original));
UPDATE recode
SET standardized='banana'
WHERE standardized LIKE '%nn%';
UPDATE recode
SET standardized=trim(standardized, 's'));
# original only
SELECT fav_fruit, count(*)
FROM fruit
GROUP BY fav_fruit;
SELECT now() - '2018-01-01'
SELECT '2010-01-01'::date + 1;
# 2010-01-02
SELECT '2018-12-10'::date + '1 year'::interval;
# 2019-12-10 00:00:00
SELECT '2018-12-10'::date + '1 year 2 days 3 minutes'::interval;
# 2019-12-12 00:00:03
date_part('field', timestamp)
EXTRACT(FIELD FROM timestamp)
SELECT date_part('month', now()),
EXTRACT(MONTH FROM now());
# individual sales
SELECT *
FROM sales
WHERE date >= '2010-01-01'
AND date < '2017-01-01';
# by month
SELECT date_part('month', date) AS month, sum(amt)
FROM sales
GROUP BY month
ORDER BY month;
SELECT date_trunc('month', date) AS month, sum(amt)
FROM sales
GROUP BY month
ORDER BY month;
SELECT generate_series('2018-01-31', '2018-12-31', '1 month'::interval)
WITH hour_series AS(
SELECT generate_series('2018-04-23 09:00:00',
'2018-04-23 14:00:00',
'1 hour'::interval) AS hours)
SELECT hours, count(data)
FROM hour_series
LEFT JOIN sales
ON hours=date_Truc('hour', date)
GROUP BY hours
GROUP BY hours
WITH bins AS(
SELECT generate_series('2018-04-23 09:00:00',
'2018-04-23 15:00:00',
'3 hour'::interval) AS lower,
generate_series('2018-04-23 12:00:00',
'2018-04-23 18:00:00',
'3 hour'::interval) AS upper)
SELECT lower, upper, count(date)
FROM bins
LEFT JOIN sales
ON date >= lower
AND date < upper
GROUP BY lower, upper
ORDER BY lower
SELECT date,
lag(date) OVER (ORDER BY date),
lead(date) OVER (ORDER BY date)
FROM sales;
SELECT date,
date - lag(data) OVER (ORDER BY date) AS gap
FROM sales
# average time
SELECT avg(gap)
FROM (SELECT date - lag(date) OVER (ORDER BY date) AS gap
FROM sales) AS gaps;
SELECT date, amount, lag(amount) OVER (ORDER BY date),
amount - lag(amount) OVER (ORDER BY date) AS chane
SELECT lower('aBc DeFg 7-');
SELECT *
FROM fruit
WHERE lower(fav_fruit) = 'apple';
SELECT *
FROM fruit
WHERE fav_fruit ILIKE '%apple%';
# LIKE 사용할 경우 문자 그대로 값에만 적용
SELECT left('abcde', 2),
right('abcde', 2),
SELECT left('abc', 10),
length(left('abc', 10));
SELECT split_part('a,bc,d', ',', 2);
# bc
SELECT concat('a', NULL, 'cc');
# acc
SELECT 'a' || NULL || 'cc';
#
SELECT CASE WHEN category LIKE '%: %' THEN split_part(category, ': ', 1)
WHEN category LIKE '% - %' THEN split_part(category, '- ', 1)
ELSE split_part(category, ' | ', 1)
END AS major_category, sum(business)
FROM naics
GROUP BY major_category;
CREATE TEMP TABLE recode AS
SELECT DISTINCT fav_fruit AS original,
fav_fruit AS standardized
FROM fruit;
UPDATE recode
SET standardized=trim(lower(original));
UPDATE recode
SET standardized='banana'
WHERE standardized LIKE '%nn%';
UPDATE recode
SET standardized=trim(standardized, 's'));
# original only
SELECT fav_fruit, count(*)
FROM fruit
GROUP BY fav_fruit;
SELECT now() - '2018-01-01'
SELECT '2010-01-01'::date + 1;
# 2010-01-02
SELECT '2018-12-10'::date + '1 year'::interval;
# 2019-12-10 00:00:00
SELECT '2018-12-10'::date + '1 year 2 days 3 minutes'::interval;
# 2019-12-12 00:00:03
date_part('field', timestamp)
EXTRACT(FIELD FROM timestamp)
SELECT date_part('month', now()),
EXTRACT(MONTH FROM now());
# individual sales
SELECT *
FROM sales
WHERE date >= '2010-01-01'
AND date < '2017-01-01';
# by month
SELECT date_part('month', date) AS month, sum(amt)
FROM sales
GROUP BY month
ORDER BY month;
SELECT date_trunc('month', date) AS month, sum(amt)
FROM sales
GROUP BY month
ORDER BY month;
SELECT generate_series('2018-01-31', '2018-12-31', '1 month'::interval)
WITH hour_series AS(
SELECT generate_series('2018-04-23 09:00:00',
'2018-04-23 14:00:00',
'1 hour'::interval) AS hours)
SELECT hours, count(data)
FROM hour_series
LEFT JOIN sales
ON hours=date_Truc('hour', date)
GROUP BY hours
GROUP BY hours
WITH bins AS(
SELECT generate_series('2018-04-23 09:00:00',
'2018-04-23 15:00:00',
'3 hour'::interval) AS lower,
generate_series('2018-04-23 12:00:00',
'2018-04-23 18:00:00',
'3 hour'::interval) AS upper)
SELECT lower, upper, count(date)
FROM bins
LEFT JOIN sales
ON date >= lower
AND date < upper
GROUP BY lower, upper
ORDER BY lower
SELECT date,
lag(date) OVER (ORDER BY date),
lead(date) OVER (ORDER BY date)
FROM sales;
SELECT date,
date - lag(data) OVER (ORDER BY date) AS gap
FROM sales
# average time
SELECT avg(gap)
FROM (SELECT date - lag(date) OVER (ORDER BY date) AS gap
FROM sales) AS gaps;
SELECT date, amount, lag(amount) OVER (ORDER BY date),
amount - lag(amount) OVER (ORDER BY date) AS chane
SELECT lower('aBc DeFg 7-');
SELECT *
FROM fruit
WHERE lower(fav_fruit) = 'apple';
SELECT *
FROM fruit
WHERE fav_fruit ILIKE '%apple%';
# LIKE 사용할 경우 문자 그대로 값에만 적용
SELECT left('abcde', 2),
right('abcde', 2),
SELECT left('abc', 10),
length(left('abc', 10));
SELECT split_part('a,bc,d', ',', 2);
# bc
SELECT concat('a', NULL, 'cc');
# acc
SELECT 'a' || NULL || 'cc';
#
SELECT CASE WHEN category LIKE '%: %' THEN split_part(category, ': ', 1)
WHEN category LIKE '% - %' THEN split_part(category, '- ', 1)
ELSE split_part(category, ' | ', 1)
END AS major_category, sum(business)
FROM naics
GROUP BY major_category;
CREATE TEMP TABLE recode AS
SELECT DISTINCT fav_fruit AS original,
fav_fruit AS standardized
FROM fruit;
UPDATE recode
SET standardized=trim(lower(original));
UPDATE recode
SET standardized='banana'
WHERE standardized LIKE '%nn%';
UPDATE recode
SET standardized=trim(standardized, 's'));
# original only
SELECT fav_fruit, count(*)
FROM fruit
GROUP BY fav_fruit;
SELECT now() - '2018-01-01'
SELECT '2010-01-01'::date + 1;
# 2010-01-02
SELECT '2018-12-10'::date + '1 year'::interval;
# 2019-12-10 00:00:00
SELECT '2018-12-10'::date + '1 year 2 days 3 minutes'::interval;
# 2019-12-12 00:00:03
date_part('field', timestamp)
EXTRACT(FIELD FROM timestamp)
SELECT date_part('month', now()),
EXTRACT(MONTH FROM now());
# individual sales
SELECT *
FROM sales
WHERE date >= '2010-01-01'
AND date < '2017-01-01';
# by month
SELECT date_part('month', date) AS month, sum(amt)
FROM sales
GROUP BY month
ORDER BY month;
SELECT date_trunc('month', date) AS month, sum(amt)
FROM sales
GROUP BY month
ORDER BY month;
SELECT generate_series('2018-01-31', '2018-12-31', '1 month'::interval)
WITH hour_series AS(
SELECT generate_series('2018-04-23 09:00:00',
'2018-04-23 14:00:00',
'1 hour'::interval) AS hours)
SELECT hours, count(data)
FROM hour_series
LEFT JOIN sales
ON hours=date_Truc('hour', date)
GROUP BY hours
GROUP BY hours
WITH bins AS(
SELECT generate_series('2018-04-23 09:00:00',
'2018-04-23 15:00:00',
'3 hour'::interval) AS lower,
generate_series('2018-04-23 12:00:00',
'2018-04-23 18:00:00',
'3 hour'::interval) AS upper)
SELECT lower, upper, count(date)
FROM bins
LEFT JOIN sales
ON date >= lower
AND date < upper
GROUP BY lower, upper
ORDER BY lower
SELECT date,
lag(date) OVER (ORDER BY date),
lead(date) OVER (ORDER BY date)
FROM sales;
SELECT date,
date - lag(data) OVER (ORDER BY date) AS gap
FROM sales
# average time
SELECT avg(gap)
FROM (SELECT date - lag(date) OVER (ORDER BY date) AS gap
FROM sales) AS gaps;
SELECT date, amount, lag(amount) OVER (ORDER BY date),
amount - lag(amount) OVER (ORDER BY date) AS chane
SELECT lower('aBc DeFg 7-');
SELECT *
FROM fruit
WHERE lower(fav_fruit) = 'apple';
SELECT *
FROM fruit
WHERE fav_fruit ILIKE '%apple%';
# LIKE 사용할 경우 문자 그대로 값에만 적용
SELECT left('abcde', 2),
right('abcde', 2),
SELECT left('abc', 10),
length(left('abc', 10));
SELECT split_part('a,bc,d', ',', 2);
# bc
SELECT concat('a', NULL, 'cc');
# acc
SELECT 'a' || NULL || 'cc';
#
SELECT CASE WHEN category LIKE '%: %' THEN split_part(category, ': ', 1)
WHEN category LIKE '% - %' THEN split_part(category, '- ', 1)
ELSE split_part(category, ' | ', 1)
END AS major_category, sum(business)
FROM naics
GROUP BY major_category;
CREATE TEMP TABLE recode AS
SELECT DISTINCT fav_fruit AS original,
fav_fruit AS standardized
FROM fruit;
UPDATE recode
SET standardized=trim(lower(original));
UPDATE recode
SET standardized='banana'
WHERE standardized LIKE '%nn%';
UPDATE recode
SET standardized=trim(standardized, 's'));
# original only
SELECT fav_fruit, count(*)
FROM fruit
GROUP BY fav_fruit;
SELECT now() - '2018-01-01'
SELECT '2010-01-01'::date + 1;
# 2010-01-02
SELECT '2018-12-10'::date + '1 year'::interval;
# 2019-12-10 00:00:00
SELECT '2018-12-10'::date + '1 year 2 days 3 minutes'::interval;
# 2019-12-12 00:00:03
date_part('field', timestamp)
EXTRACT(FIELD FROM timestamp)
SELECT date_part('month', now()),
EXTRACT(MONTH FROM now());
# individual sales
SELECT *
FROM sales
WHERE date >= '2010-01-01'
AND date < '2017-01-01';
# by month
SELECT date_part('month', date) AS month, sum(amt)
FROM sales
GROUP BY month
ORDER BY month;
SELECT date_trunc('month', date) AS month, sum(amt)
FROM sales
GROUP BY month
ORDER BY month;
SELECT generate_series('2018-01-31', '2018-12-31', '1 month'::interval)
WITH hour_series AS(
SELECT generate_series('2018-04-23 09:00:00',
'2018-04-23 14:00:00',
'1 hour'::interval) AS hours)
SELECT hours, count(data)
FROM hour_series
LEFT JOIN sales
ON hours=date_Truc('hour', date)
GROUP BY hours
GROUP BY hours
WITH bins AS(
SELECT generate_series('2018-04-23 09:00:00',
'2018-04-23 15:00:00',
'3 hour'::interval) AS lower,
generate_series('2018-04-23 12:00:00',
'2018-04-23 18:00:00',
'3 hour'::interval) AS upper)
SELECT lower, upper, count(date)
FROM bins
LEFT JOIN sales
ON date >= lower
AND date < upper
GROUP BY lower, upper
ORDER BY lower
SELECT date,
lag(date) OVER (ORDER BY date),
lead(date) OVER (ORDER BY date)
FROM sales;
SELECT date,
date - lag(data) OVER (ORDER BY date) AS gap
FROM sales
# average time
SELECT avg(gap)
FROM (SELECT date - lag(date) OVER (ORDER BY date) AS gap
FROM sales) AS gaps;
SELECT date, amount, lag(amount) OVER (ORDER BY date),
amount - lag(amount) OVER (ORDER BY date) AS chane
SELECT lower('aBc DeFg 7-');
SELECT *
FROM fruit
WHERE lower(fav_fruit) = 'apple';
SELECT *
FROM fruit
WHERE fav_fruit ILIKE '%apple%';
# LIKE 사용할 경우 문자 그대로 값에만 적용
SELECT left('abcde', 2),
right('abcde', 2),
SELECT left('abc', 10),
length(left('abc', 10));
SELECT split_part('a,bc,d', ',', 2);
# bc
SELECT concat('a', NULL, 'cc');
# acc
SELECT 'a' || NULL || 'cc';
#
SELECT CASE WHEN category LIKE '%: %' THEN split_part(category, ': ', 1)
WHEN category LIKE '% - %' THEN split_part(category, '- ', 1)
ELSE split_part(category, ' | ', 1)
END AS major_category, sum(business)
FROM naics
GROUP BY major_category;
CREATE TEMP TABLE recode AS
SELECT DISTINCT fav_fruit AS original,
fav_fruit AS standardized
FROM fruit;
UPDATE recode
SET standardized=trim(lower(original));
UPDATE recode
SET standardized='banana'
WHERE standardized LIKE '%nn%';
UPDATE recode
SET standardized=trim(standardized, 's'));
# original only
SELECT fav_fruit, count(*)
FROM fruit
GROUP BY fav_fruit;
SELECT now() - '2018-01-01'
SELECT '2010-01-01'::date + 1;
# 2010-01-02
SELECT '2018-12-10'::date + '1 year'::interval;
# 2019-12-10 00:00:00
SELECT '2018-12-10'::date + '1 year 2 days 3 minutes'::interval;
# 2019-12-12 00:00:03
date_part('field', timestamp)
EXTRACT(FIELD FROM timestamp)
SELECT date_part('month', now()),
EXTRACT(MONTH FROM now());
# individual sales
SELECT *
FROM sales
WHERE date >= '2010-01-01'
AND date < '2017-01-01';
# by month
SELECT date_part('month', date) AS month, sum(amt)
FROM sales
GROUP BY month
ORDER BY month;
SELECT date_trunc('month', date) AS month, sum(amt)
FROM sales
GROUP BY month
ORDER BY month;
SELECT generate_series('2018-01-31', '2018-12-31', '1 month'::interval)
WITH hour_series AS(
SELECT generate_series('2018-04-23 09:00:00',
'2018-04-23 14:00:00',
'1 hour'::interval) AS hours)
SELECT hours, count(data)
FROM hour_series
LEFT JOIN sales
ON hours=date_Truc('hour', date)
GROUP BY hours
GROUP BY hours
WITH bins AS(
SELECT generate_series('2018-04-23 09:00:00',
'2018-04-23 15:00:00',
'3 hour'::interval) AS lower,
generate_series('2018-04-23 12:00:00',
'2018-04-23 18:00:00',
'3 hour'::interval) AS upper)
SELECT lower, upper, count(date)
FROM bins
LEFT JOIN sales
ON date >= lower
AND date < upper
GROUP BY lower, upper
ORDER BY lower
SELECT date,
lag(date) OVER (ORDER BY date),
lead(date) OVER (ORDER BY date)
FROM sales;
SELECT date,
date - lag(data) OVER (ORDER BY date) AS gap
FROM sales
# average time
SELECT avg(gap)
FROM (SELECT date - lag(date) OVER (ORDER BY date) AS gap
FROM sales) AS gaps;
SELECT date, amount, lag(amount) OVER (ORDER BY date),
amount - lag(amount) OVER (ORDER BY date) AS chane
SELECT lower('aBc DeFg 7-');
SELECT *
FROM fruit
WHERE lower(fav_fruit) = 'apple';
SELECT *
FROM fruit
WHERE fav_fruit ILIKE '%apple%';
# LIKE 사용할 경우 문자 그대로 값에만 적용
SELECT left('abcde', 2),
right('abcde', 2),
SELECT left('abc', 10),
length(left('abc', 10));
SELECT split_part('a,bc,d', ',', 2);
# bc
SELECT concat('a', NULL, 'cc');
# acc
SELECT 'a' || NULL || 'cc';
#
SELECT CASE WHEN category LIKE '%: %' THEN split_part(category, ': ', 1)
WHEN category LIKE '% - %' THEN split_part(category, '- ', 1)
ELSE split_part(category, ' | ', 1)
END AS major_category, sum(business)
FROM naics
GROUP BY major_category;
CREATE TEMP TABLE recode AS
SELECT DISTINCT fav_fruit AS original,
fav_fruit AS standardized
FROM fruit;
UPDATE recode
SET standardized=trim(lower(original));
UPDATE recode
SET standardized='banana'
WHERE standardized LIKE '%nn%';
UPDATE recode
SET standardized=trim(standardized, 's'));
# original only
SELECT fav_fruit, count(*)
FROM fruit
GROUP BY fav_fruit;
SELECT now() - '2018-01-01'
SELECT '2010-01-01'::date + 1;
# 2010-01-02
SELECT '2018-12-10'::date + '1 year'::interval;
# 2019-12-10 00:00:00
SELECT '2018-12-10'::date + '1 year 2 days 3 minutes'::interval;
# 2019-12-12 00:00:03
date_part('field', timestamp)
EXTRACT(FIELD FROM timestamp)
SELECT date_part('month', now()),
EXTRACT(MONTH FROM now());
# individual sales
SELECT *
FROM sales
WHERE date >= '2010-01-01'
AND date < '2017-01-01';
# by month
SELECT date_part('month', date) AS month, sum(amt)
FROM sales
GROUP BY month
ORDER BY month;
SELECT date_trunc('month', date) AS month, sum(amt)
FROM sales
GROUP BY month
ORDER BY month;
SELECT generate_series('2018-01-31', '2018-12-31', '1 month'::interval)
WITH hour_series AS(
SELECT generate_series('2018-04-23 09:00:00',
'2018-04-23 14:00:00',
'1 hour'::interval) AS hours)
SELECT hours, count(data)
FROM hour_series
LEFT JOIN sales
ON hours=date_Truc('hour', date)
GROUP BY hours
GROUP BY hours
WITH bins AS(
SELECT generate_series('2018-04-23 09:00:00',
'2018-04-23 15:00:00',
'3 hour'::interval) AS lower,
generate_series('2018-04-23 12:00:00',
'2018-04-23 18:00:00',
'3 hour'::interval) AS upper)
SELECT lower, upper, count(date)
FROM bins
LEFT JOIN sales
ON date >= lower
AND date < upper
GROUP BY lower, upper
ORDER BY lower
SELECT date,
lag(date) OVER (ORDER BY date),
lead(date) OVER (ORDER BY date)
FROM sales;
SELECT date,
date - lag(data) OVER (ORDER BY date) AS gap
FROM sales
# average time
SELECT avg(gap)
FROM (SELECT date - lag(date) OVER (ORDER BY date) AS gap
FROM sales) AS gaps;
SELECT date, amount, lag(amount) OVER (ORDER BY date),
amount - lag(amount) OVER (ORDER BY date) AS chane
SELECT lower('aBc DeFg 7-');
SELECT *
FROM fruit
WHERE lower(fav_fruit) = 'apple';
SELECT *
FROM fruit
WHERE fav_fruit ILIKE '%apple%';
# LIKE 사용할 경우 문자 그대로 값에만 적용
SELECT left('abcde', 2),
right('abcde', 2),
SELECT left('abc', 10),
length(left('abc', 10));
SELECT split_part('a,bc,d', ',', 2);
# bc
SELECT concat('a', NULL, 'cc');
# acc
SELECT 'a' || NULL || 'cc';
#
SELECT CASE WHEN category LIKE '%: %' THEN split_part(category, ': ', 1)
WHEN category LIKE '% - %' THEN split_part(category, '- ', 1)
ELSE split_part(category, ' | ', 1)
END AS major_category, sum(business)
FROM naics
GROUP BY major_category;
CREATE TEMP TABLE recode AS
SELECT DISTINCT fav_fruit AS original,
fav_fruit AS standardized
FROM fruit;
UPDATE recode
SET standardized=trim(lower(original));
UPDATE recode
SET standardized='banana'
WHERE standardized LIKE '%nn%';
UPDATE recode
SET standardized=trim(standardized, 's'));
# original only
SELECT fav_fruit, count(*)
FROM fruit
GROUP BY fav_fruit;
SELECT now() - '2018-01-01'
SELECT '2010-01-01'::date + 1;
# 2010-01-02
SELECT '2018-12-10'::date + '1 year'::interval;
# 2019-12-10 00:00:00
SELECT '2018-12-10'::date + '1 year 2 days 3 minutes'::interval;
# 2019-12-12 00:00:03
date_part('field', timestamp)
EXTRACT(FIELD FROM timestamp)
SELECT date_part('month', now()),
EXTRACT(MONTH FROM now());
# individual sales
SELECT *
FROM sales
WHERE date >= '2010-01-01'
AND date < '2017-01-01';
# by month
SELECT date_part('month', date) AS month, sum(amt)
FROM sales
GROUP BY month
ORDER BY month;
SELECT date_trunc('month', date) AS month, sum(amt)
FROM sales
GROUP BY month
ORDER BY month;
SELECT generate_series('2018-01-31', '2018-12-31', '1 month'::interval)
WITH hour_series AS(
SELECT generate_series('2018-04-23 09:00:00',
'2018-04-23 14:00:00',
'1 hour'::interval) AS hours)
SELECT hours, count(data)
FROM hour_series
LEFT JOIN sales
ON hours=date_Truc('hour', date)
GROUP BY hours
GROUP BY hours
WITH bins AS(
SELECT generate_series('2018-04-23 09:00:00',
'2018-04-23 15:00:00',
'3 hour'::interval) AS lower,
generate_series('2018-04-23 12:00:00',
'2018-04-23 18:00:00',
'3 hour'::interval) AS upper)
SELECT lower, upper, count(date)
FROM bins
LEFT JOIN sales
ON date >= lower
AND date < upper
GROUP BY lower, upper
ORDER BY lower
SELECT date,
lag(date) OVER (ORDER BY date),
lead(date) OVER (ORDER BY date)
FROM sales;
SELECT date,
date - lag(data) OVER (ORDER BY date) AS gap
FROM sales
# average time
SELECT avg(gap)
FROM (SELECT date - lag(date) OVER (ORDER BY date) AS gap
FROM sales) AS gaps;
SELECT date, amount, lag(amount) OVER (ORDER BY date),
amount - lag(amount) OVER (ORDER BY date) AS chane
SELECT lower('aBc DeFg 7-');
SELECT *
FROM fruit
WHERE lower(fav_fruit) = 'apple';
SELECT *
FROM fruit
WHERE fav_fruit ILIKE '%apple%';
# LIKE 사용할 경우 문자 그대로 값에만 적용
SELECT left('abcde', 2),
right('abcde', 2),
SELECT left('abc', 10),
length(left('abc', 10));
SELECT split_part('a,bc,d', ',', 2);
# bc
SELECT concat('a', NULL, 'cc');
# acc
SELECT 'a' || NULL || 'cc';
#
SELECT CASE WHEN category LIKE '%: %' THEN split_part(category, ': ', 1)
WHEN category LIKE '% - %' THEN split_part(category, '- ', 1)
ELSE split_part(category, ' | ', 1)
END AS major_category, sum(business)
FROM naics
GROUP BY major_category;
CREATE TEMP TABLE recode AS
SELECT DISTINCT fav_fruit AS original,
fav_fruit AS standardized
FROM fruit;
UPDATE recode
SET standardized=trim(lower(original));
UPDATE recode
SET standardized='banana'
WHERE standardized LIKE '%nn%';
UPDATE recode
SET standardized=trim(standardized, 's'));
# original only
SELECT fav_fruit, count(*)
FROM fruit
GROUP BY fav_fruit;
SELECT now() - '2018-01-01'
SELECT '2010-01-01'::date + 1;
# 2010-01-02
SELECT '2018-12-10'::date + '1 year'::interval;
# 2019-12-10 00:00:00
SELECT '2018-12-10'::date + '1 year 2 days 3 minutes'::interval;
# 2019-12-12 00:00:03
date_part('field', timestamp)
EXTRACT(FIELD FROM timestamp)
SELECT date_part('month', now()),
EXTRACT(MONTH FROM now());
# individual sales
SELECT *
FROM sales
WHERE date >= '2010-01-01'
AND date < '2017-01-01';
# by month
SELECT date_part('month', date) AS month, sum(amt)
FROM sales
GROUP BY month
ORDER BY month;
SELECT date_trunc('month', date) AS month, sum(amt)
FROM sales
GROUP BY month
ORDER BY month;
SELECT generate_series('2018-01-31', '2018-12-31', '1 month'::interval)
WITH hour_series AS(
SELECT generate_series('2018-04-23 09:00:00',
'2018-04-23 14:00:00',
'1 hour'::interval) AS hours)
SELECT hours, count(data)
FROM hour_series
LEFT JOIN sales
ON hours=date_Truc('hour', date)
GROUP BY hours
GROUP BY hours
WITH bins AS(
SELECT generate_series('2018-04-23 09:00:00',
'2018-04-23 15:00:00',
'3 hour'::interval) AS lower,
generate_series('2018-04-23 12:00:00',
'2018-04-23 18:00:00',
'3 hour'::interval) AS upper)
SELECT lower, upper, count(date)
FROM bins
LEFT JOIN sales
ON date >= lower
AND date < upper
GROUP BY lower, upper
ORDER BY lower
SELECT date,
lag(date) OVER (ORDER BY date),
lead(date) OVER (ORDER BY date)
FROM sales;
SELECT date,
date - lag(data) OVER (ORDER BY date) AS gap
FROM sales
# average time
SELECT avg(gap)
FROM (SELECT date - lag(date) OVER (ORDER BY date) AS gap
FROM sales) AS gaps;
SELECT date, amount, lag(amount) OVER (ORDER BY date),
amount - lag(amount) OVER (ORDER BY date) AS chane
SELECT lower('aBc DeFg 7-');
SELECT *
FROM fruit
WHERE lower(fav_fruit) = 'apple';
SELECT *
FROM fruit
WHERE fav_fruit ILIKE '%apple%';
# LIKE 사용할 경우 문자 그대로 값에만 적용
SELECT left('abcde', 2),
right('abcde', 2),
SELECT left('abc', 10),
length(left('abc', 10));
SELECT split_part('a,bc,d', ',', 2);
# bc
SELECT concat('a', NULL, 'cc');
# acc
SELECT 'a' || NULL || 'cc';
#
SELECT CASE WHEN category LIKE '%: %' THEN split_part(category, ': ', 1)
WHEN category LIKE '% - %' THEN split_part(category, '- ', 1)
ELSE split_part(category, ' | ', 1)
END AS major_category, sum(business)
FROM naics
GROUP BY major_category;
CREATE TEMP TABLE recode AS
SELECT DISTINCT fav_fruit AS original,
fav_fruit AS standardized
FROM fruit;
UPDATE recode
SET standardized=trim(lower(original));
UPDATE recode
SET standardized='banana'
WHERE standardized LIKE '%nn%';
UPDATE recode
SET standardized=trim(standardized, 's'));
# original only
SELECT fav_fruit, count(*)
FROM fruit
GROUP BY fav_fruit;
SELECT now() - '2018-01-01'
SELECT '2010-01-01'::date + 1;
# 2010-01-02
SELECT '2018-12-10'::date + '1 year'::interval;
# 2019-12-10 00:00:00
SELECT '2018-12-10'::date + '1 year 2 days 3 minutes'::interval;
# 2019-12-12 00:00:03
date_part('field', timestamp)
EXTRACT(FIELD FROM timestamp)
SELECT date_part('month', now()),
EXTRACT(MONTH FROM now());
# individual sales
SELECT *
FROM sales
WHERE date >= '2010-01-01'
AND date < '2017-01-01';
# by month
SELECT date_part('month', date) AS month, sum(amt)
FROM sales
GROUP BY month
ORDER BY month;
SELECT date_trunc('month', date) AS month, sum(amt)
FROM sales
GROUP BY month
ORDER BY month;
SELECT generate_series('2018-01-31', '2018-12-31', '1 month'::interval)
WITH hour_series AS(
SELECT generate_series('2018-04-23 09:00:00',
'2018-04-23 14:00:00',
'1 hour'::interval) AS hours)
SELECT hours, count(data)
FROM hour_series
LEFT JOIN sales
ON hours=date_Truc('hour', date)
GROUP BY hours
GROUP BY hours
WITH bins AS(
SELECT generate_series('2018-04-23 09:00:00',
'2018-04-23 15:00:00',
'3 hour'::interval) AS lower,
generate_series('2018-04-23 12:00:00',
'2018-04-23 18:00:00',
'3 hour'::interval) AS upper)
SELECT lower, upper, count(date)
FROM bins
LEFT JOIN sales
ON date >= lower
AND date < upper
GROUP BY lower, upper
ORDER BY lower
SELECT date,
lag(date) OVER (ORDER BY date),
lead(date) OVER (ORDER BY date)
FROM sales;
SELECT date,
date - lag(data) OVER (ORDER BY date) AS gap
FROM sales
# average time
SELECT avg(gap)
FROM (SELECT date - lag(date) OVER (ORDER BY date) AS gap
FROM sales) AS gaps;
SELECT date, amount, lag(amount) OVER (ORDER BY date),
amount - lag(amount) OVER (ORDER BY date) AS chane
SELECT lower('aBc DeFg 7-');
SELECT *
FROM fruit
WHERE lower(fav_fruit) = 'apple';
SELECT *
FROM fruit
WHERE fav_fruit ILIKE '%apple%';
# LIKE 사용할 경우 문자 그대로 값에만 적용
SELECT left('abcde', 2),
right('abcde', 2),
SELECT left('abc', 10),
length(left('abc', 10));
SELECT split_part('a,bc,d', ',', 2);
# bc
SELECT concat('a', NULL, 'cc');
# acc
SELECT 'a' || NULL || 'cc';
#
SELECT CASE WHEN category LIKE '%: %' THEN split_part(category, ': ', 1)
WHEN category LIKE '% - %' THEN split_part(category, '- ', 1)
ELSE split_part(category, ' | ', 1)
END AS major_category, sum(business)
FROM naics
GROUP BY major_category;
CREATE TEMP TABLE recode AS
SELECT DISTINCT fav_fruit AS original,
fav_fruit AS standardized
FROM fruit;
UPDATE recode
SET standardized=trim(lower(original));
UPDATE recode
SET standardized='banana'
WHERE standardized LIKE '%nn%';
UPDATE recode
SET standardized=trim(standardized, 's'));
# original only
SELECT fav_fruit, count(*)
FROM fruit
GROUP BY fav_fruit;
SELECT now() - '2018-01-01'
SELECT '2010-01-01'::date + 1;
# 2010-01-02
SELECT '2018-12-10'::date + '1 year'::interval;
# 2019-12-10 00:00:00
SELECT '2018-12-10'::date + '1 year 2 days 3 minutes'::interval;
# 2019-12-12 00:00:03
date_part('field', timestamp)
EXTRACT(FIELD FROM timestamp)
SELECT date_part('month', now()),
EXTRACT(MONTH FROM now());
# individual sales
SELECT *
FROM sales
WHERE date >= '2010-01-01'
AND date < '2017-01-01';
# by month
SELECT date_part('month', date) AS month, sum(amt)
FROM sales
GROUP BY month
ORDER BY month;
SELECT date_trunc('month', date) AS month, sum(amt)
FROM sales
GROUP BY month
ORDER BY month;
SELECT generate_series('2018-01-31', '2018-12-31', '1 month'::interval)
WITH hour_series AS(
SELECT generate_series('2018-04-23 09:00:00',
'2018-04-23 14:00:00',
'1 hour'::interval) AS hours)
SELECT hours, count(data)
FROM hour_series
LEFT JOIN sales
ON hours=date_Truc('hour', date)
GROUP BY hours
GROUP BY hours
WITH bins AS(
SELECT generate_series('2018-04-23 09:00:00',
'2018-04-23 15:00:00',
'3 hour'::interval) AS lower,
generate_series('2018-04-23 12:00:00',
'2018-04-23 18:00:00',
'3 hour'::interval) AS upper)
SELECT lower, upper, count(date)
FROM bins
LEFT JOIN sales
ON date >= lower
AND date < upper
GROUP BY lower, upper
ORDER BY lower
SELECT date,
lag(date) OVER (ORDER BY date),
lead(date) OVER (ORDER BY date)
FROM sales;
SELECT date,
date - lag(data) OVER (ORDER BY date) AS gap
FROM sales
# average time
SELECT avg(gap)
FROM (SELECT date - lag(date) OVER (ORDER BY date) AS gap
FROM sales) AS gaps;
SELECT date, amount, lag(amount) OVER (ORDER BY date),
amount - lag(amount) OVER (ORDER BY date) AS chane
SELECT lower('aBc DeFg 7-');
SELECT *
FROM fruit
WHERE lower(fav_fruit) = 'apple';
SELECT *
FROM fruit
WHERE fav_fruit ILIKE '%apple%';
# LIKE 사용할 경우 문자 그대로 값에만 적용
SELECT left('abcde', 2),
right('abcde', 2),
SELECT left('abc', 10),
length(left('abc', 10));
SELECT split_part('a,bc,d', ',', 2);
# bc
SELECT concat('a', NULL, 'cc');
# acc
SELECT 'a' || NULL || 'cc';
#
SELECT CASE WHEN category LIKE '%: %' THEN split_part(category, ': ', 1)
WHEN category LIKE '% - %' THEN split_part(category, '- ', 1)
ELSE split_part(category, ' | ', 1)
END AS major_category, sum(business)
FROM naics
GROUP BY major_category;
CREATE TEMP TABLE recode AS
SELECT DISTINCT fav_fruit AS original,
fav_fruit AS standardized
FROM fruit;
UPDATE recode
SET standardized=trim(lower(original));
UPDATE recode
SET standardized='banana'
WHERE standardized LIKE '%nn%';
UPDATE recode
SET standardized=trim(standardized, 's'));
# original only
SELECT fav_fruit, count(*)
FROM fruit
GROUP BY fav_fruit;
SELECT now() - '2018-01-01'
SELECT '2010-01-01'::date + 1;
# 2010-01-02
SELECT '2018-12-10'::date + '1 year'::interval;
# 2019-12-10 00:00:00
SELECT '2018-12-10'::date + '1 year 2 days 3 minutes'::interval;
# 2019-12-12 00:00:03
date_part('field', timestamp)
EXTRACT(FIELD FROM timestamp)
SELECT date_part('month', now()),
EXTRACT(MONTH FROM now());
# individual sales
SELECT *
FROM sales
WHERE date >= '2010-01-01'
AND date < '2017-01-01';
# by month
SELECT date_part('month', date) AS month, sum(amt)
FROM sales
GROUP BY month
ORDER BY month;
SELECT date_trunc('month', date) AS month, sum(amt)
FROM sales
GROUP BY month
ORDER BY month;
SELECT generate_series('2018-01-31', '2018-12-31', '1 month'::interval)
WITH hour_series AS(
SELECT generate_series('2018-04-23 09:00:00',
'2018-04-23 14:00:00',
'1 hour'::interval) AS hours)
SELECT hours, count(data)
FROM hour_series
LEFT JOIN sales
ON hours=date_Truc('hour', date)
GROUP BY hours
GROUP BY hours
WITH bins AS(
SELECT generate_series('2018-04-23 09:00:00',
'2018-04-23 15:00:00',
'3 hour'::interval) AS lower,
generate_series('2018-04-23 12:00:00',
'2018-04-23 18:00:00',
'3 hour'::interval) AS upper)
SELECT lower, upper, count(date)
FROM bins
LEFT JOIN sales
ON date >= lower
AND date < upper
GROUP BY lower, upper
ORDER BY lower
SELECT date,
lag(date) OVER (ORDER BY date),
lead(date) OVER (ORDER BY date)
FROM sales;
SELECT date,
date - lag(data) OVER (ORDER BY date) AS gap
FROM sales
# average time
SELECT avg(gap)
FROM (SELECT date - lag(date) OVER (ORDER BY date) AS gap
FROM sales) AS gaps;
SELECT date, amount, lag(amount) OVER (ORDER BY date),
amount - lag(amount) OVER (ORDER BY date) AS chane
SELECT lower('aBc DeFg 7-');
SELECT *
FROM fruit
WHERE lower(fav_fruit) = 'apple';
SELECT *
FROM fruit
WHERE fav_fruit ILIKE '%apple%';
# LIKE 사용할 경우 문자 그대로 값에만 적용
SELECT left('abcde', 2),
right('abcde', 2),
SELECT left('abc', 10),
length(left('abc', 10));
SELECT split_part('a,bc,d', ',', 2);
# bc
SELECT concat('a', NULL, 'cc');
# acc
SELECT 'a' || NULL || 'cc';
#
SELECT CASE WHEN category LIKE '%: %' THEN split_part(category, ': ', 1)
WHEN category LIKE '% - %' THEN split_part(category, '- ', 1)
ELSE split_part(category, ' | ', 1)
END AS major_category, sum(business)
FROM naics
GROUP BY major_category;
CREATE TEMP TABLE recode AS
SELECT DISTINCT fav_fruit AS original,
fav_fruit AS standardized
FROM fruit;
UPDATE recode
SET standardized=trim(lower(original));
UPDATE recode
SET standardized='banana'
WHERE standardized LIKE '%nn%';
UPDATE recode
SET standardized=trim(standardized, 's'));
# original only
SELECT fav_fruit, count(*)
FROM fruit
GROUP BY fav_fruit;
SELECT now() - '2018-01-01'
SELECT '2010-01-01'::date + 1;
# 2010-01-02
SELECT '2018-12-10'::date + '1 year'::interval;
# 2019-12-10 00:00:00
SELECT '2018-12-10'::date + '1 year 2 days 3 minutes'::interval;
# 2019-12-12 00:00:03
date_part('field', timestamp)
EXTRACT(FIELD FROM timestamp)
SELECT date_part('month', now()),
EXTRACT(MONTH FROM now());
# individual sales
SELECT *
FROM sales
WHERE date >= '2010-01-01'
AND date < '2017-01-01';
# by month
SELECT date_part('month', date) AS month, sum(amt)
FROM sales
GROUP BY month
ORDER BY month;
SELECT date_trunc('month', date) AS month, sum(amt)
FROM sales
GROUP BY month
ORDER BY month;
SELECT generate_series('2018-01-31', '2018-12-31', '1 month'::interval)
WITH hour_series AS(
SELECT generate_series('2018-04-23 09:00:00',
'2018-04-23 14:00:00',
'1 hour'::interval) AS hours)
SELECT hours, count(data)
FROM hour_series
LEFT JOIN sales
ON hours=date_Truc('hour', date)
GROUP BY hours
GROUP BY hours
WITH bins AS(
SELECT generate_series('2018-04-23 09:00:00',
'2018-04-23 15:00:00',
'3 hour'::interval) AS lower,
generate_series('2018-04-23 12:00:00',
'2018-04-23 18:00:00',
'3 hour'::interval) AS upper)
SELECT lower, upper, count(date)
FROM bins
LEFT JOIN sales
ON date >= lower
AND date < upper
GROUP BY lower, upper
ORDER BY lower
SELECT date,
lag(date) OVER (ORDER BY date),
lead(date) OVER (ORDER BY date)
FROM sales;
SELECT date,
date - lag(data) OVER (ORDER BY date) AS gap
FROM sales
# average time
SELECT avg(gap)
FROM (SELECT date - lag(date) OVER (ORDER BY date) AS gap
FROM sales) AS gaps;
SELECT date, amount, lag(amount) OVER (ORDER BY date),
amount - lag(amount) OVER (ORDER BY date) AS chane
SELECT lower('aBc DeFg 7-');
SELECT *
FROM fruit
WHERE lower(fav_fruit) = 'apple';
SELECT *
FROM fruit
WHERE fav_fruit ILIKE '%apple%';
# LIKE 사용할 경우 문자 그대로 값에만 적용
SELECT left('abcde', 2),
right('abcde', 2),
SELECT left('abc', 10),
length(left('abc', 10));
SELECT split_part('a,bc,d', ',', 2);
# bc
SELECT concat('a', NULL, 'cc');
# acc
SELECT 'a' || NULL || 'cc';
#
SELECT CASE WHEN category LIKE '%: %' THEN split_part(category, ': ', 1)
WHEN category LIKE '% - %' THEN split_part(category, '- ', 1)
ELSE split_part(category, ' | ', 1)
END AS major_category, sum(business)
FROM naics
GROUP BY major_category;
CREATE TEMP TABLE recode AS
SELECT DISTINCT fav_fruit AS original,
fav_fruit AS standardized
FROM fruit;
UPDATE recode
SET standardized=trim(lower(original));
UPDATE recode
SET standardized='banana'
WHERE standardized LIKE '%nn%';
UPDATE recode
SET standardized=trim(standardized, 's'));
# original only
SELECT fav_fruit, count(*)
FROM fruit
GROUP BY fav_fruit;
SELECT now() - '2018-01-01'
SELECT '2010-01-01'::date + 1;
# 2010-01-02
SELECT '2018-12-10'::date + '1 year'::interval;
# 2019-12-10 00:00:00
SELECT '2018-12-10'::date + '1 year 2 days 3 minutes'::interval;
# 2019-12-12 00:00:03
date_part('field', timestamp)
EXTRACT(FIELD FROM timestamp)
SELECT date_part('month', now()),
EXTRACT(MONTH FROM now());
# individual sales
SELECT *
FROM sales
WHERE date >= '2010-01-01'
AND date < '2017-01-01';
# by month
SELECT date_part('month', date) AS month, sum(amt)
FROM sales
GROUP BY month
ORDER BY month;
SELECT date_trunc('month', date) AS month, sum(amt)
FROM sales
GROUP BY month
ORDER BY month;
SELECT generate_series('2018-01-31', '2018-12-31', '1 month'::interval)
WITH hour_series AS(
SELECT generate_series('2018-04-23 09:00:00',
'2018-04-23 14:00:00',
'1 hour'::interval) AS hours)
SELECT hours, count(data)
FROM hour_series
LEFT JOIN sales
ON hours=date_Truc('hour', date)
GROUP BY hours
GROUP BY hours
WITH bins AS(
SELECT generate_series('2018-04-23 09:00:00',
'2018-04-23 15:00:00',
'3 hour'::interval) AS lower,
generate_series('2018-04-23 12:00:00',
'2018-04-23 18:00:00',
'3 hour'::interval) AS upper)
SELECT lower, upper, count(date)
FROM bins
LEFT JOIN sales
ON date >= lower
AND date < upper
GROUP BY lower, upper
ORDER BY lower
SELECT date,
lag(date) OVER (ORDER BY date),
lead(date) OVER (ORDER BY date)
FROM sales;
SELECT date,
date - lag(data) OVER (ORDER BY date) AS gap
FROM sales
# average time
SELECT avg(gap)
FROM (SELECT date - lag(date) OVER (ORDER BY date) AS gap
FROM sales) AS gaps;
SELECT date, amount, lag(amount) OVER (ORDER BY date),
amount - lag(amount) OVER (ORDER BY date) AS chane
SELECT lower('aBc DeFg 7-');
SELECT *
FROM fruit
WHERE lower(fav_fruit) = 'apple';
SELECT *
FROM fruit
WHERE fav_fruit ILIKE '%apple%';
# LIKE 사용할 경우 문자 그대로 값에만 적용
SELECT left('abcde', 2),
right('abcde', 2),
SELECT left('abc', 10),
length(left('abc', 10));
SELECT split_part('a,bc,d', ',', 2);
# bc
SELECT concat('a', NULL, 'cc');
# acc
SELECT 'a' || NULL || 'cc';
#
SELECT CASE WHEN category LIKE '%: %' THEN split_part(category, ': ', 1)
WHEN category LIKE '% - %' THEN split_part(category, '- ', 1)
ELSE split_part(category, ' | ', 1)
END AS major_category, sum(business)
FROM naics
GROUP BY major_category;
CREATE TEMP TABLE recode AS
SELECT DISTINCT fav_fruit AS original,
fav_fruit AS standardized
FROM fruit;
UPDATE recode
SET standardized=trim(lower(original));
UPDATE recode
SET standardized='banana'
WHERE standardized LIKE '%nn%';
UPDATE recode
SET standardized=trim(standardized, 's'));
# original only
SELECT fav_fruit, count(*)
FROM fruit
GROUP BY fav_fruit;
SELECT now() - '2018-01-01'
SELECT '2010-01-01'::date + 1;
# 2010-01-02
SELECT '2018-12-10'::date + '1 year'::interval;
# 2019-12-10 00:00:00
SELECT '2018-12-10'::date + '1 year 2 days 3 minutes'::interval;
# 2019-12-12 00:00:03
date_part('field', timestamp)
EXTRACT(FIELD FROM timestamp)
SELECT date_part('month', now()),
EXTRACT(MONTH FROM now());
# individual sales
SELECT *
FROM sales
WHERE date >= '2010-01-01'
AND date < '2017-01-01';
# by month
SELECT date_part('month', date) AS month, sum(amt)
FROM sales
GROUP BY month
ORDER BY month;
SELECT date_trunc('month', date) AS month, sum(amt)
FROM sales
GROUP BY month
ORDER BY month;
SELECT generate_series('2018-01-31', '2018-12-31', '1 month'::interval)
WITH hour_series AS(
SELECT generate_series('2018-04-23 09:00:00',
'2018-04-23 14:00:00',
'1 hour'::interval) AS hours)
SELECT hours, count(data)
FROM hour_series
LEFT JOIN sales
ON hours=date_Truc('hour', date)
GROUP BY hours
GROUP BY hours
WITH bins AS(
SELECT generate_series('2018-04-23 09:00:00',
'2018-04-23 15:00:00',
'3 hour'::interval) AS lower,
generate_series('2018-04-23 12:00:00',
'2018-04-23 18:00:00',
'3 hour'::interval) AS upper)
SELECT lower, upper, count(date)
FROM bins
LEFT JOIN sales
ON date >= lower
AND date < upper
GROUP BY lower, upper
ORDER BY lower
SELECT date,
lag(date) OVER (ORDER BY date),
lead(date) OVER (ORDER BY date)
FROM sales;
SELECT date,
date - lag(data) OVER (ORDER BY date) AS gap
FROM sales
# average time
SELECT avg(gap)
FROM (SELECT date - lag(date) OVER (ORDER BY date) AS gap
FROM sales) AS gaps;
SELECT date, amount, lag(amount) OVER (ORDER BY date),
amount - lag(amount) OVER (ORDER BY date) AS chane
SELECT lower('aBc DeFg 7-');
SELECT *
FROM fruit
WHERE lower(fav_fruit) = 'apple';
SELECT *
FROM fruit
WHERE fav_fruit ILIKE '%apple%';
# LIKE 사용할 경우 문자 그대로 값에만 적용
SELECT left('abcde', 2),
right('abcde', 2),
SELECT left('abc', 10),
length(left('abc', 10));
SELECT split_part('a,bc,d', ',', 2);
# bc
SELECT concat('a', NULL, 'cc');
# acc
SELECT 'a' || NULL || 'cc';
#
SELECT CASE WHEN category LIKE '%: %' THEN split_part(category, ': ', 1)
WHEN category LIKE '% - %' THEN split_part(category, '- ', 1)
ELSE split_part(category, ' | ', 1)
END AS major_category, sum(business)
FROM naics
GROUP BY major_category;
CREATE TEMP TABLE recode AS
SELECT DISTINCT fav_fruit AS original,
fav_fruit AS standardized
FROM fruit;
UPDATE recode
SET standardized=trim(lower(original));
UPDATE recode
SET standardized='banana'
WHERE standardized LIKE '%nn%';
UPDATE recode
SET standardized=trim(standardized, 's'));
# original only
SELECT fav_fruit, count(*)
FROM fruit
GROUP BY fav_fruit;
SELECT now() - '2018-01-01'
SELECT '2010-01-01'::date + 1;
# 2010-01-02
SELECT '2018-12-10'::date + '1 year'::interval;
# 2019-12-10 00:00:00
SELECT '2018-12-10'::date + '1 year 2 days 3 minutes'::interval;
# 2019-12-12 00:00:03
date_part('field', timestamp)
EXTRACT(FIELD FROM timestamp)
SELECT date_part('month', now()),
EXTRACT(MONTH FROM now());
# individual sales
SELECT *
FROM sales
WHERE date >= '2010-01-01'
AND date < '2017-01-01';
# by month
SELECT date_part('month', date) AS month, sum(amt)
FROM sales
GROUP BY month
ORDER BY month;
SELECT date_trunc('month', date) AS month, sum(amt)
FROM sales
GROUP BY month
ORDER BY month;
SELECT generate_series('2018-01-31', '2018-12-31', '1 month'::interval)
WITH hour_series AS(
SELECT generate_series('2018-04-23 09:00:00',
'2018-04-23 14:00:00',
'1 hour'::interval) AS hours)
SELECT hours, count(data)
FROM hour_series
LEFT JOIN sales
ON hours=date_Truc('hour', date)
GROUP BY hours
GROUP BY hours
WITH bins AS(
SELECT generate_series('2018-04-23 09:00:00',
'2018-04-23 15:00:00',
'3 hour'::interval) AS lower,
generate_series('2018-04-23 12:00:00',
'2018-04-23 18:00:00',
'3 hour'::interval) AS upper)
SELECT lower, upper, count(date)
FROM bins
LEFT JOIN sales
ON date >= lower
AND date < upper
GROUP BY lower, upper
ORDER BY lower
SELECT date,
lag(date) OVER (ORDER BY date),
lead(date) OVER (ORDER BY date)
FROM sales;
SELECT date,
date - lag(data) OVER (ORDER BY date) AS gap
FROM sales
# average time
SELECT avg(gap)
FROM (SELECT date - lag(date) OVER (ORDER BY date) AS gap
FROM sales) AS gaps;
SELECT date, amount, lag(amount) OVER (ORDER BY date),
amount - lag(amount) OVER (ORDER BY date) AS chane
[SQL 스터디_1팀] 5주차_강의노트 (1) (0) | 2023.05.09 |
---|---|
[SQL 스터디_2팀] 5주차_강의노트 (0) | 2023.05.09 |
[SQL_스터디_2팀] 5주차_강의노트(2) (0) | 2023.05.05 |
[SQL 스터디_2팀] 4주차_강의노트 (2) (0) | 2023.05.02 |
[SQL 스터디_1팀] 5주차_강의노트 (2) (0) | 2023.05.02 |
댓글 영역