繁体   English   中英

如何通过MySQL中的其他表最大计数和排序?

[英]How to count and order by max by other table in MySQL?

我有两个桌子:

CREATE TABLE `apps` (
    `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
    `name` VARCHAR(191) NOT NULL COLLATE 'utf8mb4_unicode_ci',
    PRIMARY KEY (`id`)
)
COLLATE='utf8mb4_unicode_ci'
ENGINE=InnoDB
;

CREATE TABLE `downloads_stats` (
    `app_id` INT(10) UNSIGNED NOT NULL,
    `date` DATE NOT NULL,
    `downloads` INT(10) UNSIGNED NOT NULL,
    PRIMARY KEY (`app_id`, `date`),
)
COLLATE='utf8mb4_unicode_ci'
ENGINE=InnoDB

首先是我的应用程序列表,其他则存储每个应用程序的下载号。 获得10个最多下载的应用程序的最佳方法是什么? 我可以先进行简单的JOIN然后进行SUMORDER BY但这是最有效的方法吗?

是的,我将LEFT JOINGROUP BY ,例如:

SELECT a.id, a.name, SUM(ds.downloads) AS 'downloads'
FROM apps a LEFT JOIN downloads_stats ds ON a.id = ds.app_id
GROUP BY a.id, a.name
ORDER BY SUM(ds.downloads) DESC
LIMIT 10;

如果只需要app_id则不需要JOIN ,例如:

SELECT app_id, SUM(downloads) as 'downloaded'
FROM downloads_stats
GROUP BY app_id
ORDER BY SUM(downloads) DESC

是的,您可以将LEFT JOINGROUP BY

SELECT  a.id , a.name , SUM(ds.downloads) AS 'downloads'
FROM   apps  a   LEFT  JOIN   downloads_stats ds ON a.id = ds.app_id
GROUP BY   a.id ,  a.name
ORDER BY   downloads DESC
LIMIT 10;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM