مرجع زبان پرس و جو (نسخه 0.7)

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 این صفحه توضیح داده شده است.
  • الگوی قالب بندی منبع داده می تواند الگوهای قالب بندی را برای برخی یا همه ستون های خود تعریف کند. شما می توانید این الگو را با گنجاندن یک بند قالب لغو کنید.

جدول استفاده شده در همه نمونه ها:

در سرتاسر این بخش، تمام نمونه های پرس و جو به جدول زیر مراجعه می کنند. سرصفحه ستون ها شناسه های ستون هستند.

name
string
dept
string
lunchTime
timeofday
salary
number
hireDate
date
age
number
isSenior
boolean
seniorityStartTime
datetime
JohnEng12:00:00
1000
2005-03-1935true2007-12-02 15:56:00
DaveEng12:00:00
500
2006-04-1927falsenull
SallyEng13:00:00
600
2005-10-1030falsenull
BenSales12:00:00
400
2002-10-1032true2005-03-09 12:30:00
DanaSales12:00:00
350
2004-09-0825falsenull
MikeMarketing13:00:00
800
2005-01-1024true2007-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:00John
12:00:00Dave
13:00:00Sally
12:00:00Ben
12:00:00Dana
13:00:00Mike

جایی که

از عبارت Where فقط برای 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' مطابقت دارد.
  • 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 (برای یافتن بزرگترین مقدار در یک ستون)، و + (برای جمع کردن مقادیر دو ستون با هم در یک ردیف).

برخی از توابع می توانند در هر بند ظاهر شوند. برخی می توانند در زیر مجموعه ای از بندها ظاهر شوند. این در زیر مستند شده است.

مثال:

با توجه به این جدول ... اگر این پرس و جو را اعمال کنیم ... این نتیجه را می گیریم.
نام حقوق مالیات تاریخ شروع
شارون 1000 100 1/1/2009
آویتال 2000 200 1/21/2008
موران 3000 300 2/12/2008
select upper(name), year(startDate)
نام سال (تاریخ شروع)
AVITAL 2008
موران 2008
شارون 2009

توابع دستکاری داده های زیر توسط زبان جستجوی 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 عبارت‌های 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()

مقدار سال را از یک مقدار تاریخ یا تاریخ زمان برمی‌گرداند. به عنوان مثال: year(date "2009-02-05") سال 2009 را برمی گرداند.

پارامترها: یک پارامتر از نوع date یا datetime
نوع برگشت: number
month()

مقدار ماه مبتنی بر صفر را از یک مقدار تاریخ یا تاریخ زمان برمی‌گرداند. به عنوان مثال: month(date "2009-02-05") 1 را برمی گرداند. توجه: ماه ها بر اساس 0 هستند، بنابراین تابع 0 را برای ژانویه، 1 را برای فوریه و غیره برمی گرداند.

پارامترها: یک پارامتر از نوع date یا datetime
نوع برگشت: number
day()

روز ماه را از یک مقدار date یا تاریخ برمی‌گرداند. به عنوان مثال: day(date "2009-02-05") 5 را برمی گرداند.

پارامترها: یک پارامتر از نوع date یا datetime
نوع برگشت: number
hour()

مقدار ساعت را از مقدار datetime یا timeofday . به عنوان مثال: hour(timeofday "12:03:17") 12 را برمی گرداند.

پارامترها: یک پارامتر از نوع datetime یا timeofday
نوع برگشت: number
minute()

مقدار دقیقه را از یک مقدار datetime یا timeofday . برای مثال: minute(timeofday "12:03:17") 3 را برمی گرداند.

پارامترها: یک پارامتر از نوع datetime یا timeofday
نوع برگشت: number
second()

مقدار دوم را از مقدار datetime یا timeofday . برای مثال: second(timeofday "12:03:17") 17 را برمی گرداند.

پارامترها: یک پارامتر از نوع datetime یا timeofday
نوع برگشت: number
millisecond()

بخش میلی‌ثانیه‌ای از مقدار datetime یا timeofday را برمی‌گرداند. به عنوان مثال: millisecond(timeofday "12:03:17.123") 123 را برمی گرداند.

پارامترها: یک پارامتر از نوع datetime یا timeofday
نوع برگشت: number
quarter()

سه ماهه را از یک مقدار date یا datetime . به عنوان مثال: quarter(date "2009-02-05") 1 را برمی گرداند. توجه داشته باشید که ربع ها بر اساس 1 هستند، بنابراین تابع 1 برای سه ماهه اول، 2 برای دومین و غیره برمی گرداند.

پارامترها: یک پارامتر از نوع date یا datetime
نوع برگشت: number
dayOfWeek()

روز هفته را از یک مقدار date یا datetime . به عنوان مثال: dayOfWeek(date "2009-02-26") 5 را برمی گرداند. توجه داشته باشید که روزها بر اساس 1 هستند، بنابراین تابع 1 را برای یکشنبه، 2 را برای دوشنبه و غیره برمی گرداند.

پارامترها: یک پارامتر از نوع date یا datetime
نوع برگشت: number
now()

یک مقدار datetime برمی‌گرداند که نشان‌دهنده زمان تاریخ فعلی در منطقه زمانی GMT ​​است.

پارامترها: ندارد
نوع بازگشت: datetime
dateDiff()

تفاوت روز بین دو مقدار date یا تاریخ زمان را datetime . توجه: فقط قسمت های date مقادیر در محاسبه استفاده می شود و بنابراین تابع همیشه یک مقدار صحیح را برمی گرداند. به عنوان مثال: dateDiff(date "2008-03-13", date "2008-02-12") 29 را برمی گرداند. dateDiff(date "2009-02-13", date "2009-03-13") -29 را برمی گرداند. مقادیر زمانی قبل از مقایسه کوتاه می شوند.

پارامترها: دو پارامتر نوع date یا datetime (می تواند یکی از هر کدام باشد)
نوع برگشت: number
toDate()

مقدار داده شده را به مقدار date تبدیل می کند.

  • با توجه به date ، همان مقدار را برمی گرداند.
  • با توجه به datetime ، قسمت date را برمی گرداند. به عنوان مثال: toDate(dateTime "2009-01-01 12:00:00") "2009-01-01" را برمی گرداند.
  • با توجه به numberdate N میلی ثانیه پس از Epoch را برمی گرداند. دوره به عنوان 1 ژانویه 1970، 00:00:00 GMT تعریف شده است. به عنوان مثال: toDate(1234567890000) "2009-02-13" را برمی گرداند.
پارامترها: یک پارامتر از نوع date ، datetime ، یا number
نوع بازگشت: date
upper()

string داده شده را با حروف بزرگ برمی گرداند. برای مثال: upper("foo") "FOO" را برمی گرداند.

پارامترها: یک پارامتر از نوع string
نوع بازگشت: string
lower()

string داده شده را با حروف کوچک برمی گرداند. برای مثال: lower("Bar") "bar" را برمی گرداند.

پارامترها: یک پارامتر از نوع 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