View Full Version : اشکال در کوری
ali_sadri
یک شنبه 17 خرداد 1388, 18:35 عصر
کسی می دونه اشکال این کوری چیه
SELECT sal,count(*) ,
(select count(*) from table1 where jens='زن' and kind='کارمند ')
(select count(*) from table1 where jens='مرد' and kind='کارمند ')
From table1
Where kind='کارمند'
Group by sal
نتیجه
85 4 5 5
86 3 5 5
87 3 5 5
88 4 5 5
نتیجه مورد انتظار
85 4 2 2
86 3 1 2
87 3 2 1
88 4 4 0
Saeed_m_Farid
یک شنبه 17 خرداد 1388, 21:24 عصر
کسی می دونه اشکال این کوری چیهسلام، اشکال شما اینه که تو subquery هاتون group by sal نکردین؛ ولی همونطورکه میدونید تو subquery شما نمیتونید به این روش عمل کنید، از طرف دیگه بنظر من بهتره بجای = هم از LIKE استفاده کنید.
با این توضیحات SQL های شما به ترتیب بصورت زیر میشن :
======================================
SELECT sal, COUNT(jens) AS c_j
FROM Table1
WHERE (kind LIKE '%کارمند%')
GROUP BY sal
======================================
SELECT sal, COUNT(jens) AS count_zan
FROM Table1
WHERE (jens = '%زن%') AND (kind LIKE '%کارمند%')
GROUP BY ALL sal
======================================
SELECT sal, COUNT(jens) AS count_mard
FROM Table1
WHERE (jens LIKE '%مرد%') AND (kind LIKE '%کارمند%')
GROUP BY ALL sal
======================================
که برای ترکیب اونا تو یه کوئری باید (بنظر من) اونا رو INNER JOIN کنید و البته زمانیکه سال کوئری ها یکسان هست؛ (دلیل استفاده از ALL هم برای اینه که اگه تو یه سال بخصوص رکوردی برای SubQuery موردنظر پیدا نشه، تو INNER JOIN حذف نشه ...) یعنی میشه این :
SELECT m.sal, m.count_mard, z.count_zan, a.c_j AS count_all
FROM
(SELECT sal, COUNT(jens) AS count_mard
FROM Table1
WHERE (jens LIKE '%مرد%') AND (kind LIKE '%کارمند%')
GROUP BY ALL sal) m
INNER JOIN
(SELECT sal, COUNT(jens) AS c_j
FROM Table1
WHERE (kind LIKE '%کارمند%')
GROUP BY ALL sal) a ON m.sal = a.sal
INNER JOIN
(SELECT sal, COUNT(jens) AS count_zan
FROM Table1
WHERE (jens = '%زن%') AND (kind LIKE '%کارمند%')
GROUP BY ALL sal) z ON a.sal = z.salامیدوارم دوستان اگه راه بهتری سراغ دارن بگن.
با تشکر
free_user
یک شنبه 17 خرداد 1388, 22:55 عصر
سلام
فکر کنم روش راحتتر و قابل فهم تر بصورت زیر باشه و راحت می تونی اونو متوحه بشی و تغییر بدی
SELECT sal, SUM(Count_Mard ) AS Count_Mard, SUM(Count_Zan ) AS Count_Zan, SUM(C_J ) AS C_J
FROM (
SELECT sal
,COUNT(jens ) AS count_mard
,0 AS Count_Zan
,0 AS C_J
FROM Table1
WHERE (jens LIKE '%مرد%' ) AND (kind LIKE '%کارمند%' )
GROUP BY ALL sal ) m
UNION ALL
SELECT sal
,0 AS count_mard
,0 AS Count_Zan
,COUNT(jens ) AS C_J
FROM Table1
WHERE (kind LIKE '%کارمند%' )
GROUP BY ALL sal
UNION ALL
SELECT sal
,0 AS count_mard
,COUNT(jens ) AS Count_Zan
,0 AS C_J
FROM Table1
WHERE (jens = '%زن%' ) AND (kind LIKE '%کارمند%' )
GROUP BY ALL sal
) A
GROUP BY Sal
امیدوارم عذرخواهی منو بپذیرید
محمد سلیم آبادی
جمعه 27 آذر 1388, 23:34 عصر
SELECT sal,
sum(case when kind='کارمند ' then 1 else 0 end) as [countAll],
sum(case when jens='زن'and kind='کارمند ' then 1 else 0 end) as [countWomen],
sum(case when jens='مرد'and kind='کارمند ' then 1 else 0 end) as [countMen]
From table1
Group by sal
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.