MYSQL 高级查询 一个字段根据多条件 执行排序..

SELECT ecm_goods_attr.goods_id, CONCAT( ',', GROUP_CONCAT( DISTINCT (

CASE WHEN (
ecm_goods_attr.attr_name != '估值'
)
THEN (
ecm_goods_attr.attr_value
)
END )
ORDER BY ecm_goods_attr.attr_id ASC
SEPARATOR ',' ) , ','
) AS ops, ecm_goods_ext.guarantee_type_id AS guarantee_type_id
FROM ecm_goods_attr, ecm_goods_ext
WHERE ecm_goods_attr.goods_id = ecm_goods_ext.goods_id
GROUP BY ecm_goods_attr.goods_id
ORDER BY ecm_goods_ext.goods_id

这里查询的结果是,一个表里的两个字段,加上另外一个表的字段..另外,我还要加一个字段,是来自表一的字段,等于'估值'的字段..如何写代码添加这个查询字段.

第1个回答  2014-01-22
把查询结果做为虚拟表 比如 AS aa,然后在去关联.追问

直接这样的话如何添加? 我这是要做成视图的.

追答

其实就是查2次
SELECT aa.goods_id,aa.ops,aa.guarantee_type_id,bb.ops2 FROM
(你写的语句) as aa
join
(语句里的条件变为='估值' as ops2) as bb
on aa.goods_id=bb.goods_id

追问

好像不对哦..goods_id, ops, type_id,是筛选出来的数据.组成的新表.在这三个字段里,添加第四个字段.第四个字段是放表1 等于,估值的数据..应该是第二次查询,等于 估值的数据吧? 不熟悉在MYSQL下写命令操作,,有点头痛...

追答

我发的语句就是你说的意思啊.你可以把表结构发给我,我调好了给你...

追问

表的结构是
ecm_goods_attr(表1) 它的字段有:

gattr_id (自动ID不用管)

goods_id (这个是所有表关联的ID即产品ID,)

attr_name (这字段存的是中文,估值 所在的字段)

attr_value (这个是要列出的数据.估值 的数据也在这里)

追答SELECT aa.goods_id,aa.ops,aa.guarantee_type_id,bb.ops2 FROM
(SELECT ecm_goods_attr.goods_id, CONCAT( ',', GROUP_CONCAT( DISTINCT (

CASE WHEN (
ecm_goods_attr.attr_name != '估值'
)
THEN (
ecm_goods_attr.attr_value
)
END ) 
ORDER BY ecm_goods_attr.attr_id ASC 
SEPARATOR ',' ) , ','
) AS ops, ecm_goods_ext.guarantee_type_id AS guarantee_type_id
FROM ecm_goods_attr, ecm_goods_ext
WHERE ecm_goods_attr.goods_id = ecm_goods_ext.goods_id
GROUP BY ecm_goods_attr.goods_id
ORDER BY ecm_goods_ext.goods_id) AS aa

JOIN

(SELECT ecm_goods_attr.goods_id, CONCAT( ',', GROUP_CONCAT( DISTINCT (

CASE WHEN (
ecm_goods_attr.attr_name = '估值'
)
THEN (
ecm_goods_attr.attr_value
)
END ) 
ORDER BY ecm_goods_attr.attr_id ASC 
SEPARATOR ',' ) , ','
) AS ops2
FROM ecm_goods_attr, ecm_goods_ext
WHERE ecm_goods_attr.goods_id = ecm_goods_ext.goods_id
GROUP BY ecm_goods_attr.goods_id
ORDER BY ecm_goods_ext.goods_id) AS bb

ON aa.goods_id=bb.goods_id

追问

高人啊,,太厉害了..要是你在广州我请你吃饭...另外多问一下,如果要扩展的话,又要在这个的外层加个select 吗?例如 ecm_goods_attr.attr_name = '估值2' 每一个属性都要添加一个select

追答

客气了, 加JOIN后把的就行了
比如 JOIN () AS cc ON aa.goods_id=cc.goods_id

追问

方便的话可以留个Q.谢谢..

追答

835188151

本回答被提问者采纳
第2个回答  2014-01-22
我觉得你应该在数据结构做一些功夫, 做一些提高效率的冗余
你这样写SQL效率太低了, 并发稍高一点点, 就抗不住 了追问

现在的问题是不能和不好修改表结构...只能用代码实现.

第3个回答  2014-01-22
飘过. 等回答学习一下.

MySQL的高级查询不等条件查询mysql不等条件查询
上述代码查询表名为customers的数据表中,名字以大写字母L开头的记录。不等条件查询还可以使用IN运算符来匹配多个值。例如:SELECT * FROM customers WHERE country IN (‘China’, ‘USA’, ‘Japan’);上述代码查询表名为customers的数据表中,所属国家为中国、美...

MySQL排名排序最佳实践指南mysql排序排名
1.正确定义相关字段。在开始排名排序之前,必须明确须要排序的字段及其类型。在MySQL中,可以使用以下语句定义字段:CREATE TABLE tableName(rank INT NOT NULL );2.使用排名函数。在MYSQL中,可以使用排名函数RANK()来对数据进行排名排序,语法如下:SELECT RANK(‘rank’ ORDER BY columnName...

掌握MySQL一百条查询命令轻松查询数据mysql一百条查询命令
1. SELECT: 查询数据 2. FROM: 指定数据表 3. WHERE: 指定查询条件 4. ORDER BY: 指定排序方式 5. LIMIT: 指定查询结果数量 6. DISTINCT: 查询不同的数据 7. IN: 查询多个值 8. BETWEEN: 查询两个值之间的数据 9. LIKE: 模糊查询 10. IS NULL: 查询为空的数据 二、高级查询命令 11....

mysql如何查询表中所有的字段?
在处理复杂业务需求时,可能需要对查询结果进行排序、分组和分页等高级操作。MySQL提供了ORDER BY关键字进行排序,具体语法格式为:SELECT 字段名 表名 ORDER BY 字段名 ASC\/DESC;其中ASC代表升序,DESC代表降序。统计数据时,MySQL提供了COUNT()、SUM()、AVG()、MAX()、MIN()等聚合函数。COUNT()函数...

MySQL中IF语句语法详解mysql中if语句语法
MySQL中IF语句:语法详解 MySQL是一种开放源码、免费使用的数据库管理软件,广泛应用于各种互联网应用程序中。在MySQL中,IF语句是一种非常常见的流程控制语句,它可以根据特定的条件来决定程序的执行路径,从而实现程序的灵活性和可扩展性。下面我们将详细介绍MySQL中IF语句的语法和使用方法。1. IF语句的...

MySQL查询表数据方法详解MySQL下怎么查表数据
一、 基础查询语句 MySQL的基础查询语句是SELECT,其语法如下:SELECT field1, field2, …… FROM table_name WHERE condition;其中field1, field2……代表要查询的字段名,table_name代表要查询的表名,condition代表查询条件。例如,要查询名为“user”的表中所有数据,可以使用以下命令:SELECT * FROM...

MySQL中的条件语句if使用方法详解mysqlif
如果if语句的条件比较复杂,我们可以使用case语句来代替。下面是一个例子:SELECT CASE WHEN 1>0 THEN ‘true’ ELSE ‘false’ END;这个查询语句的执行结果是true。4. 总结 本文介绍了MySQL中条件语句if的基本语法和一些高级用法,并提供了相应的代码示例,读者可以根据自己的...

深入了解MySQL一条重要的指令mysql一条
其中 column1, column2 表示要查询的列,table_name 表示要查询的表,condition 则是查询条件。同时,这个语法有一些附加的子句(clauses) ,可以决定如何过滤、排序、汇总等等。在下面的例子中,我们将使用 “SELECT” 语句,来探索一个名为 “Customers” 的表格。例子 1: 基本的查询操作 一个最...

MySQL优化查询6:高级函数exists;rollup;cube;field等 | 数据分析笔记...
rollup和cube用于group by操作,rollup能一次聚合不同分组的汇总数据,而cube会遍历所有可能的分组组合。group_concat则用于合并特定字段的值,如显示每个学生的所有课程id。field函数在order by时提供自定义排序的灵活性,比如优先级排序。COALESCE, IF, IFNULL, ISNULL和NULLIF函数提供了处理null值和条件...

分享SQL的7种进阶用法
1. 自定义排序(ORDER BY FIELD)MySQL的ORDER BY功能不仅限于ASC和DESC,通过自定义字段和数据,可以实现个性化的排序需求。2. 空值NULL排序 (ORDER BY IF(ISNULL()))面对NULL值,ORDER BY可以借助IF(ISNULL)语句进行巧妙转换,确保NULL值在排序中的位置符合你的需求。3. CASE表达式 (CASE···...

相似回答