同一个字段却需要Count出不同结果时
表结构如下↓
| test |
|---|
| date | str |
|---|---|
| 2019-06-13 | 胜 |
| 2019-06-13 | 负 |
| 2019-06-13 | 负 |
| 2019-06-13 | 胜 |
| 2019-06-13 | 负 |
| 2019-06-13 | 胜 |
| 2019-06-13 | 负 |
| 2019-06-13 | 负 |
| 2019-06-12 | 负 |
| 2019-06-12 | 胜 |
| 2019-06-12 | 负 |
| 2019-06-12 | 负 |
| 2019-06-12 | 负 |
| 2019-06-12 | 负 |
| 2019-06-12 | 胜 |
| 2019-06-12 | 负 |
现在我需要把str的“胜”“负”分别进行统计,计算出每天胜负的总数。希望的效果如下
| 日期 | 胜利 | 失败 |
|---|---|---|
| 2019-06-13 | 8 | 6 |
| 2019-06-12 | 6 | 6 |
这样就必须在count()中执行一个判断,SQL语句如下
SELECT
date as '日期',
COUNT(str = '胜' OR null) as '胜利',
COUNT(str = '负' or null) as '失败'
FROM test GROUP BY date
两张表联查,按结果进行更新
表1结构如下↓
| Table1 |
|---|
| id | content1 | content2 |
|---|---|---|
| 1 | 1 | 2 |
| 2 | 1 | 2 |
| 3 | 1 | 2 |
| 4 | 1 | 2 |
| 5 | 1 | 2 |
表2结构如下↓
| Table2 |
|---|
| id | content1 | content2 | age |
|---|---|---|---|
| 1 | 111 | 222 | 11 |
| 2 | 111 | 222 | 41 |
| 3 | 111 | 222 | 51 |
| 4 | 111 | 222 | 61 |
| 5 | 111 | 222 | 71 |
需求是,将表2中age字段大于50的content1,content2更新到表1中去,那就需要将两表进行联查SQL如下
UPDATE Table1 a
INNER JOIN
(SELECT a.id,b.age,b.content1,b.content2
FROM Table1 a INNER JOIN Table2 b
ON a.id = b.id
HAVING b.age > 50) b
ON a.id = b.id
SET a.content1 = b.content1,a.content2 = b.content2
后来我发现其实并不需要这么麻烦,直接内联一次就行了
UPDATE Table1 a
INNER JOIN
(SELECT * FROM table2 b WHERE b.age > 50) b
ON a.id = b.id
SET a.content1 = b.content1,a.content2 = b.content2
未完待续…
本文整理了MySQL中的SQL操作,包括如何在同一个字段上计数出不同结果,例如统计‘胜’和‘负’的总数,并展示了如何通过联查更新表数据,将表2中age大于50的记录更新到表1。
215

被折叠的 条评论
为什么被折叠?



