2010-03-12 20 views
2

我有一個表(蘋果)包含的組合總和:使得兩列

cid date_am date_pm 
---------------------- 
1  1  1 
2  2  1 
3  1  3 
1  1  2 

我問一個問題早(嚴重)有關我將如何排名的客戶的人的數量的順序(1 ) 他們有。解決的辦法是(基於一列):

SELECT cid, sum(date_pm) AS No_of_ones 
FROM apples 
WHERE date_am =1 
GROUP BY cid 
ORDER BY no_of_ones DESC 

此爲一列的偉大工程,但我會怎麼做了兩列的總和相同。 即。

SELECT cid, sum(date_pm) AS No_of_ones 
FROM apples 
WHERE date_am =1 
add to 
SELECT cid, sum(date_am) AS No_of_ones 
FROM apples 
WHERE date_pm =1 
GROUP by cid 
ORDER by no_of_ones(added) 

希望我已經設法讓足夠清楚你幫-Thanks

回答

1
select cid, sum(case when date_pm = 1 then 1 else 0 end) + sum(case when date_am = 1 then 1 else 0 end) 
from apples 
group by cid 
+0

不是故意對不起 – bsandrabr 2010-03-12 21:49:30

+0

@bsandrabr:可以逆轉如果在施放downvote之後人員已經編輯了他們的答案,則通過單擊upvote箭頭進行downvote。 – 2010-03-12 23:02:47

0
select cid, sum(addone) as total from 
    (select cid, 1 as addone 
    from apples 
    where date_pm = 1 group by cid 
    union 
    select cid, 1 as addone 
    from apples 
    where date_am = 1 group by cid) 
group by cid order by total DESC 

OR

select cid, sum(case when date_am=1 then 1 else 0 end) 
      + sum(case when date_pm=1 then 1 else 0 end) as total 
from apples 
group by CID 
order by total DESC 
+0

感謝這兩個案例的答案,你們都給了非常非常多的謝意 – bsandrabr 2010-03-12 21:58:35