SQL“分组依据”问题-我无法选择每一列

SQL“分组依据”问题-我无法选择每一列,sql,group-by,Sql,Group By,我有一个数据库,其中每一行都有一个id、一个URL和一个XML。 ID是唯一的,但URL列可以有重复项。 我需要所有的URL,没有重复,对于每个URL,我需要id和XML 如果我只询问URL和Id,我将使用以下查询: select URL, max(ID) as ID from T1 group by URL select URL, max(ID) as ID, XML from T1 group by URL 一切都很顺利 但当我还需要XML时,我使用以下查询: select URL, m

我有一个数据库,其中每一行都有一个id、一个URL和一个XML。 ID是唯一的,但URL列可以有重复项。 我需要所有的URL,没有重复,对于每个URL,我需要id和XML

如果我只询问URL和Id,我将使用以下查询:

select URL, max(ID) as ID from T1 group by URL
select URL, max(ID) as ID, XML from T1 group by URL
一切都很顺利

但当我还需要XML时,我使用以下查询:

select URL, max(ID) as ID from T1 group by URL
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可以是重复的,但您不希望重复,而且您还希望ID不重复。样本数据:

1,http://www.google.com
2,http://www.yahoo.com
3,http://www.google.com
在这种情况下,考虑到google有多个ID,您希望返回什么


XML也是如此。如果给定的URL不是唯一的,那么您需要指定如何在每个URL中只获取一个条目,这就是为什么您的查询不起作用。

您需要重新阅读您的问题并思考它

select id, url, xml
from table1
where id in (
    select min(id)
    from table1
    group by url)
您要求的URL可以是重复的,但您不希望重复,而且您还希望ID不重复。样本数据:

1,http://www.google.com
2,http://www.yahoo.com
3,http://www.google.com
在这种情况下,考虑到google有多个ID,您希望返回什么

XML也是如此。如果对于给定的URL它不是唯一的,那么您需要指定如何为每个URL只获取一个条目,这就是为什么您的查询不起作用

select id, url, xml
from table1
where id in (
    select min(id)
    from table1
    group by url)
将为您提供删除了重复URL的行,并且只包含重复URL的第一个实例

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

将为您提供删除了重复URL的行,并且仅包含重复URL的第一个实例

此查询将提供包含重复但第一个重复的URL的结果。如果只需要不重复的URL,请添加到第二个选择:其中countid=1@klew-是的,你是对的。我理解了这个问题,dikla想要表中的所有URL,但不想再次列出任何URL。@klew-再想想,如果您只想要不重复的URL,那么dikla应该包含HAVING子句而不是WHERE子句。因此,查询需要是:Select id、url、xml from table1,其中Select minid from table1 group by url中的id,countid=1。此查询还将给出包含重复项但第一个重复项的url的结果。如果只需要不重复的URL,请添加到第二个选择:其中countid=1@klew-是的,你是对的。我理解了这个问题,dikla想要表中的所有URL,但不想再次列出任何URL。@klew-再想想,如果您只想要不重复的URL,那么dikla应该包含HAVING子句而不是WHERE子句。因此,查询需要是:Select id,url,xml from table1,其中Select minid from table1 group by url中的id countid=1,但我需要获得不重复的id,即使xml不同,我很好奇为什么需要xml,但不关心重复的url在每个重复行上可能有不同的xml,因此实际上,您将,get randon choice for the XML Retrieved这是因为XML的详细信息对于两行都是相同的,但它们只会在日期和时间的值上有所不同,这一点我并不关心。但是我需要获得不重复的数据,即使XML不同,我很好奇为什么您需要XML,但是不要在意重复的URL在每个重复的行上可能有不同的XML,因此实际上,您将获得检索XML的randon选择。这是因为XML的细节对于两行都是相同的,但它们只在日期和时间的值上不同,我不关心这一点。
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