-1

次のようなselect句で選択していないものでテーブルを並べ替える方法はありますか?

Table Example

   Column  |    Type   |
-----------+-----------+
language   | character |
percentage | real      |
id         | integer   |

だから私は理想的にはこのようなことをしたい

SELECT DISTINCT language FROM Example ORDER BY percentage DESC;

しかし、これは明らかに機能しません。SELECT句で実際にパーセンテージを選択せず​​に、実際にパーセンテージで並べ替えることができる方法はありますか?

このクエリ

SELECT DISTINCT language 
FROM countrylanguage 
ORDER BY percentage DESC; 

次のエラーメッセージが表示されます。

ERROR: for SELECT DISTINCT, ORDER BY expressions must appear in select list
LINE 1: ...T DISTINCT language FROM countrylanguage ORDER BY percentage...
4

2 に答える 2

2

並べ替えるために列を選択する必要はありません。

create table language_pct (
  id integer primary key,
  language varchar(15) not null,
  percentage real not null,
  unique (language)
);

insert into language_pct values
(1, 'English', 15.3),
(2, 'French', 32.108),
(3, 'Russian', 12.88);

select language
from language_pct
order by percentage desc;

French
English
Russian

また、英語の行が2つあり、それぞれの割合が異なる場合、dbmsは何をしselect distinct...ますか?

于 2012-09-11T00:39:58.953 に答える
1

言語ごとに複数のエントリがあり、結果に言語ごとに1つの行だけが必要であり、それでもパーセンテージで並べ替える場合はGROUP BY language、パーセンテージをsum()(または実際のデータに応じて別の集計関数)で集計することができます。

SELECT language, sum(percentage) AS total_percentage
FROM   countrylanguage
GROUP  BY language
ORDER  BY total_percentage DESC;

言語ごとに最大の割合で1つのエントリが必要な場合は、を使用できますが、句の最初に区別する列を指定する必要があります。DISTINCT ONORDER BY

SELECT DISTINCT ON (language)
       language, percentage
FROM   countrylanguage
ORDER  BY language, percentage DESC;

についてDISTINCT ON

言語で並べ替えるには、それをサブクエリに入れる必要があります。

SELECT * FROM (
   <query from above>
   ) AS sub
ORDER  BY percentage DESC, language; -- language only serves as tiebreaker

または、次の方法で別のルートを使用しますGROUP BY

SELECT language, max(percentage) AS max_percentage
FROM   countrylanguage
GROUP  BY language
ORDER  BY max_percentage DESC;

またはウィンドウ関数DISTINCTと組み合わせる:

SELECT * FROM (
   SELECT DISTINCT
          language, max(percentage) OVER (PARTITION BY language) AS max_percent
   FROM   countrylanguage
   ) AS sub
ORDER  BY max_percent DESC;

この場合、最後のものが最も遅くなります。

于 2012-09-11T02:34:06.993 に答える