2010-04-02 137 views
6

我有兩列的表:我可以在一個Mysql查詢中執行此操作嗎?

column A column B 
    1    2 
    1    2 
    2    1 

我想回到那些總= 3總三三兩兩= 3

的最好我能想出是兩個查詢,像這樣:

SELECT sum(CASE WHEN columnA =1 THEN 1 ELSE 0 END) 
    + sum(CASE WHEN columnB =1 THEN 1 ELSE 0 END) 

SELECT sum(CASE WHEN columnA =2 THEN 1 ELSE 0 END) 
    + sum(CASE WHEN columnB =2 THEN 1 ELSE 0 END) 

這可以在一個查詢中完成嗎? 感謝

回答

1
SELECT SUM(IF(columnA=1, 1, 0) + IF(columnB=1, 1, 0)) as ones, 
    SUM(IF(columnA=2, 1, 0) + IF(columnB=2, 1, 0)) as twos 
FROM myTable; 

C.

+0

謝謝你的解決方案,我只是有能力的支持 – bsandrabr 2010-04-02 22:58:09

-1

一般情況下,你會算的東西,像這樣:

SELECT columnA, COUNT(*) FROM myTable 
GROUP BY columnA 

讓所有不同值的計數columnA。

+0

+1我想補充'WHERE columnA IN(1,2 )' – soulmerge 2010-04-02 22:18:21

0

要在一個查詢中獲得所有內容,我會嘗試這樣的事情。

SELECT Result.Val, COUNT(Result.Val) AS Count 
FROM (
    SELECT ColumnA AS Val 
    FROM TableName 

    UNION 

    SELECT ColumnB AS Val 
    FROM TableName 
) AS Result 
GROUP BY Result.Val 
+0

我得到這個語法錯誤。我不知道我是否理解正確。結果和val用於asis? – bsandrabr 2010-04-02 22:43:36

+0

讓我看看。我習慣於在SQL Server中工作,所以我可能對MySQL如何轉化有點樂觀。 – mcliedtk 2010-04-02 22:56:43

+0

我確認這在MS SQL Server中有效,但是我無法在MySQL中測試它。因此,任何可能對此答案感興趣的人,請注意,此解決方案可能僅適用於SQL Server。如果它對別人有幫助,我會放在這裏。 – mcliedtk 2010-04-02 23:03:09

2

您沒有指定是否要將其作爲2行或2行作爲一行。

兩排有些明顯(只是工會一起全部來自各列中的值,並計算(1)通過對工會的結果值組。所以我會假設你想要做一個行

如果你只有1秒或2秒,這很簡單:

SELECT SUM(A+B-2) 'twos', SUM(4-A-B) 'ones' FROM myTable 
+0

你能解釋一下,對於我,我沒有得到4 – bsandrabr 2010-04-02 22:27:41

+0

如果A = B = 1,那麼第一個和將包含0(因此不會計算到兩個),第二個和將包含2(因此計算2個) – DVK 2010-04-02 22:39:00

+0

如果A = B = 2,那麼第一個和將包含2(因此計算2個二)並且第二個和將包含0(因此計數爲零) – DVK 2010-04-02 22:39:32

-1
SELECT COUNT(*) FROM table WHERE columnA=1 or columnB=1 
+0

謝謝,但那兩個呢? – bsandrabr 2010-04-02 22:46:33

相關問題