如何打印逐个语句产生的每个项目

时间:2012-12-16 01:19:48

标签: mysql

我发表了一个使用group by的声明。现在,我需要知道每条记录的详细信息,但我需要在一个声明中执行此操作。

例如:我进行了以下查询,以查询以_1结尾并共享相同number的文件:

SELECT号码,COUNT(*)AS sum domains 从表
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

查询的结果是(number共享的内容超过filefile的内容以_1结尾并分享这个数字):

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

1 个答案:

答案 0 :(得分: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'。如果没有基准测试,很难说哪个会更快。