2015-06-17 50 views
0

我需要在這個查詢中得到一個結果。如何對mysql中的數據進行數次計數?

Select count(*) from users where cardnumber IN (1,2,3,1,2); 

在表用戶中;

Username cardnumber 
      A   1 
      B   2 
      C   3 

我需要得到結果爲「5」,因爲我想查詢計數2次「1」。原因; IN內有雙「1」...但是我得到的結果只是「3」,因爲在「1,2,3」之後它不再計數「1,2」。我希望我能解釋。我怎樣才能做到這一點?謝謝

+0

這看起來像試圖以某種錯誤的方式做事。如果你能告訴我們你實際上正在努力實現的目標,這將會很有幫助。 –

+0

我的同事問我這個查詢。我知道這很複雜。她希望這個查詢在條件(在cardnumber IN(1,1))的情況下計數雙倍時間。通常,它不計入IN子句中的第二個「1」。 –

+0

真的不清楚你在問什麼。如果有三條記錄與您的WHERE條款匹配,那麼這些記錄的計數將會是3.您認爲它應該是5的什麼? – David

回答

0

我認爲這些sql對你有用。請檢查一下。

SELECT COUNT(*) FROM users a RIGHT JOIN 
(SELECT '1' AS cardnumber 
UNION ALL 
SELECT '2' 
UNION ALL 
SELECT '3' 
UNION ALL 
SELECT '1' 
UNION ALL 
SELECT '2') b ON a.cardnumber = b.cardnumber 

謝謝。

+0

yeap我wil ..現在我與我的同事分享這個查詢.. –

0

既然要算兩個值的兩倍,你可以當

select sum(
case when cardnumber = 1 then 2 
when cardnumber = 2 then 1 
when cardnumber = 3 then 2 END 
) from users 

如何使用和與案件有關這個呢?她可以更改IN列表並添加4

SELECT SUM(c1.cnt + c2.cnt) 
FROM (SELECT count(*) AS cnt from users) c1 
INNER JOIN 
(SELECT count(*) AS cnt 
    from users WHERE cardnumber 
    in (1, 3)) 
c2 ON 1 = 1 
+0

這很好。但是當她在用戶中添加值「4」作爲cardnumber並詢問「4」IN情況時,她應該改變查詢.. –

+0

@AhmetMelihBaşbuğ我更新了答案,這對她來說可能更容易。 – artm

相關問題