我有表player
-s在许多一对多的关系与skill
-s
目标是通过单个查询列出球员及其"前3名技能".
create table player(
id int primary key
);
create table skill(
id int primary key,
title varchar(100)
);
create table player_skills (
id int primary key,
player_id int,
skill_id int,
value int
);
Run Code Online (Sandbox Code Playgroud)
查询:
SELECT
p.id,
group_concat(s.title SEPARATOR ', ') as skills
FROM player p
LEFT JOIN player_skills ps ON ps.player_id = p.id
LEFT JOIN skill s ON s.id = ps.skill_id
WHERE ps.value > 2
-- skills limit 3 some how ...
group …
Run Code Online (Sandbox Code Playgroud) 请考虑下表:
create table mixedvalues (value varchar(50));
insert into mixedvalues values
('100'),
('ABC100'),
('200'),
('ABC200'),
('300'),
('ABC300'),
('400'),
('ABC400'),
('500'),
('ABC500');
Run Code Online (Sandbox Code Playgroud)
我怎么能写一个SELECT语句将只返回数字样值
100
200
300
400
500
Run Code Online (Sandbox Code Playgroud)
我在一个表中基于id收集具有不同类型值的相同类似数据:
+------+---------------+-----------------+----------------+
| id | TransID | Amount | InsertDate |
+------+---------------+-----------------+----------------+
| 1 | 1 | 12 | 19-03-2004 |
| 2 | 2 | 9 | 20-03-2004 |
| 3 | 3 | 4 | 21-03-2004 |
| 4 | 1 | 12 | 22-03-2004 |
| 5 | 2 | 9 | 23-03-2004 |
| 6 | 3 | 4 | 24-03-2004 |
| 7 | 1 | 12 | 25-03-2004 |
+------+---------------+-----------------+----------------+
Run Code Online (Sandbox Code Playgroud)
当我根据TransID为1选择表时,我希望根据表的id为记录提供唯一的自动增量ID.
这该怎么做?结果就是这样
+------+---------------+-----------------+----------------+---------------
| …
Run Code Online (Sandbox Code Playgroud) 我有一个会员表,我在那里存储有关会员的所有详细信息,包括其名称,电子邮件,电话等.我希望该名称将以字母顺序显示.如示例所示.
A
Alan
Alex
Amar
Andy
B
Bob
Brad
C
Calvin
Clerk
D
E
Run Code Online (Sandbox Code Playgroud)
我可以按照ASC的顺序按字母顺序对字段进行排序,但是如何将它们放入字母组中.
任何建议都是最受欢迎的.我正在使用PHP.
假设我有一个数据库,该表包含ide为1到20的行.
我想先返回ID为3,4,1的3行,然后返回其他行.这是我的代码:
SELECT id
FROM prod
ORDER BY field( id, 3, 4, 1 )
LIMIT 20
Run Code Online (Sandbox Code Playgroud)
这是此代码的结果:
id
13
17
16
15
7
6
5
2
3
4
1
Run Code Online (Sandbox Code Playgroud)
奇怪的是,我需要先出现的3行最后显示,
如何将这3行添加到列表顶部?
谢谢
我正在尝试创建一个学生名单,这些学生的行为在我们每个学校的年度组中都是统计上最差的.
我们有一个名为的表students
.
然后,我们有行为flags
和alerts
加sanctions
.
但是,不同类别的旗帜/警报/制裁被认为比其他类别更严重.这些与标签一起存储在各自的_categories
表中,例如flag_categories
和sanction_categories
.flag
然后该表将有一个名为的列Category_ID
(alerts
有点不同,因为它只是一个Type
带有'A','C','P'和'S'值的字段).
如果我想查看显示特定年份组中标记最高的学生的数据,我会运行此查询:
SELECT
CONCAT(stu.Firstname, " ", stu.Surname) AS `Student`,
COUNT(f.ID) AS `Flags`
FROM `students` stu
LEFT JOIN `flags` f ON f.Student_ID = stu.id
WHERE stu.Year_Group = 9
GROUP BY stu.id
ORDER BY `Flags` DESC
LIMIT 0, 20
Run Code Online (Sandbox Code Playgroud)
如果我想向学生展示特定年份组中最危机警报,我会运行此查询:
SELECT
CONCAT(stu.Firstname, " ", stu.Surname) AS `Student`,
COUNT(f.ID) AS `Flags`
FROM `students` stu
LEFT JOIN `flags` f …
Run Code Online (Sandbox Code Playgroud) 假设我有一张桌子:
ID,City1,City2,City3,Country,....(不重要)
该应用程序询问人们他们希望住在哪里,让我们说法国.因此,必须添加至少一个城市,但您可以添加3个最大城市.
例如,我们在表数据中有:
ID City1 City2 City3 Country UserID
--------------------------------------------------
1 Paris / / France 1
2 Paris Nice / France 2
3 Paris Nice / France 3
4 Nice Paris Lyon France 4
5 Lyon Paris Nice France 5
6 Cannes Nice Paris France 6
7 Paris Cannes Lyon France 7
--------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
现在,当有人点击法国时,我会在页面上显示所有用户.然后在上面的用户我想显示所有城市,例如巴黎(n).
所以,如果我写:
select City1 as city, count(1) as num
from table_c
where Country = "France" group by City1;
Run Code Online (Sandbox Code Playgroud)
我得到巴黎(4),但我需要得到巴黎(7),因为我还要显示City2和City3,我不知道如何编写这样的SQL语句.
我尝试了很多SQL语句,但后来我得到了几次Paris(n)显示,haw可以做到这一点.如果可以的话?
我想用这样的东西设置多个字段,我怎样才能使它工作?
Select TableId,
CASE
WHEN StartTime > Appt THEN
Field AS Field_1
FieldId AS FieldId_1
WHEN StartTime BETWEEN Appt AND DATE_ADD(Appt, INTERVAL 1 MONTH) THEN
Field AS Field_2
FieldId AS FieldId_2
END
FROM TableA;
Run Code Online (Sandbox Code Playgroud)
它不起作用,AS Field_1附近的语法错误.
我搜索了论坛,找到解决问题的方法.我的问题是我无法找到如何保存每场锦标赛的排名位置.我创建了两个表和一个如下所示的查询:竞争对手(cid int auto_increment主键,名称varchar(25),lastname varchar(25)); comps(compid int auto_increment primary key,tournement int,cid int,points int);
select @rowno:= @rowno+1 as position, rank.*
from (
select name,lastname,SUM(points) as pts,group_concat(points) as round FROM
(select cid,tournament,points from comps
group by cid,tournament order by points)total
join competitors c on c.cid = total.cid
cross join (select @rowno := 0) r
group by total.cid
order by pts desc) rank
order by pts desc
Run Code Online (Sandbox Code Playgroud)
这是 SQLFiddle演示
我想要实现的是,当用户点击竞争对手的个人资料时,每个锦标赛的位置都会显示如下:
Name: Competitor One
Tournament 1: 1st 100 pts
Tournament 2: 2nd 80 pts
Tournament …
Run Code Online (Sandbox Code Playgroud) 我有这个 mysql 代码:
SELECT firstname, lastname, age, gender from persons WHERE id = 1;
Run Code Online (Sandbox Code Playgroud)
展示:
> firstname: Marlon
>
> lastname: Null
>
> age: 26
>
> gender: male
Run Code Online (Sandbox Code Playgroud)
我想做的是:
SELECT IF NULL DONT SELECT(firstname), IF NULL DONT SELECT(lastname), IF NULL DONT SELECT(age), IF NULL DONT SELECT(gender) from persons WHERE id = 1;
Run Code Online (Sandbox Code Playgroud)
展示:
> firstname: Marlon
>
> age: 26
>
> gender: male
Run Code Online (Sandbox Code Playgroud)
姓氏未显示,因为它为空