COUNT (고유 한 이름), ID, 사용자로부터 주소를 선택하십시오.

StackOverflow https://stackoverflow.com/questions/1810067

  •  05-07-2019
  •  | 
  •  

문제

PHP를 사용하면 SQL 쿼리를 실행하고 일반 열을 선택하고 계산하려고합니다.

$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 (별개 이름)"가 있으면 첫 번째 항목 만 반환한다는 것입니다. 제거하면 DB에서 일치하는 모든 항목을 반환합니다.

분리하고 2 개의 쿼리를 할 수 있지만 성능 문제로 인해이를 피하려고 노력하고 있습니다.

내가 무엇을 잘못 만들까요? thx, mexx

도움이 되었습니까?

해결책

일반 열과 집계 함수를 혼합하는 기능은 MySQL의 (MIS) 기능입니다. 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() 집계 함수이며 나머지 쿼리 결과와 집계됩니다. 당신이 모든 별개의 이름을 계산하려면 id 그리고 address 당신이 선택하고 있다는 것은 두 쿼리를 실행해야합니다. 이것이 바로 SQL의 작동 방식입니다.

또한 a 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 ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top