2017-06-30 5 views
0

私は2つのテーブルを持っている: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 

まず、私のアプリケーションのリスト、他の店では、各アプリのダウンロード数です。ほとんどのダウンロードアプリを入手する最も良い方法は何ですか?私は簡単にJOINを実行してからSUMORDER BYを行うことができますが、これが最も効率的ですか?

+0

はいiあなたがアプリ名を必要としない限り、download_statsテーブルに対して選択するだけです。 –

+0

多分それのような何か?しかし、その後あなたは注文を失ったofc: アプリから名前を選択します。どこのidを入力しますか? –

答えて

0

はい、私はGROUP BYLEFT JOIN、例えばを使用したい:

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_idJOINは、例えば、必要とされていない場合:

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

はい、あなたはLEFT JOINを使用することができますwith GROUP 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; 
関連する問題