0

ORDER BY次のように使用して、クエリで行を表示できることを知っています。

SELECT IF(`category` IS NOT NULL,`category`,"Uncategorized") AS `category` FROM `table` ORDER BY `category`="Uncategorized" DESC

これにより、最初の行には常に「未分類」が含まれますが、それを含む複数の行が表示されます。返されたデータの 2 つのサンプル セットを次に示します。

私が得ているもの:

Uncategorized
Science
Health
Uncategorized
Wellness

私が欲しいもの:

Uncategorized
Uncategorized
Health
Science
Wellness

私は a を含む他の多くのことを試し、CASEまた conditional を使用しましたIF。私は何を間違っていますか?

4

3 に答える 3

1

機能しない理由は、ORDER BY句が列categoryに指定されたエイリアスではなく列名と比較されているためです。

SELECT IF(category IS NOT NULL,category,'Uncategorized') category
FROM   `table` 
ORDER  BY IF(category IS NOT NULL,category,'Uncategorized')='Uncategorized' DESC

COALESCE代わりにまたはIFNULLを使用して短くすることもできます

SELECT COALESCE(category, 'Uncategorized') category
FROM   `table` 
ORDER  BY COALESCE(category, 'Uncategorized') = 'Uncategorized' DESC, category
于 2013-05-18T06:00:04.570 に答える
0

ORDER BY句で関数を使用する必要があります。

SELECT IF(`category` IS NOT NULL,`category`,"Uncategorized") AS `category`
  FROM `table`
  ORDER BY IF(`category` IS NOT NULL,`category`,"Uncategorized")="Uncategorized" DESC
于 2013-05-18T06:00:17.777 に答える