SQL“分组依据”问题 - 我无法选择每一列
Posted
技术标签:
【中文标题】SQL“分组依据”问题 - 我无法选择每一列【英文标题】:SQL "group by" question - I can't select every column 【发布时间】:2010-10-08 01:32:18 【问题描述】:我有一个数据库,其中每一行都有一个 id、一个 URL 和一个 XML。 ID 是唯一的,但 URL 列可以有重复项。 我需要所有的 URL,没有重复,对于每个 URL,我需要 id 和 XML。
如果我只询问 URL 和 ID,我会使用以下查询:
select URL, max(ID) as ID from T1 group by URL
一切都很好。
但是当我还想要 XML 时,我使用以下查询:
select URL, max(ID) as ID, XML from T1 group by URL
我收到以下错误:
ISC ERROR CODE:335544569
ISC ERROR MESSAGE:
Dynamic SQL Error
SQL error code = -104
user name required
我做错了什么?
谢谢,
迪克拉
感谢您的回答。我要补充说明: 如果 URL 重复,我不在乎会返回哪个。 但我需要让它们没有重复,即使行之间的 XML 不同。 有可能吗? 谢谢!
【问题讨论】:
“但我需要让它们没有重复,即使 XML 不同”我很好奇你为什么需要 XML,但不要关心重复的 URL 可能每个都有不同的 XML重复的行,因此您实际上会为检索到的 XML 获得“随机选择” 这是因为 XML 的细节对于两行都是相同的,但它们只会在我不关心的日期和时间的值上有所不同。 【参考方案1】:select id, url, xml
from table1
where id in (
select min(id)
from table1
group by url)
会给你删除重复网址的行(并且只包括重复网址的第一个实例)
【讨论】:
这个查询也会给出有重复的 url(但第一个重复)的结果。如果您只想要不重复的网址,请添加到第二个选择:WHERE count(id) = 1 @klew - 是的,你是对的。据我了解,dikla 想要表格中的所有网址,但不想再次列出任何网址。 @klew - 再想一想,如果你只想要没有重复的 url,那么 dikla 应该包含一个 HAVING 子句而不是 WHERE 子句。所以查询需要: Select id, url, xml from table1 where id in (select min(id) from table1 group by url HAVING count(id) = 1)【参考方案2】:您需要重新阅读您的问题并考虑一下。
您要求提供 URL(可以是重复的),但您不希望重复,并且您还需要 ID(不重复)。样本数据:
1,http://www.google.com
2,http://www.yahoo.com
3,http://www.google.com
在这种情况下,您究竟想返回什么,记住 google 有多个 ID?
XML 也是如此。如果给定 URL 不是唯一的,您需要指定如何为每个 URL 仅获取一个条目,这就是您的查询不起作用的原因。
【讨论】:
【参考方案3】:您没有对列 XML 执行聚合函数,您必须将其包含在您的分组依据中。
请记住,如果每一行的数据都不同,则实际上无法对其进行分组,并且您将无法获得所需的结果,尽管它们是您向数据库询问的结果 :)。
【讨论】:
【参考方案4】:select urlMaxId.id, urlMaxId.url, table1.html from (select url, max(id) id from table1 group by url) urlMaxId inner join table1 on urlMaxId.id = table1.id
【讨论】:
以上是关于SQL“分组依据”问题 - 我无法选择每一列的主要内容,如果未能解决你的问题,请参考以下文章