Mysql
無法正確獲取此 GROUP BY 或 DISTINCT
我
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_in
到GROUP 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;