2011-12-20 7 views
0

私は次の表がありますので、のMySQL - GROUP_CONCAT/wの複雑なクエリ...シングル表

location | total | display 
-------------------------- 
Toronto | 3  | 9999999 - 2, 7777777 - 1 
Quebec | 1  | 7777777 - 1 

id | billingno | location 
------------------------- 
1 | 9999999 | Toronto 
2 | 9999999 | Toronto 
3 | 7777777 | Toronto 
4 | 7777777 | Quebec 

を、私は私にこのように見えたものを生成するクエリを必要としますそれは場所別にグループ分けされ、その場所の課金の総数が表示され、表示された列には、各請求金額とその場所にあった回数が表示されます。私はいくつかの時間のためにこれを書き込もうとしてきた、私の最も近い試みはこれです:それは私の人生のために、ディスプレイの下に、各billingno年代の数をカウントする方法を見つけ出すことができない私に、私は私を除いて必要なすべてを提供します

SELECT location, COUNT(*) AS total, GROUP_CONCAT(DISTINCT CAST(CONCAT(CONVERT(billingno,CHAR(16)), ' - ', THIS_COUNT_PART_FOR_EACH_LOCATION_IN_DISPLAY_DOESNT_WORK)AS CHAR) 
SEPARATOR ' - ') AS display 
FROM table GROUP BY location 
ORDER BY COUNT(*) DESC 

。 COUNT()を使用すると、グループ化に関するエラーが表示されます。助けてください!

ああ、テキストに表示され、phpMyAdminのBLOBではないので、convert to charを使用する必要がありました。再度、感謝します!

+0

申し訳ありませんが、あなたのコードは判読できません。それを修正してください。コードブロックにテーブルを追加することもできます。 – piotrekkr

+0

修正 - 私はそれをコピー/貼り付け、それはすべて地獄になって、より良いはずです - ごめんなさい! –

答えて

1

サンプルデータ:

create table location (
    id int, 
    billingno varchar(10), 
    location varchar(10) 
); 

insert into location 
select 1, '9999999', 'Toronto' union 
select 2, '9999999', 'Toronto' union 
select 3, '7777777', 'Toronto' union 
select 4, '7777777', 'Quebec' ; 

問合せ:

select 
    location, 
    sum(qty) as total, 
    group_concat(concat(billingno, ' - ', cast(qty as char(7))) 
     order by qty desc separator ', ' 
    ) as display 
from (
    select billingno, location, count(*) as qty 
    from location 
    group by billingno, location 
) t 
group by location 
order by total desc 

結果:

location total display 
Toronto  3  9999999 - 2, 7777777 - 1 
Quebec  1  7777777 - 1 
+0

あなたは生命の救助者です! ありがとう、非常に。 –

0

どのように、この程度

SELECT table.location, 
     SUM(LocationCount) AS Total, 
     GROUP_CONCAT(CAST(CONCAT(CONVERT(billingno,CHAR(16)), ' - ', THIS_COUNT_PART_FOR_EACH_LOCATION_IN_DISPLAY_DOESNT_WORK)AS CHAR) 
SEPARATOR ' - ') AS display 
FROM table 
    LEFT JOIN 
    (SELECT location , COUNT(id) AS LocationCount 
     FROM table 
     GROUP BY location) t on t.location = table.location 
GROUP BY location 
ORDER BY SUM(LocationCount) DESC 
0
SELECT location, SUM(total) AS total, GROUP_CONCAT(CONCAT(billingno, ' - ', billing_count)) AS display 
FROM (

SELECT location, COUNT(billingno) AS total, billingno, COUNT(billingno) AS billing_count 
FROM billing 
GROUP BY location, billingno 
ORDER BY COUNT(*) DESC 
) AS t 
GROUP BY location