2012-12-16 76 views
1

我已經做了一個聲明,使用group by。現在,我需要知道每個記錄的詳細信息,但我需要在一個語句中執行此操作。如何打印每個項目產生的聲明

例如:我做了下面的查詢,查詢有關與_1結束的文件和共享相同的number

SELECT號,COUNT(*)AS sum domains FROM表
WHERE文件LIKE「% _1' GROUP BY數量的具有sum domains> 1

所以,如果我有如下表:

domain  | file  | Number 
------------------------------------  
aaa.com  | aaa.com_1 | 111 
bbb.com  | bbb.com_1 | 222 
ccc.com  | ccc.com_2 | 111 
ddd.com  | ddd.com_1 | 222 
eee.com  | eee.com_1 | 333 
qqq.com  | qqq.com_1 | 333 

查詢的結果是(即超過file共享number以及與_1結束,並分享了這個號碼file(S的計數)):

number | sum domains 
------------------------ 
222 | 2 
333 | 2 

我需要做的是打印出文件名稱。我需要:

number | file 
------------------------ 
222 | bbb.com_1 
222 | ddd.com_1 
333 | eee.com_1 
333 | qqq.com_1 

我怎麼能做到這一點,因爲group by條款不允許我打印file(S)?

+0

尋找GROUP_CONCAT() – Rufinus

+0

我在每個組中都有很多記錄。這根本不起作用。 – user1810868

回答

1

您可以JOIN查詢背靠主表爲子查詢,以獲得原始行和文件名:

SELECT 
    main.number, 
    main.file 
FROM 
    table AS main 
    /* Joined against your query as a derived table */ 
    INNER JOIN (
    SELECT number, COUNT(*) AS sum domains 
    FROM table 
    WHERE RIGHT(file, 2) = '_1' 
    GROUP BY number 
    HAVING sum domains > 1 
    /* Matching `number` against the main table, and limiting to rows with _1 */ 
) as subq ON main.number = subq.number AND RIGHT(main.file, 2) = '_1' 

http://sqlfiddle.com/#!2/cb05b/6

請注意,我已經取代你的LIKE '%_1'RIGHT(file, 2) = '_1'。很難說沒有基準的話哪個更快。

+1

我打算說,如果OP使用'LIKE',他們需要轉義下劃線,因爲它是一個通配符。 ('LIKE'%\ _ 1'') – Kermit

+0

@njk哦,你確實是對的。 –