分组MySQL数据

时间:2011-05-05 16:36:15

标签: mysql group-by

我有这个表,我们称之为表一。

+----+---------+-----------------+
| id | link_id | url             |
+----+---------+-----------------+
|  1 |       1 | www.example.com |
|  2 |       1 | www.abc.com     |
|  3 |       1 | www.test.com    |
|  4 |       1 | www.t1.com      |
|  5 |       1 | www.newtest.com |
|  6 |       1 | www.testing.com |
|  7 |       1 | www.abc.com     |
|  8 |       1 | www.example.com |
|  9 |       1 | www.web1.com    |
| 10 |       1 | www.web2.com    |
| 11 |       2 | www.dear.com    |
| 12 |       2 | www.google.com  |
| 13 |       2 | www.flowers.com |
| 14 |       2 | www.yahoo.com   |
| 15 |       2 | www.abc.com     |
| 16 |       2 | www.dell.com    |
| 17 |       2 | www.web.com     |
| 18 |       2 | www.example.com |
| 19 |       2 | www.test.com    |
| 20 |       2 | www.abc.com     |
+----+---------+-----------------+
20 rows in set (0.00 sec)

link_id是表中主要标识符的排序。它告诉我哪些网址出现在链接1,链接2等

我想要的是:  1.获取所有唯一的URL,  2.显示URL所属的链接

因此示例输出将是:

+-----------------+---------+
| url             | link_id |
+-----------------+---------+
| www.example.com |       1 |
| www.example.com |       2 |
| www.abc.com     |       1 |
| www.abc.com     |       2 |
| www.test.com    |       1 |
| www.test.com    |       2 |
| www.t1.com      |       1 |
| www.newtest.com |       1 |
| www.testing.com |       1 |
| www.web1.com    |       1 |

......等等。

因此,您可以看到www.example.com出现两次,因为它与链接1和2相关联,但web1.com只出现一次,因为它只属于链接1.

我尝试了几种不同的group by,但我最终只是更多地摸不着头脑。

感谢任何帮助。如果有人需要,这是表转储:

CREATE TABLE IF NOT EXISTS `table1` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `link_id` tinyint(3) unsigned DEFAULT NULL,
  `url` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=21 ;

INSERT INTO `table1` (`id`, `link_id`, `url`) VALUES
(1, 1, 'www.example.com'),
(2, 1, 'www.abc.com'),
(3, 1, 'www.test.com'),
(4, 1, 'www.t1.com'),
(5, 1, 'www.newtest.com'),
(6, 1, 'www.testing.com'),
(7, 1, 'www.abc.com'),
(8, 1, 'www.example.com'),
(9, 1, 'www.web1.com'),
(10, 1, 'www.web2.com'),
(11, 2, 'www.dear.com'),
(12, 2, 'www.google.com'),
(13, 2, 'www.flowers.com'),
(14, 2, 'www.yahoo.com'),
(15, 2, 'www.abc.com'),
(16, 2, 'www.dell.com'),
(17, 2, 'www.web.com'),
(18, 2, 'www.example.com'),
(19, 2, 'www.test.com'),
(20, 2, 'www.abc.com');

7 个答案:

答案 0 :(得分:3)

DISTINCT列表不会有效吗?订单有关系吗?

SELECT DISTINCT url, link_id
FROM `table1`
ORDER BY 1, 2

答案 1 :(得分:2)

除非我误解了这个问题,否则听起来你需要的只是一个DISTINCT条款:

select distinct url, link_id from table1;

答案 2 :(得分:1)

Select url, link_id
From Table1
Group By url, link_id

答案 3 :(得分:1)

select * from table group by link_id,url

答案 4 :(得分:1)

嗯,你应该用link_id和url进行分组,然后按url排序,这样相同的网址就在一起。

  SELECT url, link_id FROM table1
  ORDER BY url
  GROUP BY url, link_id

答案 5 :(得分:1)

除非我遗漏了什么:

SELECT DISTINCT url, link_id FROM table1;

答案 6 :(得分:1)

SELECT url, GROUP_CONCAT(link_id) 
  FROM table1 
 GROUP 
    BY url;

这将为您提供所有不同的网址,每个网址都包含一个链接ID列表