根据辅助列中的值选择唯一行

时间:2013-03-20 08:18:19

标签: mysql group-by sql-order-by

我有一个简单的mysql表:

id, code, product_name, supplier
 1, 3844, ProductName1, Supplier1
 2, 3844, ProductName1, Supplier2
 3, 1233, ProductName2, Supplier2

我想从表中查询所有不同的产品。所以sql代码是select * from table group by code

我的问题

我想在“分组依据”声明中设置供应商优先级(例如,Supplier1最相关,但在给定code的列表中可能不存在)。产品#1和#2是相同的。在我的结果表中,我想看到:

id, code, product_name, supplier
 1, 3844, ProductName1, Supplier1
 3, 1233, ProductName2, Supplier2

我该如何做到这一点?

2 个答案:

答案 0 :(得分:1)

你可能需要这个:

SELECT
  MIN(id) id,
  code,
  MIN(product_name) product_name,
  MIN(supplier) supplier
FROM
  yourtable
WHERE
  (code, CASE WHEN supplier='Supplier1' THEN '' ELSE supplier END)
  IN (SELECT   code, min(CASE WHEN supplier='Supplier1' THEN '' ELSE supplier END)
      FROM     yourtable
      GROUP BY code)
GROUP BY
  code
ORDER BY
  min(id);

请参阅小提琴here

答案 1 :(得分:0)

试试这个,

SELECT * FROM table_name    GROUP BY code    ORDER BY supplier