我是数据库的学习者,我想我问的是非常基本的问题,请耐心等待。
我想从表中获取值列表。将根据某些标准订购值列表。
示例:我在 大学 表中有一个名为 courseOffered 的列,我在这里保存一个字符串: java,c ++,android等。
我在 用户 表中还有另外两列名为 primarySubject 和 secondarySubject 。
我的第一个提取逻辑是,根据 primarySubject ,大学表的行值必须是列表中的第一优先级,然后根据 secondarySubject ,大学表的行值必须是列表中的第二优先级,并且最后会附加其余值,这些值与 primarySubject 或 secondarySubject 无关。
到目前为止我尝试了什么:
SELECT *
FROM test.college
WHERE Courses_Offered LIKE CONCAT('%',RTRIM((SELECT
Primary_Subject
FROM test.user
WHERE Email = 'r.veer7@gmail.com')),'%')
OR Courses_Offered LIKE CONCAT('%',RTRIM((SELECT
Secondary_Subject
FROM test.user
WHERE Email = 'r.veer7@gmail.com')),'%')
OR LOWER(Location)IN(SELECT
LOWER(Location)
FROM test.user
WHERE Email = 'r.veer7@gmail.com')
上面的查询提取所有数据但不是我想要的,它的提取作为行保存在表中,现在我想要对上述查询中的每次提取进行一种分组,我应该怎么做?
答案 0 :(得分:1)
像这样你可以使用group by和order by
SELECT *
FROM test.college
WHERE Courses_Offered LIKE CONCAT('%',RTRIM((SELECT Primary_Subject FROM test.user WHERE Email = 'r.veer7@gmail.com')),'%')
OR Courses_Offered LIKE CONCAT('%',RTRIM((SELECT Secondary_Subject FROM test.user WHERE Email = 'r.veer7@gmail.com')),'%')
OR LOWER(Location)IN(SELECT LOWER(Location) FROM test.user WHERE Email = 'r.veer7@gmail.com')
GROUP by college.column_name
ORDER BY college.first_column_name ASC , college.second_column_name DESC