برگزیده های پرشین تولز

يه سوال اس كيو الي

HADI_EN

Registered User
تاریخ عضویت
20 مارس 2006
نوشته‌ها
242
لایک‌ها
2
سلام يه سوال اس كيو الي داشتم من يه query به اين شكل نوشتم

کد:
select top 2  sum(visit) from visitors  order by code desc

يه error به اين شكل ميده :

کد:
Column name 'visitors.Code' is invalid in the ORDER BY clause because it is not contained in an aggregate function and there is no GROUP BY clause.

كلا توابع محاسباتي با ordey by مشكل دارن مي خواستم بدونم query بالا رو چطوري ميشه اصلاح كرد تا هم فيلد مورد نظر جمع زده بشه هم به صورت desc اين كار انجام بشه؟
 

shervin

ASP.net
کاربر قدیمی پرشین تولز
تاریخ عضویت
26 ژوئن 2005
نوشته‌ها
6,353
لایک‌ها
261
سن
38
محل سکونت
تهران
یه جورایی کوئری شما بی معنیه
اولا که شما داری جمع کل رو میگیری پس ترتیب معنی نداره
ضمنا وقتی sum میگیری دیگه top جایی نداره
و نتیجه شما همون جمع کله نه جمع 2 تا اخری
ینی top 2 رو بزاری یا نزاری جمع کل رو میگیره
 

HADI_EN

Registered User
تاریخ عضویت
20 مارس 2006
نوشته‌ها
242
لایک‌ها
2
یه جورایی کوئری شما بی معنیه
اولا که شما داری جمع کل رو میگیری پس ترتیب معنی نداره
ضمنا وقتی sum میگیری دیگه top جایی نداره
و نتیجه شما همون جمع کله نه جمع 2 تا اخری
ینی top 2 رو بزاری یا نزاری جمع کل رو میگیره

با تشكر از وقتي كه گذاشتيد
دوست عزيز كوئري من بي معني نيست من براي اينكه كوئري اصلي رو خلاصه كنم اينطوري نوشتم در كل هم مشكل من top يا يه چيزي مثل اين نيست سوال من اينه كه چه طوري ميشه توابع محاساباتي رو با order by تركيب كرد تا error بالا بوجود نياد ؟
 

shervin

ASP.net
کاربر قدیمی پرشین تولز
تاریخ عضویت
26 ژوئن 2005
نوشته‌ها
6,353
لایک‌ها
261
سن
38
محل سکونت
تهران
خب دوست من خلاصه نکنید
چرا شما با تاپ هم مشکل دارید
این کوئری که نوشتید رو خود من تست کردم
شما هم تست کن یه بار تاپ 2 رو ور دار یه بارم بزار باشه هر دو بار نتیجه یکسانه
چون اینی که شما میگی نمیاد 2 تا رکورد اخرو بگیره و مجموعو بده
بلکه میاد مجموعو میگیره
و میده به شما ولی چون این کوئری یه جواب داره دوتا نشون نمیده و همون یکیرو نشون میده
نمیدونم متوجه منظورم شدید یا نه
به هر حال شما نمیتونی اینجا از Ordery by استفاده کنی چون داره مجموع کل رو میگیره و معنی نداره که از کدوم ور بگیره
شما اون کوئری اصلی رو بزار اینجا
مگه انشاس که خلاصش کردی؟
4.gif
 

shervin

ASP.net
کاربر قدیمی پرشین تولز
تاریخ عضویت
26 ژوئن 2005
نوشته‌ها
6,353
لایک‌ها
261
سن
38
محل سکونت
تهران
من برات این کوئری رو نوشتم
مجموع n رکورد اخرو میده
میتونی ترتیب رو هم مشخص کنی
کد:
select sum(id) from (select top 5 id from table order by id desc) as id
 

HADI_EN

Registered User
تاریخ عضویت
20 مارس 2006
نوشته‌ها
242
لایک‌ها
2
من برات این کوئری رو نوشتم
مجموع n رکورد اخرو میده
میتونی ترتیب رو هم مشخص کنی
کد:
select sum(id) from (select top 5 id from table order by id desc) as id

با تشكر از شما مشكلم بر طرف شد مرسي از وقتي كه گذاشتيددر مورد اون top هم شما حتي اگه اونم بر داريد باز هم همون error رو ميده

ولي زماني كه تابع sum رو برداريد Error برطرف ميشه خود شما هم همين كارو كرديد:

select top 5 id from table order by id desc

همون طور كه گفتم كلا Error بالا بخاطر اينه كه تابع محاسباتي رو با order by به كار بسته بودم(كه دليل ارورش هم شما گفتيد) ولي شما داريد

به مفهوم sytax من ايراد مي گيريد كه مورد سوال من نبود

بهرحال مرسي
 

shervin

ASP.net
کاربر قدیمی پرشین تولز
تاریخ عضویت
26 ژوئن 2005
نوشته‌ها
6,353
لایک‌ها
261
سن
38
محل سکونت
تهران
خوشحالم مشکل شما حل شد
ولی من باید شمارو متوجه کنم که سینکستون ایراد داره :D
ببخشید اگه گیر دادما ولی میخوام تاپیک کامل تر بشه
شما اینو دادید
 

shervin

ASP.net
کاربر قدیمی پرشین تولز
تاریخ عضویت
26 ژوئن 2005
نوشته‌ها
6,353
لایک‌ها
261
سن
38
محل سکونت
تهران
خوشحالم مشکل شما حل شد
ولی من باید شمارو متوجه کنم که سینکستون ایراد داره :D
ببخشید اگه گیر دادما ولی میخوام تاپیک کامل تر بشه
شما اینو دادید
کد:
select top 2  sum(visit) from visitors  order by code desc
و ارور رو میبینید
حالا عامل ارور رو بر دارید ینی irder by رو
میشه این دستور
کد:
select top 2  sum(visit) from visitors
حالا شما اینو که اجرا کنی یه جواب بهت میده و ارور نمیده درسته؟
حالا از همین دستور تاپ 2 رو ور دار
میشه این دستور
کد:
select  sum(visit) from visitors
حالا اجرا کن
چی شد؟
جواب دو کوئری آخر یکی شد
پس کوئری باللایی ایراد نداشت
ولی نتیجه ای که شما میخوای رو هم نداد
ینی اونی که شما گفتی مجموعه 2 روکورد آخر رو نمیده حتی اگه تاپ 2 رو داشته باشه بازم مجموع تمام رکورد هارو میده
امیدوارم از اینکه سیریش شدم به این مسئله ناراحت نشی
 

alireza sh

مدیر بازنشسته
تاریخ عضویت
2 ژانویه 2006
نوشته‌ها
2,775
لایک‌ها
70
سن
40
محل سکونت
نصف جهان
من نمیدانم چرا این کوئری را اجرا نمیکنید :
کد:
select top 2  sum(visit) from visitors  group by code
 

shervin

ASP.net
کاربر قدیمی پرشین تولز
تاریخ عضویت
26 ژوئن 2005
نوشته‌ها
6,353
لایک‌ها
261
سن
38
محل سکونت
تهران
من نمیدانم چرا این کوئری را اجرا نمیکنید :
کد:
select top 2  sum(visit) from visitors  group by code
اصلا وجود top 2 sum(visit) در یه کوئری از نظر عقلانی هم نتیجه ی مطلوب ایشون رو نمیده
اون کوئری که من نوشتم قشنگ جواب میده
 

alireza sh

مدیر بازنشسته
تاریخ عضویت
2 ژانویه 2006
نوشته‌ها
2,775
لایک‌ها
70
سن
40
محل سکونت
نصف جهان
بله شروین جان
بنده هم با شما هم عقیده هستم
 

HADI_EN

Registered User
تاریخ عضویت
20 مارس 2006
نوشته‌ها
242
لایک‌ها
2
خوشحالم مشکل شما حل شد
ولی من باید شمارو متوجه کنم که سینکستون ایراد داره :D
ببخشید اگه گیر دادما ولی میخوام تاپیک کامل تر بشه
شما اینو دادید
کد:
select top 2  sum(visit) from visitors  order by code desc
و ارور رو میبینید
حالا عامل ارور رو بر دارید ینی irder by رو
میشه این دستور
کد:
select top 2  sum(visit) from visitors
حالا شما اینو که اجرا کنی یه جواب بهت میده و ارور نمیده درسته؟
حالا از همین دستور تاپ 2 رو ور دار
میشه این دستور
کد:
select  sum(visit) from visitors
حالا اجرا کن
چی شد؟
جواب دو کوئری آخر یکی شد
پس کوئری باللایی ایراد نداشت
ولی نتیجه ای که شما میخوای رو هم نداد
ینی اونی که شما گفتی مجموعه 2 روکورد آخر رو نمیده حتی اگه تاپ 2 رو داشته باشه بازم مجموع تمام رکورد هارو میده
امیدوارم از اینکه سیریش شدم به این مسئله ناراحت نشی

نه دوست من چه ناراحتي اتفاقا نتيجه دو كوئري خيلي جالب بود مرسي از حوصله ي كه به خرج داديد
 
بالا