Mysql

無法正確獲取此 GROUP BY 或 DISTINCT

  • July 16, 2022

MySQL 5.7.34有這個簡單的數據庫結構。重要的列是domain name, domain total links in,但條目是重複的(每個從各種來源找到的連結一次),我只需要選擇一次域( ) 並按DESClink_to_domain對其進行排序;link_to_domain_total_links_in不知道如何在這裡渲染它,這裡是查詢:

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');

這正是我所需要的,但據我了解,它實際上在查詢時計算條目(作為連結),我需要它從中獲取它,link_to_domain_total_links_in以便它執行得更快:

SELECT link_to_domain, COUNT(*) AS my_links_counter 
FROM domain_to_domain_links 
GROUP BY link_to_domain 
ORDER BY COUNT(*) DESC;

link_to_domain_hash被索引,如果它可以利用它在選擇時應該比它更快link_to_domain,但這並不重要。

如果我正確理解您的表格,link_to_domain_total_links_in則表示該特定表格中存在的行數link_to_domain

而不是COUNT()您可以在列上使用MAX()orMIN()聚合函式link_to_domain_total_links_in(因為對於 的任何實例它總是相同的link_to_domain)。

但是按照這個速度,你可以只添加link_to_domain_total_links_inGROUP BY子句中,然後你就可以SELECT和/或ORDER BY它。

但是你不再聚合任何東西,甚至不需要一個GROUP BY子句,而是你可以DISTINCT像這樣對你的兩列使用關鍵字:

SELECT DISTINCT 
   link_to_domain,
   link_to_domain_total_links_in AS my_links_counter 
FROM domain_to_domain_links 
ORDER BY link_to_domain_total_links_in DESC;

引用自:https://dba.stackexchange.com/questions/314487