Em MySQL 5.7.34
eu tenho essa estrutura simples de banco de dados. Colunas importantes são domain name
, domain total links in
, mas as entradas são duplicadas (uma vez para cada link encontrado de várias fontes), preciso selecionar o domínio apenas uma vez ( link_to_domain
) e classificá-lo por link_to_domain_total_links_in
DESC; Não tenho certeza de como renderizá-lo aqui, aqui está a consulta:
CREATE TABLE IF NOT EXISTS `domain_to_domain_links` (
`id` int(11) NOT NULL,
`link_to_domain_hash` varchar(16) NOT NULL,
`link_to_domain_total_links_in` int(11) NOT NULL DEFAULT '0',
`link_to_domain` varchar(128) NOT NULL,
`link_from_domain` varchar(128) NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=270245 DEFAULT CHARSET=utf8;
INSERT INTO `domain_to_domain_links` (`id`, `link_to_domain_hash`, `link_to_domain_total_links_in`, `link_to_domain`, `link_from_domain`) VALUES
(1, 'c9b13094745bae79', 3, 'example.com', 'from-other-site1.com'),
(1, 'c9b13094745bae79', 3, 'example.com', 'from-other-site2.com'),
(1, 'c9b13094745bae79', 3, 'example.com', 'from-other-site3.com'),
(2, 'c43f16c897f72994', 2, 'foo.com', 'from-other-site4.com'),
(3, 'c43f16c897f72994', 2, 'foo.com', 'from-other-site5.com');
Isso retorna exatamente o que eu preciso, mas pelo que eu entendi ele realmente conta as entradas (como links) na hora da consulta, eu preciso pegar do link_to_domain_total_links_in
para que ele rode mais rápido:
SELECT link_to_domain, COUNT(*) AS my_links_counter
FROM domain_to_domain_links
GROUP BY link_to_domain
ORDER BY COUNT(*) DESC;
Também link_to_domain_hash
é indexado, se puder tirar proveito disso ao selecionar deve ser mais rápido que link_to_domain
, mas isso não é crítico.
Se eu entendi sua tabela corretamente,
link_to_domain_total_links_in
representa o número de linhas que existem na tabela para aquelelink_to_domain
.Em vez de
COUNT()
você pode usar a funçãoMAX()
ouMIN()
agregada nalink_to_domain_total_links_in
coluna (já que sempre será a mesma para qualquer instância delink_to_domain
).Mas nesse ritmo você pode simplesmente adicionar
link_to_domain_total_links_in
àGROUP BY
cláusula, e então você podeSELECT
e/ouORDER BY
isso.Mas então você não está agregando mais nada e nem precisa de uma
GROUP BY
cláusula, em vez disso, você pode usar a palavra-DISTINCT
chave em suas duas colunas assim: