集計なしの為、相関サブクエリで連番を取得できます。
SELECT
t1.shopname,
(
SELECT
count(*) + 1
FROM
sales2 t2
WHERE
t1.sales < t2.sales
) AS no
FROM
sales2 t1
ORDER BY
sales DESC
質問したときは、店舗・年月・デバイス単位にしてましたが、分かりづらいので もっと単純な形式にします。(今回デバイスを削りました)
店舗単位に売上を集計し、売上の降順に連番を振ります。
相関サブクエリでテーブル(t1)の売上集計とテーブル(t2)の売上集計を比較して テーブル(t1)の売上集計より大きい店舗が何店舗あるかで順位を出そうとしています。
SELECT
t1.shopname,
SUM(t1.sales) AS sales,
(
SELECT @sales:=t1.sales
FROM (
SELECT
shopname,
SUM(sales) as sales
FROM
sales tmp
GROUP BY shopname
) AS t2
WHERE
t1.sales < t2.sales
) AS no
FROM sales t1
GROUP BY shopname
ORDER BY sales DESC
が、下記のような結果になってしまいます。
相関サブクエリでの売上の集計結果の比較が、t1が集計前のものが 利用されているためと思われます。
店舗単位で連番を振りなおすといったことをしないので
SET @no:=0;
SELECT shopname,
@no:=@no+1,
sales
FROM (
SELECT
t1.shopname,
SUM(t1.sales) AS sales
FROM sales t1
GROUP BY shopname
ORDER BY sales DESC
) AS t1
FROMで初期化する形であれば、
SELECT @n:=@n+1 AS rank,
shopname,
sales
FROM (
SELECT
t1.shopname,
SUM(t1.sales) AS sales
FROM sales t1
GROUP BY shopname
ORDER BY sales DESC
) AS t1, (SELECT @n:=0) t2
my.cnfにローカルファイルを使う場合、パーミッションが777になってしまいエラーになるので Dockerfileで、chmodでパーミッション変更を行う
FROM mysql:5.7
COPY my.cnf /etc/mysql/conf.d/
RUN chmod 664 /etc/mysql/conf.d/my.cnf