2013-08-28 30 views
1

我正在做一個簡單的MySQL查詢,並希望使用GROUP爲我提供一組結果,而不必在每次運行查詢時註銷各行的註釋。我對是否在SELECT或WHERE子句中使用GROUP感到困惑。在MySQL中分組的結果

SELECT COUNT(*) FROM 
Users AS u 
-- Northern Ireland 
WHERE u.postcode_area IN ('BT') 
-- WALES 
-- WHERE u.postcode_area IN ('CF','CH','GL') 
-- Scotland 
-- WHERE u.postcode_area IN ('AB','DD','DG','EH','FK') 

因此,作爲一個結果,我想看到

  • 北愛爾蘭| 25678
  • Wales | 34543
  • 蘇格蘭| 4567
+0

好,你肯定有'BT'和'北愛爾蘭'和'CF','CH','GL'和'Wales'之間的關係表,是嗎?那麼你能展示你的結構的一部分嗎? –

+0

嗨,謝謝你的回覆。這裏沒有關係表,北愛爾蘭,威爾士和蘇格蘭就是標籤。謝謝 – Boomfelled

+0

我仍然是一個關係表的好主意。它將保持您的查詢可維護,並且您永遠不會知道您何時仍可能需要其他地方的相同數據。 –

回答

2

你可以做象下面這樣:

SELECT 
    (CASE 
     WHEN u.postcode_area IN ('BT') THEN 'Northern Ireland' 
     WHEN u.postcode_area IN ('CF','CH','GL') THEN 'WALES' 
     WHEN u.postcode_area IN ('AB','DD','DG','EH','FK') THEN 'Scotland' 
     ELSE 'other') AS country, 
    COUNT(*) 
FROM 
    Users AS u 
GROUP BY country 
+0

太好了,非常感謝,只是錯過了CASE的END。 ;-) – Boomfelled

1

你可以簡單地嘗試這樣的:

select 
    if(u.postcode_area in ('BT'), 'Northern Ireland', 
    if(u.postcode_area in ('CF','CH','GL'), 'Wales', 
     if(u.postcode_area in ('AB','DD','DG','EH','FK'), 'Scotland', 
     'Unknown' 
    ) 
    ) 
) as label 
    , count(*) 
from Users as u 
group by label 

編輯:

順便說一句,這將是整理器有一個包含postcode_area鏈接到標籤的表格。

北愛爾蘭| BT
Wales | CF
Wales | CH
Wales | GL
蘇格蘭| AB
蘇格蘭| DD
蘇格蘭| DG
蘇格蘭| EH
蘇格蘭| FK

那麼你的查詢是:

select 
    pl.label, 
    count(*) as count 
from 
    Users as u 
    inner join containing postcode_area_label as pl 
    on u.postcode_area = pl.postcode_area 
group by 
    pl.label 
+0

xdazz的Case看起來比我使用的嵌套if更加整潔。對於其餘的它是一樣的 –

+0

謝謝,我們的數據庫是建立在你的建議。我只需要一個GROUP子句的例子。再次感謝您的輸入。 – Boomfelled

1

這將給所有三種結果在同一時間:

SELECT ireland.ireland_count, wales.wales_count, scotland.scotland_count FROM 
(SELECT COUNT(*) as ireland_count FROM Users WHERE postcode_area IN ('BT')) as ireland 
JOIN 
(SELECT COUNT(*) as wales_count FROM Users WHERE postcode_area IN ('CF','CH','GL')) as wales 
JOIN 
(SELECT COUNT(*) as scotland_count FROM Users WHERE postcode_area IN ('AB','DD','DG','EH','FK')) as scotland; 

輸出將是這樣的:

ireland_count | wales_count | scotland_count 
25678   | 34543   | 4567