我发表了一个使用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
共享的内容超过file
,file
的内容以_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
?
答案 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'
。如果没有基准测试,很难说哪个会更快。