PDA

View Full Version : سوال: برگرداندن رکوردهایی که بیشتر از یک بار تکرار شدن



baran_mehr
سه شنبه 19 شهریور 1387, 17:49 عصر
سلام دوستان عزیز.:قلب:
ایا میشه دستور select رو طوری نوشت که رکورد هایی از جدول رو برگردونه که بیشتر از یکبار تکرار شده باشن .:متفکر:
مثلا رکوردهایی که فیلد نام اونها بیشتر از یک بار تکرار شده باشه.
ممنون:تشویق:

samprp
سه شنبه 19 شهریور 1387, 21:17 عصر
فکر کنم ساده باشه
یه دستورSELECT بنویسید که با استفاد از تابع Count مقدار خروجی رو بشمره .
اون وقت مقدار برگشت داده رو تحلیل کنید .
مثلا : Variable در اینجا مقدار برگشت داده بوده و Column هم فیدل مورد نظر برای شمردن هست .

SELECT COUNT(Column) AS Variable

baran_mehr
سه شنبه 19 شهریور 1387, 21:23 عصر
ممنون داداشی.
چطور باید مقدار برگشتی رو تحلیل کنم.
یعنی چطور باید داخل همون دستور Select تغییر بدمک که خودش رکوردهایی که بیش از یک بار هستن رو جدا کنه و برگردونه که نیاز نباشه من جدا گونه کد بنویسم.ایا میشه

baran_mehr
سه شنبه 19 شهریور 1387, 23:12 عصر
دوست عزیز samprp جان
دستوری که شما گذاشتید برای بر گرداندن تعداد خانه های یک فیلد هست.در صورتی که سوال من خیلی متفاوت با این دستور هست.
در رابطه با این کار نظری ندارید.

رضا عربلو
سه شنبه 19 شهریور 1387, 23:44 عصر
یک همچین چیزی:


SELECT Field1,.... , COUNT(*) AS c FROM Table1 GROUP BY Field1, .... HAVING COUNT(*)>1

baran_mehr
چهارشنبه 20 شهریور 1387, 13:27 عصر
سلام اقای عربلو عزیز ممنون از کمکتون.
من کدم رو مثل کد شما کردم یعنی به این صورت:

SELECT name
FROM EmailTable
GROUP BY name
HAVING (COUNT(name) > 2)
اما یه مشکل دارم اونم اینکه نمیتونم دو تا شرط رو داخلش برسی کنم .ایا میشه دو تا شرط رو برسی کرد داخل Having؟؟؟
من چند بار امتحان کردم دیدم نمیشه برای همین سعی کرم با دستورات تو در توی Select این کار رو انجام بدم
و این کد رو نوشتم اما نمیدونم چرا درست جواب نمیده:

SELECT name
FROM EmailTable
WHERE (SELECT COUNT(*)
FROM EmailTable
WHERE (name = '6' AND email = '12')) > 2
میشه لطف کنید و بگید ایا میشه روی همون Having دو تا شرط رو برسی کرد یا نه؟
اگر هم بگید مشکل دستور Select که نوشتم چیه ممنون میشم.

رضا عربلو
چهارشنبه 20 شهریور 1387, 15:00 عصر
منظورتان را درست متوجه نشدم. چرا دستور زیر را نمی توانید اجرا کنید


SELECT name
FROM EmailTable
WHERE (name = '6' AND email = '12')
GROUP BY name
HAVING COUNT(*)>2

baran_mehr
چهارشنبه 20 شهریور 1387, 15:16 عصر
مرسی داداشی.:بوس::قلب:
این دقیقا همون چیزی بود که میخواستم. فقط یه سوال این * برای چیه؟ چرا نام فیلد رو نمیزارید

COUNT(*)
شاد باشی.ممنون:تشویق:

رضا عربلو
چهارشنبه 20 شهریور 1387, 15:37 عصر
وقتی شما COUNT(name) می نویسید تعداد نامها را می شمارد و وقتی که COUNT(*) می نویسید تعداد رکوردها را می شمارد. در کونری شما چون فقط name را بر می گردونید هیچ تفاوتی بین دو COUNT نمی باشد. ولی اگر از چند فیلد در SELECT تان استفاده کردید. اونوقت ممکن است نتایج متفاوت باشد.