【问题标题】:COUNT DISTINCT on multiple columns with Conditions具有条件的多列上的 COUNT DISTINCT
【发布时间】:2018-08-23 05:09:25
【问题描述】:

我需要计算具有 case 条件的多列的不同 如果我只有 1 列,我已经知道here 给出的答案。但是如果我有多个列如下:

    SELECT COUNT(DISTINCT (CASE WHEN CustomerId > 10 THEN CITY,COUNTRY END))
    FROM Customers;

我得到的错误是

Error 1: could not prepare statement (1 near ",": syntax error)

【问题讨论】:

  • 您的查询没有意义。你想达到什么目标?
  • 是的,它不应该是一个明智的查询,因为我无法复制粘贴实际的敏感列和表数据。我只是想在 distinct 的 Then 子句中使用多个列
  • 用它做什么?怎么数他们??或者你想总结它们?
  • 您的案例陈述尝试返回两列 THEN CITY,COUNTRY END,其中不接受 AFAIK。您需要为此使用解决方法。复制案例,为每个 cit 或简单地使用 where 条件和 group by。

标签: mysql sql


【解决方案1】:

我不确定你的列是什么,但你总是可以分组。

SELECT 
  COUNT(1), 
  concat(CITY, ",", COUNTRY) as location 
FROM Customers where CustomerId > 10 
GROUP BY location

基本上,这将计算 CITY 和 COUNTRY 的每个唯一组合的 1 的数量。

另外,如果您想计算不同的位置,只需在 CASE THEN 子句中连接

SELECT COUNT(
  DISTINCT (CASE WHEN CustomerId > 10 
    THEN CONCAT(CITY,",",COUNTRY) END)
  ) 
FROM Customers;

出现“错误 1:无法准备语句(“,”附近的 1 个:语法错误)”是因为 THEN CLAUSE 需要 1 个不带逗号的 arg

【讨论】:

  • 是的。编辑了答案。
  • 另请注意,您的计数将减少 1。这是因为当 CustomerId 时,您的 case 语句将导致 null
  • 没关系..问题中的查询只是一个示例数据,而不是实际的列
猜你喜欢
  • 1970-01-01
  • 2013-09-28
  • 1970-01-01
  • 1970-01-01
  • 2015-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-06
相关资源
最近更新 更多