我很困惑如何计算相同但格式不同的项目。例如,我们想知道人们有多少种不同的水果,并具有以下数据:
Mary|Apple|
Mary|apple|
Mary|Apple |
Mary|Orange|
Liu|Grape|
Liu|Apple|
我希望输出
Mary|2
Liu|2
但是如果我做count(distinct fruits)
,我会得到
Mary|4
Liu|2
在这种情况下,是否有任何处理格式的方法?
答案 0 :(得分:2)
对水果名称的小写形式进行计数:
SELECT
name,
COUNT(DISTINCT LOWER(TRIM(fruit))) AS cnt
FROM yourTable
GROUP BY
name;
该演示在MySQL中进行,但相同的逻辑在SQLite中也应工作。
答案 1 :(得分:2)
您可以数一下:
TRIM()
。LOWER()
。如:
select
name,
count(distinct lower(trim(fruits)))
from my_table
group by name
如果name
列碰巧有相似的不规则之处,则可以使用相同的策略。
答案 2 :(得分:1)
DISTINCT
并不是这里唯一的工具。您可以将GROUP BY
与列文本的规范化版本一起使用,以将所有不同的大小写和尾随空格合并为一个。例如:
SELECT name, fruit, count(fruit) AS cnt
FROM test
GROUP BY name, trim(upper(fruit));
给我
name fruit cnt
---------- ---------- ----------
Liu Apple 1
Liu Grape 1
Mary Apple 3
Mary Orange 1
但是,您似乎希望每人拥有不同类型的水果总数。所以...
WITH totals(name, fruit) AS
(SELECT name, fruit
FROM test
GROUP BY name, trim(upper(fruit)))
SELECT name, count(fruit) AS fruits
FROM totals
GROUP BY name;
给我
name fruits
---------- ----------
Liu 2
Mary 2