PDA

View Full Version : سوال: تبدیل کد همراه با Group By به بدون آن !



HosseinProgrammer
سه شنبه 17 دی 1387, 13:28 عصر
سلام.
می خواستم بدونم چطور میشه کدی که در اون از Group By استفاده شده، رو بدون استفاده از Group By نوشت.
مثلا دو مثال زیر:

مثال اول:


Select name , SUM(Tedad)
From MyTable
Group By name


مثال دوم:


Select name
From MyTable
Group By name
Having Count(*) > 1

AminSobati
سه شنبه 17 دی 1387, 16:52 عصر
سلام،
Group By چه مشکلی برای شما ایجاد میکنه؟

HosseinProgrammer
چهارشنبه 18 دی 1387, 10:26 صبح
مشکلی ایجاد نمیکنه. میخوام بدونم که بدون استفاده از group by چطور میشه دستوری را نوشت؟ (راستش جهت آمادگی بیشتر برای امتحان درس پایگاه داده ها !)

جایی خونده بودم که Group By و Having افزونه هستند. یعنی می توان دستوراتی که با آنها نوشته می شوند را با دستورات دیگر SQL نوشت. به خاطر همین به این فکر افتادم.

با تشکر

farrokhpey.mahdi
چهارشنبه 18 دی 1387, 11:04 صبح
منظورتون رو واضح تر بگید خوب !!!
group by همونطور که مشخصه برای گروه بندی استفاده می شه و زمانی استفاده می شه که بخوایم عملیات خاصی مثل جمع و تعداد و میانگین رو روی یک یا چند ستون انجام بدیم ، که مثلا در دستور اول ابتدا داده هایی که داریای name مشترک هستند در گروه های مجزا دسته بندی میشن و سپس در هر گروه مجموع تعداد محاسبه و برگردونده میشه ، در ضمن تمام فیلدهایی که جلوی select نوشته شده به جز اونهایی که داخل توابع محاسباتی مثل sum و count و ... نوشته شده در گروه بندی میاد .
در دستور دوم هم having عملیات دیگری رو در کنار group by انجام می ده به این صورت که شرط خاصی رو روی هر گروه جداگانه اعمال می کنه ، مثل where با این تفاوت که where روی تمام داده ها ولی having داخل دسته ها اعمال میشه و به عبارت دیگه داده ها رو فیلتر می کنه ...
بسه یا بازم بگم ؟!!
اگه فکر می کنید اشتباهه بگین تا یاد بگیرم ، مرسی

HosseinProgrammer
چهارشنبه 18 دی 1387, 21:57 عصر
با تشکر از توضیحات شما و اطمینان از صحت آنها ، منظور من اصلا این نبود !

* سوال من به صورت واضح تر :

من میخوام از Group By استفاده نکنم و همون خروجی رو که الان (با Group By) میگیرم رو داشته باشم. (منظورم مثلا استفاده از Select تودرتو و یا روش های دیگه است که البته من نمیدونم چطور این تبدیل امکان پذیره و روش چیه. من روش رو میخوام.)

با تشکر

farrokhpey.mahdi
پنج شنبه 19 دی 1387, 09:03 صبح
از group by برای مقاصد گوناگون استفاده میشه ، بعضی از اونها رو مثلا تعداد رو بدون اون هم میشه به دست آورد اما نه همه اونها رو

HosseinProgrammer
پنج شنبه 19 دی 1387, 12:21 عصر
بالاخره به من اگه میشه بگید که آیا دو مثالی که زدم قابل تبدیل هستند یا نه.

اگر بله ، چگونه و کد آن چیست؟ (لطفا کلی گویی نکنید.)

با تشکر از شما

AminSobati
پنج شنبه 19 دی 1387, 20:49 عصر
مشکلی ایجاد نمیکنه. میخوام بدونم که بدون استفاده از group by چطور میشه دستوری را نوشت؟ (راستش جهت آمادگی بیشتر برای امتحان درس پایگاه داده ها !)


دوست عزیزم ممکنه حق با شما باشه و بتونیم هر Query که با Group By نوشته میشه، به روشهای دیگه هم بنویسیم. ولی Performance اونها رو هم باید مد نظر قرار داد. اگر بحث شما فقط سر شدن یا نشدنش هست، احتمالا بله، همیشه چیزی قابل جایگزینی با Group BY وجود داره اما Query کند و پیچیده میشه:



use northwind
go

select count(orderid), customerid from orders
group by customerid
go

select distinct customerid, (select count(orderid) from orders o2 where o1.customerid=o2.customerid)
from orders o1