2015-04-23 116 views
1

我试图定义一个自定义ORDERY BY城市。按城市定义自定义订单

事情是这样的:

New York (255) 
Paris (26) 
Vien(15) 

然后ORDER BY city ASC

我试过这个查询,这是行不通的:

SELECT count(id_item) as q, city FROM item GROUP BY city ORDER BY FIELD(city,'New York','Paris','Vien'), city ASC 
+0

是什么你想做什么? –

+0

count只返回1行或ans?你确定这个查询是正确的?尝试没有计数,因为结果是 –

+0

你得到了什么错误? –

回答

4

你可以做这样的事情:

SELECT 
    count(id_item) as q, 
    city 
FROM 
    item 
GROUP BY 
    city 
ORDER BY 
    ( 
     CASE 
      WHEN city='New York' THEN 1 
      WHEN city='Paris' THEN 2 
      WHEN city='Vien' THEN 3 
      ELSE 4 
     END 
    ) ASC, 
    city ASC 
+1

就是这样。非常感谢你! – BCM

+1

@BCM:Np,很乐意帮忙 – Arion

+1

FIELD以较少的词语达到同样的效果。 – Strawberry

0

可以order by city='New York' desc, city='Paris' desc, city='Vien' desc, city

甚至order by city in ('New York', 'Paris', 'Vien') desc, city因为这些3已按字母顺序排列

1

ORDER BY关键字默认按升序排列记录。要按降序对记录进行排序,可以使用DESC关键字。试试这个 -

SELECT count(id_item) as q, city FROM item GROUP BY city ORDER BY city; 

对于降,你可以做这样的事情 -

SELECT count(id_item) as q, city FROM item GROUP BY city ORDER BY city DESC; 

取得与自己的优先顺序行,SELECT查询将如下:

SELECT 
    count(id_item) as q, 
    city 
FROM 
    item 
GROUP BY 
    city 
ORDER BY 
    ( 
     CASE 
      WHEN city='New York' THEN 1 
      WHEN city='Paris' THEN 2 
      WHEN city='Vien' THEN 3 
      ELSE 4 
     END 
    ) ASC, 
    city ASC