Google Visualization API Query Language به شما امکان می دهد دستکاری های مختلف داده را با پرس و جو به منبع داده انجام دهید.
فهرست مطالب
معرفی
به طور معمول، تجسم ها انتظار داده ها را به شکل خاصی دارند. به عنوان مثال، یک نمودار دایره ای ممکن است داده ها را به صورت دو ستون انتظار داشته باشد: یک برچسب متنی و یک مقدار عددی. داده های موجود در منبع داده ممکن است دقیقاً با این ساختار مطابقت نداشته باشد. به عنوان مثال منبع داده ممکن است بیش از دو ستون داشته باشد، یا ترتیب ستون ها ممکن است با ترتیب مورد انتظار نمودار دایره ای مطابقت نداشته باشد.
زبان پرس و جو امکان ارسال درخواست های دستکاری و قالب بندی داده ها را به منبع داده فراهم می کند و اطمینان حاصل می کند که ساختار داده های بازگشتی و محتویات با ساختار مورد انتظار مطابقت دارند.
سینتکس زبان پرس و جو مشابه SQL است. توسعه دهندگان آشنا با SQL باید بتوانند به سرعت این زبان پرس و جو را یاد بگیرند و از آن استفاده کنند. آموزش های SQL زیادی در وب وجود دارد. تفاوت هایی بین این زبان پرس و جو و SQL وجود دارد که در بخش نحو توضیح داده شده است.
توجه داشته باشید که منابع داده برای پیاده سازی زبان پرس و جو، یا در صورت لزوم، برای پیاده سازی تمام ویژگی های زبان مورد نیاز نیستند. مگر اینکه دلیلی برای باور غیر از این داشته باشید، برای پیاده سازی همه ویژگی های این زبان نباید به یک منبع داده وابسته باشید.
با استفاده از زبان پرس و جو
میتوانید به دو روش یک رشته جستجو را به درخواست منبع داده پیوست کنید: با تنظیم رشته جستجو از داخل کد جاوا اسکریپت، یا با تنظیم رشته جستجو به عنوان پارامتر در URL منبع داده . اگر درخواست شما شامل رشته پرس و جو نیست، رفتار پیشفرض برای منبع داده این است که تمام سطرها و ستونها را با استفاده از ترتیب و قالب بندی سطر/ستون پیشفرض خود بازگرداند. شما می توانید با قرار دادن یک رشته پرس و جو در درخواست خود به منبع داده آن را تغییر دهید.
تنظیم پرس و جو از جاوا اسکریپت
برای تنظیم رشته پرس و جو از داخل کد جاوا اسکریپت، متد setQuery
از کلاس google.visualization.Query
را فراخوانی کنید.
var query = new google.visualization.Query(DATA_SOURCE_URL); query.setQuery('select dept, sum(salary) group by dept'); query.send(handleQueryResponse);
تنظیم Query در URL منبع داده
رشته پرس و جو را می توان با استفاده از پارامتر tq
به URL منبع داده اضافه کرد. تنظیم پرس و جو در پارامتر URL به جای جاوا اسکریپت به شما امکان می دهد به راحتی از تجسم های نوشته شده توسط توسعه دهندگان دیگر استفاده کنید و همچنان بتوانید پرس و جو را سفارشی کنید.
رشته پرس و جو باید به درستی به عنوان پارامتر URL کدگذاری شود. شما می توانید URL را با استفاده از تابع encodeURIComponent
جاوا اسکریپت رمزگذاری کنید، یا می توانید با استفاده از ابزار رمزگذاری در انتهای این بخش، آن را با دست رمزگذاری کنید.
مثال:
رشته پرس و جو زیر را برای یک صفحه گسترده گوگل در نظر بگیرید. (توجه داشته باشید که شناسه ستون ها در صفحات گسترده همیشه حروف هستند؛ متن عنوان ستون نشان داده شده در صفحه گسترده منتشر شده، برچسب هستند، نه شناسه. شما باید از شناسه، نه برچسب، در رشته درخواست خود استفاده کنید.)
select A, sum(B) group by A
هنگامی که کدگذاری می شود، این پرس و جو تبدیل به:
select%20A%2C%20sum(B)%20group%20by%20A
فرض کنید این آدرس صفحه گسترده شما است:
https://docs.google.com/a/google.com/spreadsheets/d/1r8_mfnZAvTFmT02JHi1XgOwn_-sLCR9XgmR8wEQ4uW4
/gviz/tq?tq=
YOUR_QUERY_STRING را به URL صفحه گسترده اضافه کنید تا رشته جستجوی نهایی خود را دریافت کنید:
https://docs.google.com/a/google.com/spreadsheets/d/1r8_mfnZAvTFmT02JHi1XgOwn_-sLCR9XgmR8wEQ4uW4/gviz/tq?tq=select%A%2C%20sum(B)%20group%20by%20A
از ابزار زیر برای رمزگذاری یا رمزگشایی رشته پرس و جو استفاده کنید:
توجه: دسترسی به دادههای صفحهگسترده خصوصی مستلزم ارسال اعتبارنامه صریح مجوز با استفاده از OAuth است. برای جزئیات بیشتر به بخش صفحات گسترده Google: مجوز مراجعه کنید.
نحو زبان
بررسی اجمالی
سینتکس Google Visualization API Query Language طوری طراحی شده است که شبیه به نحو SQL باشد. با این حال، زیرمجموعه ای از SQL است، با چند ویژگی خاص که باید یاد بگیرید. اگر با SQL آشنایی دارید، یادگیری آن نباید خیلی سخت باشد.
جداول داده ها
این سند از عبارت جدول داده برای اشاره به مجموعه نتایج یک پرس و جو استفاده می کند. یک جدول داده از سطرها و ستون ها تشکیل شده است. هر ستون در جدول داده دارای ویژگی های زیر است:
- شناسه (یا شناسه ستون ). برای ارجاع به ستون های درون پرس و جو استفاده می شود. توجه داشته باشید که هرگز نباید سعی کنید یک ستون به برچسب در یک پرس و جو ارجاع دهید، بلکه فقط با شناسه استفاده کنید. نکته: سعی کنید از شناسه هایی که دارای فاصله هستند استفاده نکنید. مدیریت فضاها سخت است و می تواند باعث شود که اشتباهات کوچک اما پیدا کردن آنها در کدنویسی دشوار باشد. علاوه بر این، شناسه ای که شامل فضاها می شود باید با نقل قول های پشتی احاطه شود.
- برچسب .
string
که معمولاً برای کاربران نهایی نمایش داده می شود. به عنوان مثال به عنوان یک افسانه در نمودار دایره ای، یا عنوان ستون در یک جدول. - نوع داده . انواع داده های پشتیبانی شده عبارتند از
string
،number
،boolean
،date
،datetime
وtimeofday
. همه مقادیر یک ستون دارای یک نوع داده منطبق با نوع ستون یا مقدارnull
خواهند بود. این انواع شبیه به انواع جاوا اسکریپت هستند، اما یکسان نیستند. در بخش Literals این صفحه توضیح داده شده است. - الگوی قالب بندی منبع داده می تواند الگوهای قالب بندی را برای برخی یا همه ستون های خود تعریف کند. شما می توانید این الگو را با گنجاندن یک بند قالب لغو کنید.
جدول استفاده شده در همه نمونه ها:
در سرتاسر این بخش، تمام نمونه های پرس و جو به جدول زیر مراجعه می کنند. سرصفحه ستون ها شناسه های ستون هستند.
namestring |
deptstring |
lunchTimetimeofday |
salary number |
hireDatedate |
agenumber |
isSeniorboolean |
seniorityStartTimedatetime |
---|---|---|---|---|---|---|---|
John | Eng | 12:00:00 | 1000 | 2005-03-19 | 35 | true | 2007-12-02 15:56:00 |
Dave | Eng | 12:00:00 | 500 | 2006-04-19 | 27 | false | null |
Sally | Eng | 13:00:00 | 600 | 2005-10-10 | 30 | false | null |
Ben | Sales | 12:00:00 | 400 | 2002-10-10 | 32 | true | 2005-03-09 12:30:00 |
Dana | Sales | 12:00:00 | 350 | 2004-09-08 | 25 | false | null |
Mike | Marketing | 13:00:00 | 800 | 2005-01-10 | 24 | true | 2007-12-30 14:40:00 |
بندهای زبان
نحو زبان پرس و جو از جمله های زیر تشکیل شده است. هر بند با یک یا دو کلمه کلیدی شروع می شود. تمام بندها اختیاری هستند. بندها با فاصله از هم جدا می شوند. ترتیب بندها باید به شرح زیر باشد:
عبارت | استفاده |
---|---|
select | انتخاب می کند کدام ستون ها و به چه ترتیبی بازگردانده شوند. اگر حذف شود، تمام ستونهای جدول به ترتیب پیشفرض بازگردانده میشوند. |
where | فقط ردیف هایی را برمی گرداند که با یک شرط مطابقت دارند. اگر حذف شود، تمام ردیف ها برگردانده می شوند. |
group by | مقادیر را در ردیف ها جمع می کند. |
pivot | مقادیر متمایز در ستون ها را به ستون های جدید تبدیل می کند. |
order by | ردیف ها را بر اساس مقادیر در ستون ها مرتب می کند. |
limit | تعداد ردیف های برگشتی را محدود می کند. |
offset | تعداد مشخصی از ردیف های اول را رد می کند. |
label | برچسب های ستون را تنظیم می کند. |
format | با استفاده از الگوهای قالب بندی داده شده، مقادیر موجود در ستون های خاص را قالب بندی می کند. |
options | گزینه های اضافی را تنظیم می کند. |
from | بند from از زبان حذف شده است. |
انتخاب کنید
از عبارت select
برای مشخص کردن ستونها و ترتیب آنها استفاده میشود. اگر این بند مشخص نشده باشد، یا اگر select *
استفاده شود، تمام ستونهای جدول منبع داده، به ترتیب اصلی خود برگردانده میشوند. ستون ها با شناسه ها ارجاع داده می شوند (نه با برچسب). به عنوان مثال، در یک صفحه گسترده گوگل، شناسه ستون ها یک یا دو حرف ستون (A، B، C، ...) هستند.
موارد موجود در یک بند select
میتوانند شناسههای ستون، یا خروجی توابع تجمع ، توابع اسکالر یا عملگرها باشند.
مثال ها:
select *
select dept, salary
select max(salary)
در مثال زیر، از نقلقولهای برگشتی برای ارجاع به شناسههای ستونی استفاده میشود که حاوی فاصله (آدرس ایمیل) یا کلمات رزرو شده (تاریخ) هستند:
select `email address`, name, `date`
اجرای پرس و جو زیر در جدول مثال :
select lunchTime, name
پاسخ زیر را برمیگرداند:
lunchTime | name |
---|---|
12:00:00 | John |
12:00:00 | Dave |
13:00:00 | Sally |
12:00:00 | Ben |
12:00:00 | Dana |
13:00:00 | Mike |
جایی که
از عبارت where
فقط برای برگرداندن ردیف هایی استفاده می شود که با یک شرط مشخص مطابقت دارند.
عملگرهای مقایسه ساده عبارتند از <=, <, >, >=, =, !=, <>
. هر دو عملگر مقایسه != <>
به معنای غیر برابر هستند. رشته ها با ارزش واژگانی مقایسه می شوند. توجه داشته باشید که برابری با =
نشان داده می شود، نه ==
مانند اکثر زبان های کامپیوتر. مقایسه با null
با استفاده از is null
یا is not null
انجام می شود.
شما می توانید با استفاده از عملگرهای منطقی and
or
، و و not
، چند شرط را به هم بپیوندید. از پرانتز می توان برای تعریف تقدم صریح استفاده کرد.
بند Where همچنین از برخی عملگرهای مقایسه رشته پیچیده تر پشتیبانی می کند. این عملگرها دو رشته را به عنوان آرگومان می گیرند. هر آرگومان غیر رشته ای (مثلاً تاریخ یا اعداد) قبل از مقایسه به رشته تبدیل می شود. تطبیق رشته به حروف کوچک و بزرگ حساس است (شما می توانید از توابع اسکالر upper()
یا lower()
برای حل آن استفاده کنید).
-
contains
- یک تطابق زیر رشته ای. کلcontains
جزء درست است اگر جزء هر جایی در کل باشد. مثال:where name contains 'John'
با «جان»، «جان آدامز»، «لنگ جان سیلور» منطبق است اما نه «جان آدامز». -
starts with
. مقدارstarts with
پیشوند درست است اگر پیشوند در ابتدای مقدار باشد. مثالها:where dept starts with 'engineering'
با «مهندسی» و «مدیران مهندسی» مطابقت دارد.where dept starts with 'e'
'مهندسی'، 'eng' و 'e'. -
ends with
- یک پسوند مطابقت. مقدارends with
پسوند درست است اگر پسوند در انتهای مقدار باشد. مثال:where role ends with 'y'
با 'کاوبوی'، 'پسر' و 'y' مطابقت دارد. -
matches
- تطبیق عبارت منظم (preg). اگر عبارت منظم در سوزن با انبار کاه مطابقتmatches
باشد، درست است. مثالها:where country matches '.*ia'
با هند و نیجریه مطابقت دارد، اما نه با ایندیانا. توجه داشته باشید که این یک جستجوی جهانی نیست، بنابراینwhere country matches 'an'
با 'کانادا' مطابقت نخواهد داشت. -
like
- جستجوی متنی که از دو علامت عام پشتیبانی میکند: % که با صفر یا چند کاراکتر از هر نوع مطابقت دارد، و _ (زیر خط)، که با هر یک از کاراکترها مطابقت دارد. این شبیه به عملگر SQL LIKE است. مثال:where name like fre%
با 'fre'، 'fred' و 'freddy' مطابقت دارد.
مثال ها:
where salary >= 600 where dept != 'Eng' and date '2005-01-21' < hireDate where (dept<>'Eng' and isSenior=true) or (dept='Sales') or seniorityStartTime is null
اجرای پرس و جو زیر در جدول مثال :
select name where salary > 700
پاسخ زیر را برمیگرداند:
name |
---|
John |
Mike |
دسته بندی بر اساس
group by
بند برای تجمیع مقادیر در ردیف ها استفاده می شود. یک ردیف برای هر ترکیب مجزا از مقادیر در بند گروهی ایجاد می شود. دادهها بهطور خودکار بر اساس ستونهای گروهبندی مرتب میشوند، مگر اینکه order by
دیگری مشخص شده باشد.
توجه: اگر از یک group by
بند استفاده میکنید، هر ستونی که در عبارت select
فهرست شده است باید یا در group by
بند فهرست شود یا توسط یک تابع تجمیع پیچیده شود.
مثال ها:
select dept, max(salary) group by dept
اجرای پرس و جو زیر در جدول مثال :
select lunchTime, avg(salary), count(age) group by isSenior,lunchTime
پاسخ زیر را برمیگرداند:
lunchTime | avg-salary | count-age |
---|---|---|
12:00:00 | 425 | 2 |
13:00:00 | 600 | 1 |
12:00:00 | 700 | 2 |
13:00:00 | 800 | 1 |
محور
بند pivot
برای تبدیل مقادیر متمایز در ستون ها به ستون های جدید استفاده می شود. به عنوان مثال، یک محور توسط یک ستون 'سال' یک جدول با یک ستون برای هر سال متمایز که در جدول اصلی ظاهر می شود ایجاد می کند. این می تواند مفید باشد اگر، برای مثال، تجسم نمودار خطی، هر ستون را به عنوان یک خط جداگانه ترسیم کند. اگر میخواهید برای هر سال یک خط جداگانه رسم کنید، و «سال» یکی از ستونهای جدول اصلی است، یک گزینه خوب استفاده از یک عملیات محوری برای انجام تبدیل دادههای لازم است.
توجه: اگر از یک بند pivot
استفاده میکنید، هر ستونی که در عبارت select
فهرست شده است باید یا در group by
بند فهرست شود یا توسط یک تابع تجمیع پیچیده شود.
از آنجایی که چندین ردیف ممکن است حاوی مقادیر یکسانی برای ستون های محوری باشند، pivot به معنای تجمع است. توجه داشته باشید که هنگام استفاده از pivot
بدون استفاده از group by
، جدول نتیجه دقیقاً شامل یک سطر خواهد بود. برای مثال، پرس و جوی زیر را روی جدول مثال اجرا کنید:
select sum(salary) pivot dept
پاسخ زیر را برمیگرداند:
Eng sum-salary | Marketing sum-salary | Sales sum-salary |
---|---|---|
2100 | 800 | 750 |
این به این دلیل است که 2100 مجموع حقوق برای بخش مهندسی، 800 برای بخش بازاریابی و غیره است.
استفاده از pivot
همراه با group by
می تواند حتی مفیدتر باشد، زیرا جدولی را ایجاد می کند که در آن هر سلول حاوی نتیجه تجمع برای سطر مربوطه و ستون مربوطه است. به عنوان مثال، اجرای پرس و جو زیر در جدول مثال :
select dept, sum(salary) group by dept pivot lunchTime
پاسخ زیر را برمیگرداند:
dept | 12:00:00 sum-salary | 13:00:00 sum-salary |
---|---|---|
Eng | 1500 | 600 |
Marketing | null | 800 |
Sales | 750 | null |
همچنین میتوانید این جدول را با جابهجایی ستونها و ردیفها، با جابهجایی بین ستونهای pivot
و group by
ستون، «معکوس» کنید. اجرای پرس و جو زیر در جدول مثال :
select lunchTime, sum(salary) group by lunchTime pivot dept
پاسخ زیر را برمیگرداند:
lunchTime | Eng sum-salary | Marketing sum-salary | Sales sum-salary |
---|---|---|---|
12:00:00 | 1500 | null | 750 |
13:00:00 | 600 | 800 | null |
همچنین می توانید از بیش از یک ستون در عبارت pivot
استفاده کنید. در چنین حالتی، ستونهای جدول پاسخ از تمام ترکیبهای منحصربهفرد مقادیر در ستونهایی که در جدول اصلی وجود دارند، تشکیل شدهاند. برای مثال، پرس و جوی زیر را روی جدول مثال اجرا کنید:
select sum(salary) pivot dept, lunchTime
پاسخ زیر را برمیگرداند:
Eng,12:00:00 sum-salary | Eng,13:00:00 sum-salary | Marketing,13:00:00 sum-salary | Sales,12:00:00 sum-salary |
---|---|---|---|
1500 | 600 | 800 | 750 |
توجه داشته باشید که تنها ترکیب هایی که در جدول اصلی ظاهر می شوند، ستون هایی در جدول پاسخ داده می شوند. به همین دلیل است که هیچ ستونی برای بازاریابی، 12:00:00 یا فروش، 13:00:00 وجود ندارد.
استفاده از بیش از یک تجمیع نیز امکان پذیر است. برای مثال، پرس و جوی زیر را روی جدول مثال اجرا کنید:
select sum(salary), max(lunchTime) pivot dept
پاسخ زیر را برمیگرداند:
Eng sum-salary | Marketing sum-salary | Sales sum-salary | Eng max-lunchTime | Marketing max-lunchTime | Sales max-lunchTime |
---|---|---|---|---|---|
2100 | 800 | 750 | 13:00:00 | 13:00:00 | 12:00:00 |
شما می توانید چندین تجمع را در بند select
، چندین ستون در group by
بند و چندین ستون را در بند pivot
ترکیب کنید. در داخل، تجمیع با الحاق ستونها در گروههای by و pivot انجام میشود.
ستونهای مشخصشده در بند pivot
ممکن است در عبارتهای select
، group by
یا order by
ظاهر نشوند. وقتی pivot
استفاده میشود، order by
بند نمیتواند حاوی هیچ ستون تجمعی باشد. دلیل آن این است که برای هر تجمیع مشخص شده در عبارت select
، ستون های زیادی در جدول نتیجه ایجاد می شود. با این حال، وقتی از pivot
استفاده می شود، می توانید ستون های تجمع را قالب بندی کنید. نتیجه چنین قالبی این است که تمام ستون های جدید مربوط به تجمع خاص، که توسط عملیات محوری ایجاد می شوند، با الگوی مشخص شده قالب بندی می شوند. در مثال بالا، اضافه کردن format sum(salary) "some_format_string"
بر ستون های زیر تاثیر می گذارد: Eng sum-salary، Marketing sum-salary و Sales sum-salary.
می توانید ستون های تجمع را برچسب گذاری کنید. اگر هیچ برچسبی در بند label
مشخص نشده باشد، برچسب ستونی که در نتیجه چرخش تولید می شود از لیست مقادیر در ستون های محوری، نوع تجمع (حداقل، حداکثر، جمع، ...) و برچسب ستون تجمیع شده به عنوان مثال "Eng,12:00:00 sum sumary". اگر فقط یک تجمیع در بند select
مشخص شده باشد، قسمت تجمیع از برچسب حذف میشود و فقط فهرست مقادیر در ستونهای محوری حفظ میشود. به عنوان مثال "Eng,12:00:00". هنگامی که یک بند label
برچسبی را برای یک ستون تجمیع مشخص میکند، برچسب درخواستی به لیست مقادیر اضافه میشود، چه زمانی که تنها یک تجمیع در عبارت select
وجود داشته باشد و چه زمانی که بیش از یک وجود دارد. به عنوان مثال، label sum(salary) "sumsal"
منجر به برچسب های ستون "Eng,12:00:00 sumsal"، "Eng,13:00:00:00 sumsal" و غیره می شود.
سفارش توسط
order by
بند برای مرتب سازی ردیف ها بر اساس مقادیر در ستون های مشخص شده استفاده می شود.
اقلام به order by
بند می توانند شناسه ستون، یا خروجی توابع تجمع ، توابع اسکالر یا عملگرها باشند.
مثال ها:
order by dept, salary desc
select dept, max(salary) group by dept order by max(salary)
حد
از بند limit
برای محدود کردن تعداد ردیف های برگشتی استفاده می شود.
مثال:
limit 100
انحراف
عبارت offset
برای رد شدن از تعداد مشخصی از ردیف های اول استفاده می شود. اگر از یک بند limit
استفاده می شود، ابتدا offset
اعمال می شود: به عنوان مثال، limit 15 offset 30
ردیف های 31 تا 45 را برمی گرداند.
مثال ها:
offset 10 limit 30 offset 210
برچسب
از عبارت label
برای تنظیم برچسب برای یک یا چند ستون استفاده می شود. توجه داشته باشید که نمی توانید از یک مقدار برچسب به جای شناسه در پرس و جو استفاده کنید.
موارد موجود در یک بند label
می توانند شناسه ستون یا خروجی توابع تجمع ، توابع اسکالر یا عملگرها باشند.
نحو:
label column_id label_string [,column_id label_string]
-
column_id
- شناسه ستونی که به آن برچسب اختصاص داده شده است.
-
label_string
- برچسبی که باید به آن ستون اختصاص داده شود. بسیاری از تجسم ها از برچسب ستون به عنوان متن برای نمایش به کاربر نهایی استفاده می کنند، مانند یک برچسب افسانه در نمودار دایره ای. برچسبها حروف رشتهای هستند و از آن قوانین نحوی پیروی میکنند.
مثال:
مثال زیر برچسب ستون dept را روی "Department"، برچسب ستون نام را روی "Employee Name" و برچسب ستون مکان را روی "Employee Location" قرار می دهد:
label dept 'Department', name "Employee Name", location 'Employee Location'
قالب
بند format
برای تعیین یک مقدار قالب بندی شده برای سلول های یک یا چند ستون استفاده می شود. داده های برگشتی باید شامل یک مقدار واقعی و یک مقدار قالب بندی شده برای هر سلول در یک ستون فرمت شده باشد. بسیاری از تجسم ها از مقدار فرمت نشده برای محاسبات استفاده می کنند، اما از مقدار قالب بندی شده برای نمایش استفاده می کنند. الگوهایی که در این بند مشخص می کنید معمولاً در ویژگی الگوی ستون های مربوطه برگردانده می شوند.
نحو الگو:
-
number
،date
،timeofday
،datetime
- الگوهای تاریخ و شماره تعریف شده توسط ICU .
-
boolean
- الگو یک
string
با فرمت " value-if-true : value-if-false " است.
مثال:
format salary '#,##0.00', hireDate 'dd-MMM-yyyy', isSenior 'Yes!:Not yet'
گزینه ها
بند options
برای کنترل گزینه های اضافی برای اجرای پرس و جو استفاده می شود. کلمات کلیدی احتمالی که می توانند از بند options
پیروی کنند عبارتند از:
-
no_format
مقادیر فرمت شده را از نتیجه حذف می کند و فقط مقادیر زیرین را باقی می گذارد. زمانی می توان از آن استفاده کرد که تجسم خاص از مقادیر قالب بندی شده برای کاهش اندازه پاسخ استفاده نمی کند. -
no_values
مقادیر زیربنایی را از نتیجه حذف می کند و فقط مقادیر قالب بندی شده را باقی می گذارد. زمانی می توان استفاده کرد که تجسم خاص فقط از مقادیر قالب بندی شده برای کاهش اندازه پاسخ استفاده می کند.
توابع دستکاری داده ها
چندین نوع عملگر و توابع وجود دارد که به شما امکان می دهد داده ها را در یک ستون دستکاری یا جمع آوری کنید، یا داده ها را در ستون ها مقایسه یا ترکیب کنید. مثالها عبارتند از sum() (برای افزودن همه مقادیر در یک ستون)، max (برای یافتن بزرگترین مقدار در یک ستون)، و + (برای جمع کردن مقادیر دو ستون با هم در یک ردیف).
برخی از توابع می توانند در هر بند ظاهر شوند. برخی می توانند در زیر مجموعه ای از بندها ظاهر شوند. این در زیر مستند شده است.
مثال:
با توجه به این جدول ... | اگر این پرس و جو را اعمال کنیم ... | این نتیجه را می گیریم. | ||||||||||||||||||||||||
| select upper(name), year(startDate) |
|
توابع دستکاری داده های زیر توسط زبان جستجوی Google Visualization API تعریف شده است:
توابع تجمع
توابع تجمیع یک شناسه ستونی ارسال میشوند و یک عمل را در تمام مقادیر در هر گروه انجام میدهند (گروهها group by
یا pivot
clauses یا تمام ردیفها در صورت عدم استفاده از آن بندها مشخص میشوند).
مثال ها:
select max(salary) // Returns a table with one column and one row. select max(salary) group by dept // Returns a table with the max salary for each dept column value. select max(salary) pivot dept // Returns a one-row table with a column for each dept, // and the max salary for that department.
توابع تجمع را می توان در عبارت های select
، order by
، label
، format
استفاده کرد. آنها نمیتوانند در عبارتهای where
, group by
, pivot
, limit
, offset
یا options
ظاهر شوند.
در اینجا توابع تجمع پشتیبانی شده وجود دارد:
نام | شرح | انواع ستون های پشتیبانی شده | نوع برگشت |
---|---|---|---|
avg() | مقدار متوسط تمام مقادیر موجود در ستون را برای یک گروه برمیگرداند. | number | number |
count() | تعداد عناصر موجود در ستون مشخص شده برای یک گروه را برمی گرداند. سلول های پوچ شمارش نمی شوند. | هر نوعی | number |
max() | حداکثر مقدار را در ستون برای یک گروه برمیگرداند. تاریخ ها با کوچکتر بودن قبلی مقایسه می شوند، string ها بر اساس حروف الفبا و با حساسیت به حروف بزرگ مقایسه می شوند. | هر نوعی | همان نوع ستون |
min() | حداقل مقدار را در ستون برای یک گروه برمیگرداند. تاریخ ها با کوچکتر بودن قبلی مقایسه می شوند، string ها بر اساس حروف الفبا و با حساسیت به حروف بزرگ مقایسه می شوند | هر نوعی | همان نوع ستون |
sum() | مجموع تمام مقادیر موجود در ستون را برای یک گروه برمی گرداند. | number | number |
توجه: توابع تجمع فقط می توانند یک شناسه ستون را به عنوان آرگومان بگیرند:
max(startDate) // OK min(firstScore) + min(secondScore) // OK max(year(startDate)) // INVALID. max requires column ID sum(salary + perks) // INVALID. sum requires column ID.
توابع اسکالر
توابع اسکالر بیش از صفر یا چند پارامتر عمل می کنند تا مقدار دیگری تولید کنند. توابع اسکالر را می توان هر عبارتی که ارزیابی می کند به پارامتر از نوع مناسب منتقل کرد. توجه داشته باشید که این انواع، انواع تعریف شده در بخش Literals این سند هستند که ممکن است کمی متفاوت از اشیاء جاوا اسکریپت با نام مشابه باشند.
توجه داشته باشید که نام ستون با بسته بندی آن با یک تابع اسکالر تغییر می کند.
توابع اسکالر می توانند هر چیزی را که به یک مقدار واحد ارزیابی می کند به عنوان پارامتر در نظر بگیرند:
year(max(startDate)) datediff(now(), todate(1234567890000))
توابع اسکالر را می توان در هر یک از بندهای زیر استفاده کرد: select
، where
، group by
، pivot
، order by
، label ,
و format
.
نام | |
---|---|
year() | مقدار سال را از یک مقدار تاریخ یا تاریخ زمان برمیگرداند. به عنوان مثال: پارامترها: یک پارامتر از نوع date یا datetime نوع برگشت: number |
month() | مقدار ماه مبتنی بر صفر را از یک مقدار تاریخ یا تاریخ زمان برمیگرداند. به عنوان مثال: پارامترها: یک پارامتر از نوع date یا datetime نوع برگشت: number |
day() | روز ماه را از یک مقدار پارامترها: یک پارامتر از نوع date یا datetime نوع برگشت: number |
hour() | مقدار ساعت را از مقدار datetime یا پارامترها: یک پارامتر از نوع datetime یا timeofday نوع برگشت: number |
minute() | مقدار دقیقه را از یک مقدار پارامترها: یک پارامتر از نوع datetime یا timeofday نوع برگشت: number |
second() | مقدار دوم را از مقدار پارامترها: یک پارامتر از نوع datetime یا timeofday نوع برگشت: number |
millisecond() | بخش میلیثانیهای از مقدار پارامترها: یک پارامتر از نوع datetime یا timeofday نوع برگشت: number |
quarter() | سه ماهه را از یک مقدار پارامترها: یک پارامتر از نوع date یا datetime نوع برگشت: number |
dayOfWeek() | روز هفته را از یک مقدار پارامترها: یک پارامتر از نوع date یا datetime نوع برگشت: number |
now() | یک مقدار datetime برمیگرداند که نشاندهنده پارامترها: ندارد نوع بازگشت: datetime |
dateDiff() | تفاوت روز بین دو مقدار پارامترها: دو پارامتر نوع date یا datetime (می تواند یکی از هر کدام باشد) نوع برگشت: number |
toDate() | مقدار داده شده را به مقدار
پارامترها: یک پارامتر از نوع date ، datetime ، یا number نوع بازگشت: date |
upper() | پارامترها: یک پارامتر از نوع string نوع بازگشت: string |
lower() | پارامترها: یک پارامتر از نوع string نوع بازگشت: string |
عملگرهای حسابی
شما می توانید از عملگرهای حسابی برای انجام عملیات ریاضی بر روی هر چیزی که به عدد واحد ارزیابی می شود (یعنی خروجی توابع مجموع مناسب، عملگرها یا ثابت ها) استفاده کنید.
مثال ها:
select empSalary - empTax select 2 * (max(empSalary) / max(empTax))
عملگرهای زیر تعریف شده اند:
نام | شرح | مولفه های | نوع برگشت |
---|---|---|---|
+ | مجموع دو مقدار number را برمیگرداند. | دو number s | number |
- | تفاوت بین دو مقدار number را برمیگرداند. | دو number s | number |
* | حاصل ضرب دو number s را برمیگرداند. | دو number s | number |
/ | ضریب دو number s را برمی گرداند. تقسیم بر صفر عدد را باطل می کند. | دو number s | number |
عناصر زبان
تحت اللفظی
Literals مقادیری هستند که برای مقایسه یا انتساب استفاده می شوند. لفظ ها می توانند string
ها، اعداد، مقادیر بولی یا انواع مختلف تاریخ/زمان باشند. در اینجا چند نمونه از لفظ استفاده شده در نحو پرس و جو آورده شده است:
where startDate < date "2008-03-18" // date "2008-03-18" is a date literal
limit 30 // 30 is a numeric literal
format salary '#,##0.00', isSenior 'not yet:of course!' // '#,##0.00' and 'not yet:of course!' are both string
literals
در اینجا فرمتهای هر نوع لفظ وجود دارد:
-
string
یک
string
تحت اللفظی باید در یک یا دو گیومه قرار گیرد. مثالها:"fourteen" 'hello world' "It's raining"
.-
number
- حروف عددی با نماد اعشاری مشخص می شوند. مثالها:
3 3.0 3.14 -71 -7.2 .6
-
boolean
- لفظهای بولی یا
true
یاfalse
هستند. -
date
- از کلمه کلیدی
date
و به دنبال آن یکstring
تحت اللفظی در قالبyyyy-MM-dd
استفاده کنید. به عنوان مثال:date "2008-03-18"
. -
timeofday
- از کلمه کلیدی
timeofday
و به دنبال آن یکstring
با فرمتHH:mm:ss[.SSS]
استفاده کنید. مثال:timeofday "12:30:45"
. -
datetime
- یک تاریخ و یک زمان، با استفاده از کلمه کلیدی
datetime
یاtimestamp
کلمه کلیدی و به دنبال آن یکstring
تحت اللفظی در قالبyyyy-MM-dd HH:mm:ss[.sss]
. مثال:datetime '2008-03-18 12:30:34.123'
شناسه ها
شناسه ها (یا شناسه ها) string
متنی هستند که ستون ها را مشخص می کنند.
مهم: اگر شناسه شما
- دارای فضاهای
- یک کلمه محفوظ است ،
- حاوی هر چیزی جز نویسههای الفبایی یا زیرخط ([a-zA-Z0-9_])، یا
- با یک رقم شروع می شود
باید با نقل قول های پشتی (نه نقل قول های تکی) احاطه شود.
در غیر این صورت، نیازی به ذکر شناسه شما نیست. (توجه داشته باشید که همه کلمات کلیدی تعریف شده توسط نحو، کلمات رزرو شده نیستند؛ بنابراین، برای مثال، میتوانید از "max" به عنوان یک شناسه استفاده کنید، بدون اینکه نیازی به نقل قول از آن را داشته باشید.)
مثالها: col1 employee_table `start date` `7 days traffic` `select`
توصیه میکنیم شناسهای را انتخاب نکنید که به نقلقولهای برگشتی نیاز دارد، زیرا فراموش کردن استفاده از نقلقولهای پشتی یا بهطور تصادفی استفاده از «سینگل نقل قول» بهجای «کوتیشنهای برگشتی» آسان است. اینها اشتباهات رایجی هستند و اغلب اشکال زدایی آنها سخت است.
حساسیت به حروف کوچک
شناسه ها و حرف های رشته ای به حروف بزرگ و کوچک حساس هستند. تمام عناصر زبان دیگر به حروف بزرگ و کوچک حساس نیستند.
کلمات رزرو شده
کلمات رزرو شده زیر در صورت استفاده به عنوان شناسه باید نقل قول شوند:
and asc by date datetime desc false format group label limit not offset options or order pivot select timeofday timestamp true where