簡體   English   中英

SELECT COUNT(DISTINCT名),ID,用戶的地址

[英]SELECT COUNT(DISTINCT name), id, adress from users

使用PHP,我試圖運行SQL查詢並選擇普通列和COUNT。

$sql_str =  "select COUNT(DISTINCT name), id, adress from users";
$src = mysql_query($sql_str);

while( $dsatz = mysql_fetch_assoc($src) ){
    echo $dsatz['name'] . "<br>";
}

問題是當我在查詢中有“ COUNT(DISTINCT name)”時,它將僅返回第一個條目。 當我刪除它時,它將從數據庫返回所有匹配的條目。

我可以將其分開並進行2個查詢,但是由於性能方面的原因,我試圖避免這種情況。

我怎么做錯了? 謝謝,Mexx

混合普通列和聚合函數的功能是MySQL的(錯誤)功能。 您甚至可以在MySQL的文檔中閱讀為什么它如此危險: https//dev.mysql.com/doc/refman/5.6/en/group-by-extensions.html

但是,如果您確實想在單個查詢中混合使用普通行和摘要,則可以始終使用UNION語句:

SELECT COUNT(DISTINCT name), null, null FROM users GROUP BY name --summary row
UNION
SELECT name, id, address FROM users --normal rows

COUNT()是一個聚合函數,它根據其余查詢的結果進行聚合。 如果要計算所有唯一名稱,而不僅僅是與您選擇的idaddress相關聯的唯一名稱,那么是的,您將必須運行兩個查詢。 這就是SQL的工作方式。

請注意,聚合時還應該有一個group by子句。 我認為MySQL不需要它的事實太可怕了,它會養成真正的壞習慣。

據我了解,您想獲得:

  • 每個用戶一行,以獲取每個名稱/ ID /地址
  • 同一行同時顯示多個用戶,以獲取具有相同名稱的用戶數。

我會說這不太可能。


如您所說,一個解決方案是兩個查詢...

...或者,就您而言,我想您可以在PHP方面進行計數。
即,不計入查詢,而是在PHP代碼中使用附加循環。

當count()作為字段列表的一部分時,應將其余字段分組。 在你的情況下

select count(distinct name), id, adress from users group by id, adress
select count(distinct name), id, adress 
from users 
group by id, adress

我假設您想在同一查詢中獲得所有用戶和總數。

嘗試

  select name, id, address, count(id) as total_number 
    from users 
    group by name, id, address;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM