2013-08-28 42 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