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