SQL 使用 GROUP BY 语句查询
SQL Query using GROUP BY Statment
我的数据库中有这个 table:
╔════╦═══════╦═══════╗
║ id ║ Name ║ Price ║
╠════╬═══════╬═══════╣
║ 1 ║ ciao ║ 123 ║
║ 2 ║ ciao ║ 55 ║
║ 3 ║ bye ║ 43 ║
║ 4 ║ hello ║ 12 ║
║ 5 ║ ciao ║ 1 ║
║ 6 ║ ciao ║ 77 ║
╚════╩═══════╩═══════╝
..我想创建一个显示两列的新视图:
1) "ciao" 或 "not ciao"
2) 前面的table有多少行是"ciao"或"not ciao",像这样:
╔════╦══════════╦═══════╗
║ id ║ Name ║ Count ║
╠════╬══════════╬═══════╣
║ 1 ║ ciao ║ 4 ║
║ 2 ║ not ciao ║ 2 ║
╚════╩══════════╩═══════╝
我正在尝试找到解决方案,但我无法按 "not ciao" 个值进行分组:
SELECT Name, COUNT(*)
FROM mytable
WHERE Name = "Ciao"
GROUP BY Name
您需要将除 'ciao'
之外的所有内容映射到 'not ciao'
,如下所示:
SELECT CASE WHEN Name!='ciao' THEN 'not ciao' ELSE Name END as Name, COUNT(*)
FROM mytable
GROUP BY CASE WHEN Name!='ciao' THEN 'not ciao' ELSE Name END
这可能有效(未测试):
SELECT CASE
WHEN name = 'ciao' THEN 'ciao'
ELSE 'not ciao'
END as NAME,
COUNT(*)
FROM table
GROUP BY CASE
WHEN name = 'ciao' THEN 'ciao'
ELSE 'not ciao'
END
或 MySQL
SELECT CASE
WHEN name = 'ciao' THEN 'ciao'
ELSE 'not ciao'
END as NAME1,
COUNT(*)
FROM table
GROUP BY NAME1
最简单的方法:
SELECT Name, COUNT(*)
FROM
(select case when name <> "Ciao" then "Not Ciao"
else "Ciao" end as name
from mytable)
GROUP BY Name
我的数据库中有这个 table:
╔════╦═══════╦═══════╗
║ id ║ Name ║ Price ║
╠════╬═══════╬═══════╣
║ 1 ║ ciao ║ 123 ║
║ 2 ║ ciao ║ 55 ║
║ 3 ║ bye ║ 43 ║
║ 4 ║ hello ║ 12 ║
║ 5 ║ ciao ║ 1 ║
║ 6 ║ ciao ║ 77 ║
╚════╩═══════╩═══════╝
..我想创建一个显示两列的新视图:
1) "ciao" 或 "not ciao"
2) 前面的table有多少行是"ciao"或"not ciao",像这样:
╔════╦══════════╦═══════╗
║ id ║ Name ║ Count ║
╠════╬══════════╬═══════╣
║ 1 ║ ciao ║ 4 ║
║ 2 ║ not ciao ║ 2 ║
╚════╩══════════╩═══════╝
我正在尝试找到解决方案,但我无法按 "not ciao" 个值进行分组:
SELECT Name, COUNT(*)
FROM mytable
WHERE Name = "Ciao"
GROUP BY Name
您需要将除 'ciao'
之外的所有内容映射到 'not ciao'
,如下所示:
SELECT CASE WHEN Name!='ciao' THEN 'not ciao' ELSE Name END as Name, COUNT(*)
FROM mytable
GROUP BY CASE WHEN Name!='ciao' THEN 'not ciao' ELSE Name END
这可能有效(未测试):
SELECT CASE
WHEN name = 'ciao' THEN 'ciao'
ELSE 'not ciao'
END as NAME,
COUNT(*)
FROM table
GROUP BY CASE
WHEN name = 'ciao' THEN 'ciao'
ELSE 'not ciao'
END
或 MySQL
SELECT CASE
WHEN name = 'ciao' THEN 'ciao'
ELSE 'not ciao'
END as NAME1,
COUNT(*)
FROM table
GROUP BY NAME1
最简单的方法:
SELECT Name, COUNT(*)
FROM
(select case when name <> "Ciao" then "Not Ciao"
else "Ciao" end as name
from mytable)
GROUP BY Name